デバイスを取得したいIDFA
。 iOS公式APIからこの情報を取得する方法は?
まず第一に:
#import <AdSupport/ASIdentifierManager.h>
NSStringとして取得する場合は、次を使用します。
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
したがって、コードは次のようになります。
NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
最初に確認する必要がありますユーザーユーザーが広告追跡をオプトアウトすることを決定した場合。彼が許可した場合のみ、IDFA
を使用できます。
isAdvertisingTrackingEnabled
のASIdentifierManager
メソッドを呼び出すことで確認できます。
isAdvertisingTrackingEnabled
広告の追跡を実行する前に、このプロパティの値を確認してください。値が
NO
の場合、次の目的にのみ広告識別子を使用します:フリークエンシーキャップ、コンバージョンイベント、一意のユーザー数の推定、セキュリティと不正検出、およびデバッグ。
次のコードスニペットは、IDFA
の文字列値を取得する方法を示しています。
@import AdSupport;
- (NSString *)identifierForAdvertising {
// Check whether advertising tracking is enabled
if([[ASIdentifierManager sharedManager] isAdvertisingTrackingEnabled]) {
NSUUID *identifier = [[ASIdentifierManager sharedManager] advertisingIdentifier];
return [identifier UUIDString];
}
// Get and return IDFA
return nil;
}
import AdSupport
func identifierForAdvertising() -> String? {
// Check whether advertising tracking is enabled
guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else {
return nil
}
// Get and return IDFA
return ASIdentifierManager.shared().advertisingIdentifier.uuidString
}
ASIdentifierManager は、iOS 6以降を実行しているデバイスから広告識別番号を収集する公式の方法です。 -[[ASIdentifierManager sharedManager] advertisingIdentifier];
を使用して取得できます。
SwiftでIDFAを取得します。
import AdSupport
...
let myIDFA: String?
// Check if Advertising Tracking is Enabled
if ASIdentifierManager.sharedManager().advertisingTrackingEnabled {
// Set the IDFA
myIDFA = ASIdentifierManager.sharedManager().advertisingIdentifier.UUIDString
} else {
myIDFA = nil
}
IOS 10以降、ユーザーが「広告制限の制限」を有効にすると、OSは広告識別子とともに新しい値「00000000-0000-0000-0000-000000000000」を送信します。
この記事のとおり: https://fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/
以下にコメントがありますSwiftのヘルパークラスこれは、ユーザーが広告の追跡をオフにした場合に識別子のnil
オブジェクトを提供します。
import AdSupport
class IDFA {
// MARK: - Stored Type Properties
static let shared = IDFA()
// MARK: - Computed Instance Properties
/// Returns `true` if the user has turned off advertisement tracking, else `false`.
var limited: Bool {
return !ASIdentifierManager.shared().isAdvertisingTrackingEnabled
}
/// Returns the identifier if the user has turned advertisement tracking on, else `nil`.
var identifier: String? {
guard !limited else { return nil }
return ASIdentifierManager.shared().advertisingIdentifier.uuidString
}
}
プロジェクトに追加する(たとえば、IDFA.Swift
)およびAdSupport.framework
[全般設定]タブの[リンクされたフレームワークとライブラリ]セクションを使用してターゲットに追加します。
次に、このように使用します:
if let identifier = IDFA.shared.identifier {
// use the identifier
} else {
// put any fallback logic in here
}
Swift 3および4
var IDFA = String()
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
IDFA = ASIdentifierManager.shared().advertisingIdentifier
}
AmroのSwift答えを拡張するために、メソッドにラップされた同様のコードを次に示します。
import AdSupport
...
func provideIdentifierForAdvertisingIfAvailable() -> String? {
if ASIdentifierManager.sharedManager().advertisingTrackingEnabled {
return ASIdentifierManager.sharedManager().advertisingIdentifier?.UUIDString ?? nil
} else {
return nil
}
}
IOS経由で追跡が無効になっている場合にIDFAまたはnilを取得するためのより良いアプローチは、(プライベート)拡張機能を使用しています:
import AdSupport
class YourClass {
func printIDFA() {
print(ASIdentifierManager.shared().advertisingIdentifierIfPresent)
}
}
private extension ASIdentifierManager {
/// IDFA or nil if ad tracking is disabled via iOS system settings
var advertisingIdentifierIfPresent: String? {
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
return ASIdentifierManager.shared().advertisingIdentifier.uuidString
}
return nil
}