Подтвердить что ты не робот

Как получить iPhone IDFA от API?

Я хотел бы получить устройство IDFA. Как получить эту информацию из официального API iOS?

4b9b3361

Ответ 1

Прежде всего:

#import <AdSupport/ASIdentifierManager.h> 

Если вы хотите получить его как NSString, используйте:

[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]

Итак, ваш код может выглядеть так:

NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];

Ответ 2

Сначала вам нужно проверить , если пользователь решил отказаться от отслеживания объявлений. Только если он допустил это, вы можете использовать IDFA.

Вы можете проверить это, вызвав метод isAdvertisingTrackingEnabled ASIdentifierManager.

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
}

Ответ 3

ASIdentifierManager является официальным способом получения идентификационного номера рекламы с устройства под управлением iOS 6+. Вы можете использовать -[[ASIdentifierManager sharedManager] advertisingIdentifier];, чтобы получить его.

Ответ 4

Получить IDFA в Swift:

    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
    }

Ответ 5

Начиная с iOS 10, когда пользователь разрешает "отслеживание конечных объявлений", ОС отправляет рекламный идентификатор с новым значением "00000000-0000-0000-0000000000000000".

В соответствии с этой статьей: https://fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/

Ответ 6

Swift 3 и 4

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

Ответ 7

Здесь прокомментированный вспомогательный класс в 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
}

Ответ 8

Просто, чтобы продлить ответ Amro Swift, здесь аналогичный код завернут в метод:

import AdSupport

...

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