169
Help us understand the problem. What are the problem?

More than 1 year has passed since last update.

posted at

updated at

Organization

iOS14でエンジニアがすべきIDFA対応

はじめに

IDFAの許可リクエストの表示タイミング・内容の具体例についてはこちらの記事を参考にしてください🙋‍♂️

2020年9月にリリースされたiOS14から、
iOS13まで端末単位で設定していたIDFAの取得許可(追跡型広告制限)が
端末兼アプリ単位の取得許可に変更され、
各アプリにて、通知や位置情報許可のように、ユーザに許可を取る必要がでてきます。

iOS13
iOS13.jpg

iOS14
スクリーンショット 2020-09-24 15.07.48.png

IDFAとは?iOS13と比較した詳しい挙動の違いは?は
こちらの素晴らしい記事にまとまっていたので割愛させていただきます。
https://qiita.com/yofuru/items/213b88b85553631204e4

重要なのはiOS14ではIDFAをデフォルトで取得できなくなることです

本記事ではエンジニアがiOS14でIDFAを取得するために対応する必要がある実作業をまとめます。

1.frameworkの追加

IDFAの使用用途は、主に広告やトラッキングのためと考えられるため既に導入済みであることが多いかと思いますが、
AdSupport.framework
を追加します。
そしてiOS14から追加された、
AppTrackingTransparency.framework
を追加します。

公式リファレンス: https://developer.apple.com/documentation/apptrackingtransparency

2.info.plistへ説明の追加

Privacy - Tracking Usage Description
をKeyとしてValueにユーザにAlertを出した時に表示される文言を追加します。

ここでの文言は非常に重要になってくると考えられます。
ATTrackingManager.requestTrackingAuthorizationを利用してAlertを表示できるのは1度きりです
通知や位置や写真の時と一緒ですね。

AlertのタイトルはApple側が表示するもので、日本語だとこう表示されました。
(アプリ名マンガボックス)
スクリーンショット 2020-09-24 14.34.23.png

🤔🤔🤔

一般ユーザはなんぞや🤔🤔🤔
って感じだと思う。
誰も許可したくならない…

info.plistの記述はAlertのメッセージ部分に表示されます。
メッセージに表示されている'表示する広告を適切に選択するために使用します'はじんむが仮で考えた文章
こちらを許可していただければ、関連性の高い広告を配信することができるなど
許可するメリットを伝えることが重要かと思います。

また、info.plistの文言はAppleの審査の目が厳しい箇所でもあり、
Appleレビューガイドラインにも下記が追加されました

3.2.2 許容されない行為(vi)
 Appの機能やコンテンツへのアクセス、金銭その他の報酬を受け取るために行ってはいけないことに
 「追跡の有効化(enable tracking)」が追加

そのため、オンにしたら報酬あげるよ!という文言はリジェクトされるので注意してください。
強制させるような文言や、用途が何も伝わらない文言はやめましょう。

3.Alertを表示するコードの追加

必要なタイミングで許可情報を取得し、Alertを表示するコードを追加しましょう。

ViewController.swift
import UIKit
import AdSupport
import AppTrackingTransparency

class ViewController: UIViewController {

    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        if #available(iOS 14, *) {
            switch ATTrackingManager.trackingAuthorizationStatus {
            case .authorized:
                print("Allow Tracking")
                print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
            case .denied:
                print("😭拒否")
            case .restricted:
                print("🥺制限")
            case .notDetermined:
                showRequestTrackingAuthorizationAlert()
            @unknown default:
                fatalError()
            }
        } else {// iOS14未満
            if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
                print("Allow Tracking")
                print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
            } else {
                print("🥺制限")
            }
        }
    }

    ///Alert表示
    private func showRequestTrackingAuthorizationAlert() {
        if #available(iOS 14, *) {
            ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
                switch status {
                case .authorized:
                    print("🎉")
                    //IDFA取得
                    print("IDFA: \(ASIdentifierManager.shared().advertisingIdentifier)")
                case .denied, .restricted, .notDetermined:
                    print("😭")
                @unknown default:
                    fatalError()
                }
            })
        }
    }
}

先述のように、requestTrackingAuthorizationを利用してAlertを表示できるのは1度きりです。そのため、表示するタイミングが非常に重要になってきます。

なお、iOS13までIDFAを取得できるか利用していた
ASIdentifierManager の isAdvertisingTrackingEnabled
はiOS14からDeprecatedになります。
https://developer.apple.com/documentation/adsupport/asidentifiermanager
iOS14からこちらの値が常にfalseになるため、既存の実装には注意が必要です。

注意点

冒頭で説明した通り、iOS14からは、端末兼アプリ単位の追跡許可設定になります。

端末単位で拒否されていると、requestTrackingAuthorizationしていなくても、trackingAuthorizationStatusがdeniedで返ってきます、Alertを表示することさえ許されません、無慈悲😇

端末の設定は
設定 > プライバシー > トラッキング > Appからのトラッキングを許可(ON/OFF)
から設定できます。
各アプリの設定もここからできます。

また、もう一つ似た設定に
設定 > プライバシー > Appleの広告 > パーソナライズされた広告(ON/OFF)

スクリーンショット 2020-09-24 14.41.11.png

があります。

こちらは試したところ、パーソナライズされた広告がOFFの時でもtrackingAuthorizationStatusが.authorizedで返ってきてIDFAが取れていました
説明を読むとこちらは、App StoreやApple News、株価のターゲティングが無効になるそうです。

おわりに

この他に開発者が意識するべきことは、利用しているSDKがIDFAを利用しているかを把握し
各社に対応を伺うことです。

参考にAdjust様がものすごく丁重に対応すべき項目をまとめてくださっていたので共有します。
Adjust: iOS14の変更に向けての準備と対策

また、いくつかの広告会社さんからSDKのアップデート予定を告知していただきました🙇‍♂️

ユーザさんにメリットを伝えつつセキュリティを担保しつつ
サービスの目的も達成しうる対応をしていきましょう💪

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Sign upLogin
169
Help us understand the problem. What are the problem?