Я хотел бы получить устройство IDFA
. Как получить эту информацию из официального API iOS?
Как получить iPhone IDFA от API?
Ответ 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
}
}