トップ 最新 追記

Cocoa練習帳

iOS/iPhone/iPad/watchOS/tvOS/MacOSX/Android プログラミング, Objective-C, Cocoa, Swiftなど

2012|01|02|03|04|05|06|07|08|09|10|11|12|
2013|01|02|03|04|05|06|07|08|09|10|11|12|
2014|01|02|03|04|05|06|07|08|09|10|11|12|
2015|01|02|03|04|05|06|07|08|09|10|11|12|
2016|01|02|03|04|05|06|07|08|09|10|11|12|
2017|01|02|03|04|05|06|07|08|09|10|11|12|
2018|01|02|03|04|05|06|07|08|09|10|11|12|
2019|01|02|03|04|05|06|07|08|09|10|11|12|
2020|01|02|03|04|05|06|07|08|09|10|11|12|
2021|01|02|

2020-11-30 [Cocoa][Swift]iOS 14 でのトラッキングのオプトインについて

広告を使って Android と iOS のモバイルアプリを宣伝する場合、広告のクリックがアプリのインストールとアプリ内操作の獲得にどの程度貢献しているかを把握することが重要だ。

iOS の IDFA(広告ID)は、この情報を計測するために利用されている。

iOS14のトラッキングは、以下の種類がある。

  • SKAdNetwork (SKA)
    • ユーザの個人情報を利用しない。
    • アプリのインストールと特定のキャンペーンを関連付けるためのもの。
  • AppTrackingTransparency (ATT) フレームワーク
    • IDFAを扱うためのもの。

iOS14から、ASIdentifierManager の isAdvertisingTrackingEnabled は非推奨。

ASIdentifierManager *identifierManager = [ASIdentifierManager sharedManager];
if ([identifierManager isAdvertisingTrackingEnabled]) {
    NSLog(@"[idfa] isAdvertisingTrackingEnabled enabled");
} else {
    NSLog(@"[idfa] isAdvertisingTrackingEnabled disabled");
}
NSString *idfa = identifierManager.advertisingIdentifier.UUIDString;
NSLog(@"[idfa] %@", idfa);

コードの互換性は保たれていて、iOS14では isAdvertisingTrackingEnabled はfalseを返す。

iOS14では、設定のプライバシー > 広告 画面がなくなった。

広告

システムが表示するダイアログの文言はInfo.plistで設定する。

ダイアログ
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	<key>NSUserTrackingUsageDescription</key>
	<string>広告トラッキングしますよ。</string>
</dict>
</plist>

ユーザに許可を得るコードは以下のとおり。

 if (@available(iOS 14, *)) {
    [ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:
        ^(ATTrackingManagerAuthorizationStatus status) {
        NSLog(@"in requestTrackingAuthorizationWithCompletionHandler");
        if (status == ATTrackingManagerAuthorizationStatusAuthorized) {
            NSLog(@"[requestTrackingAuthorization] authorized");
            NSString *idfa = identifierManager.advertisingIdentifier.UUIDString;
            NSLog(@"[idfa] %@", idfa);
        } else if (status == ATTrackingManagerAuthorizationStatusDenied) {
            NSLog(@"[requestTrackingAuthorization] denied");
        } else if (status == ATTrackingManagerAuthorizationStatusRestricted) {
            NSLog(@"[requestTrackingAuthorization] restricted");
        } else {
            NSLog(@"[requestTrackingAuthorization] notDetermined");
        }
   }];
} else {
    // Fallback on earlier versions
}

確認ダイアログは一度しか表示しないが、設定は後から有効にできる。その画面を表示するコードは以下のとおり。

 NSURL *url = [NSURL URLWithString:UIApplicationOpenSettingsURLString];
[[UIApplication sharedApplication] openURL:url options:@{} completionHandler:nil];
アプリ設定 設定

トップ 最新 追記