web-dev-qa-db-ja.com

APIからiPhone IDFAを取得する方法は?

デバイスを取得したいIDFA。 iOS公式APIからこの情報を取得する方法は?

64
fvisticot

まず第一に:

#import <AdSupport/ASIdentifierManager.h> 

NSStringとして取得する場合は、次を使用します。

[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]

したがって、コードは次のようになります。

NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
78
Zachary Drake

最初に確認する必要がありますユーザーユーザーが広告追跡をオプトアウトすることを決定した場合。彼が許可した場合のみ、IDFAを使用できます。

isAdvertisingTrackingEnabledASIdentifierManagerメソッドを呼び出すことで確認できます。

isAdvertisingTrackingEnabled

広告の追跡を実行する前に、このプロパティの値を確認してください。値がNOの場合、次の目的にのみ広告識別子を使用します:フリークエンシーキャップ、コンバージョンイベント、一意のユーザー数の推定、セキュリティと不正検出、およびデバッグ。

次のコードスニペットは、IDFAの文字列値を取得する方法を示しています。

ObjC

@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;
}

Swift

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
}
64
RaffAl

ASIdentifierManager は、iOS 6以降を実行しているデバイスから広告識別番号を収集する公式の方法です。 -[[ASIdentifierManager sharedManager] advertisingIdentifier];を使用して取得できます。

14
CodaFi

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
    }
12
Amro Shafie

IOS 10以降、ユーザーが「広告制限の制限」を有効にすると、OSは広告識別子とともに新しい値「00000000-0000-0000-0000-000000000000」を送信します。

この記事のとおり: https://fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/

6
Vlad

以下にコメントがあります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
}
6
Dschee

Swift 3および4

var IDFA = String()
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
            IDFA = ASIdentifierManager.shared().advertisingIdentifier
}
5
Oscar

AmroのSwift答えを拡張するために、メソッドにラップされた同様のコードを次に示します。

import AdSupport

...

func provideIdentifierForAdvertisingIfAvailable() -> String? {
    if ASIdentifierManager.sharedManager().advertisingTrackingEnabled {
      return ASIdentifierManager.sharedManager().advertisingIdentifier?.UUIDString ?? nil
    } else {
      return nil
    }
  }
1
worthbak

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        
}
0
J.D. Wooder