技術ブログ

プログラミング、IT関連の記事中心

Swiftの広告パーミッション確認の表示方法(AppTrackingTransparency)

目次

AppTrackingTransparencyとは

Appleの公式サイトより引用

新規App、および既存Appのアップデートを提出するには、Appにおける特定のデータ収集方針に関する情報をプロダクトページに掲載する必要があります。また、iOS 14.5、iPadOS 14.5、tvOS 14.5以降では、他社が所有するAppやWebサイトでの行動をトラッキングする場合、ユーザーに許可を求めることが必要になります。

developer.apple.com

つまり、広告が表示されていて、iOS14.5以降にリリース、アップデートするアプリには必須の権限確認処理になります。


スポンサードリンク



「Info.plist」の設定

「Property List」での編集の場合、「Privacy - Tracking Usage Description」を追加して、値に任意の文言を設定します。

「Source Code」での編集の場合、以下を追加し、「<string>」内に任意の文言を設定します。

<key>NSUserTrackingUsageDescription</key>
<string>ダイアログに表示される任意の文言</string>

広告パーミッション確認の表示方法

以下のインポートを記載し、「AppTrackingTransparency」のライブラリをインポートします。

import AppTrackingTransparency

以下の様に記述することで、広告が表示される前の時点で、権限確認ダイアログが表示されます。

ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
    // ここで広告表示処理を実施
})

iOS14以前をサポートする場合

以下のようにiOS14以降と、以前とで広告表示処理を分ける事で対応が可能です。

if #available(iOS 14, *) {
    ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
        // ここで広告表示処理を実施
    })
} else {
    // ここで広告表示処理を実施
}


スポンサードリンク



広告表示処理周りのサンプル

以下、画面下部に表示されるバナー広告の表示処理周りのサンプルです。
AD_MOB_BANNER_ID」は各自のバナーIDなので、それぞれで置き換えてください。

import Foundation
import UIKit
import GoogleMobileAds
import AppTrackingTransparency

class GoogleAdUtil {
    class func addBannerAd(vc: UIViewController) -> GADBannerView {
        let bannerView = GADBannerView(adSize: GADAdSizeBanner)

        if #available(iOS 14, *) {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                DispatchQueue.main.async {
                    bannerView.adUnitID = AD_MOB_BANNER_ID
                    bannerView.rootViewController = vc
                    
                    bannerView.translatesAutoresizingMaskIntoConstraints = false
                    vc.view.addSubview(bannerView)
                    vc.view.addConstraints(
                        [NSLayoutConstraint(item: bannerView,
                                            attribute: .bottom,
                                            relatedBy: .equal,
                                            toItem: vc.view.safeAreaLayoutGuide,
                                            attribute: .bottom,
                                            multiplier: 1,
                                            constant: 0),
                         NSLayoutConstraint(item: bannerView,
                                            attribute: .centerX,
                                            relatedBy: .equal,
                                            toItem: vc.view,
                                            attribute: .centerX,
                                            multiplier: 1,
                                            constant: 0)
                    ])
                    bannerView.delegate = vc as? GADBannerViewDelegate
                    bannerView.load(GADRequest())
                }
            })
        } else {
            bannerView.adUnitID = AD_MOB_BANNER_ID
            bannerView.rootViewController = vc
            
            bannerView.translatesAutoresizingMaskIntoConstraints = false
            vc.view.addSubview(bannerView)
            vc.view.addConstraints(
                [NSLayoutConstraint(item: bannerView,
                                    attribute: .bottom,
                                    relatedBy: .equal,
                                    toItem: vc.view.safeAreaLayoutGuide,
                                    attribute: .bottom,
                                    multiplier: 1,
                                    constant: 0),
                 NSLayoutConstraint(item: bannerView,
                                    attribute: .centerX,
                                    relatedBy: .equal,
                                    toItem: vc.view,
                                    attribute: .centerX,
                                    multiplier: 1,
                                    constant: 0)
            ])

            bannerView.delegate = vc as? GADBannerViewDelegate
            bannerView.load(GADRequest())
        }
        return bannerView
    }
}


スポンサードリンク