IDFAの取得方法を紹介します。

AdMaxSDKをiOS用に作成したときに実装したメモになります。

取得自体はとっても簡単ですが、使いづらい(用途が限られている)のでそう使う機会はないと思います。

IDFAについて

IDFAはiOS6のリリースと一緒に実装されました。

iOS6以前はUDID(端末固有ID)が使われていましたが、これが使用禁止になってIDFAを使うようになりました。

UDIDと使い道は同じ(識別する)ですが、UDIDと違ってIDFAには以下の特徴があります。

  • ユーザーがIDFAをリセット出来る

    UDIDは端末固有なので、いくらがんばってもリセットできませんでした。製造時に降られてしまいますからね…

    しかし、IDFAはリセットできるのでいくらでも変えることができます。

    変えられることで個人を特定することが不可能になるので、IDFAの使用をしなければならなくなったということでしょうか。

ただIDFAを広告以外で使うとAppleさんにとってもおこられるのでやめてください。

自分のiPhoneのIDFAがなんなのかの確認程度にしてください。

では取得方法を紹介します。

取得方法

まずはAdSupport.frameworkのライブラリを追加してください。

追加方法は別記事にしましたので、ご参考にしてください。

【Xcode】ライブラリの追加方法

以下のコードで取得できます。

1
2
3
4
ASIdentifierManager *identifierManager = [ASIdentifierManager sharedManager];
if ([identifierManager isAdvertisingTrackingEnabled]) {
NSString *idfa = identifierManager.advertisingIdentifier.UUIDString;
}

ASIdentifierManagerクラス

公式リファレンスによると…

The ASIdentifierManager class provides apps with access to an identifier that can be used only for serving advertisements, as well as a flag which indicates whether a user has limited ad tracking.

かなり意訳ですが、

「ユーザーが広告のトラッキングを制限しているかどうかを示すフラグとIDFA(識別子)へのアクセス権を提供するクラスです。」

という感じです。

とってもシンプルなクラスになります。

- (BOOL)isAdvertisingTrackingEnabled

これはユーザーがIDFAによるトラッキングを良しとしているかの値になります。

ただこの値がNOになっていてもIDFAは取得できてしまいます。

ここに関してはわかりやすい記事があったので引用させていただきます。

実際に弄ってみたところ、上記の「追跡型広告を制限」をonにしても、IDFAはアプリから読めてしまう(リセットされるだけ)。
これはおかしいと思って公式ドキュメント(上と同じもの)を確認してみると、
If the user has limited ad tracking, use the advertising identifier only for the following purposes: frequency capping, conversion events, estimating the number of unique users, security and fraud detection, and debugging.
「追跡型広告を制限の設定がonになっていても、頻度キャッピング、コンバージョン計測、ユニークユーザーの計測、セキュリティや詐欺行為の発見、デバッグの用途には使用して良い」とある。

ということです。

ちなみにAdMaxSDKでは- (BOOL)isAdvertisingTrackingEnabledの返り値がNOの時は取得しないようにしています。

これは当たり前ですよね。

- (NSString *)advertisingIdentifier.UUIDString

これがIDFAの値となります。

正確には

1
2
3
ASIdentifierManager *identifierManager = [ASIdentifierManager sharedManager];
NSUUID *advertisingIdentifier = identifierManager.advertisingIdentifier;
NSString *idfa = advertisingIdentifier.UUIDString;

という感じで取得することになります。

UUIDString
Returns the UUID as a string.

というメソッドでNSUUIDNSStringにして返すメソッドを使って、NSStringにしています。

このメソッドを使ってIDFAを取得しています。

余談

ちなみに自分のiPhoneのIDFAの設定がどうなっているのかの確認方法を紹介します。

たぶん知らなければ一生触る機会のない項目なので、よかったらみてみてください。

自分のiPhoneのIDFAの設定確認方法

スクリーンショットで説明します。

設定画面を開く

まずは設定のアプリを開いてください。

プライバシーの項目をタップ

ScreenShot17

プライバシーの項目をタップしてください。

広告の項目をタップ

ScreenShot18

一番下までスクロースすると広告という項目があるので、それをタップしてください。

これがIDFAの設定画面

ScreenShot19

ここの追跡型広告を制限という項目が- (BOOL)isAdvertisingTrackingEnabledになります。

チェックボックスをタップするとONになり、- (BOOL)isAdvertisingTrackingEnabledの返り値がNOになります。

※ちゃんと戻しておいてくださいね!

という設定画面の紹介でした。

参考

ASIdentifierManager Class Reference

iOSのIdentification For Advertisers(IDFA)の取得方法とかの話 | tech lab

NSUUID Class Reference

iOS

「iOS」のおすすめ記事