API에서 아이폰 IDFA를 검색하는 방법은?
저는 그 장치를 받고 싶습니다.IDFA
. iOS 공식 API에서 이 정보를 얻는 방법은?
먼저 사용자의 IDFA를 사용하려면 사용자의 허가를 받아야 합니다.
#import <AppTrackingTransparency/AppTrackingTransparency.h>
[ATTrackingManager requestTrackingAuthorizationWithCompletionHandler:^(ATTrackingManagerAuthorizationStatus status) {
// Tracking authorization completed. Start loading ads here.
}];
이 권한 흐름은 앱을 다시 시작하거나 다시 호출하는 경우에도 처음 호출할 때 한 번만 실행됩니다.다른 대답을 하려면 앱을 장치나 시뮬레이터에서 완전히 삭제하고 다시 설치해야 합니다.iOS 시뮬레이터는 허가 흐름에 대한 답이 무엇이든 간에 비워진 IDFA(모두 0)를 반환합니다.추적을 요청할 때 사용자에게 표시되는 메시지를 사용자 지정하는 방법을 포함한 자세한 내용은 https://developer.apple.com/documentation/apptrackingtransparency 을 참조하십시오.많은 광고용 SDK에는 사용자가 사용할 수 있는 고유의 동의 흐름 호출이 있습니다.
허가를 받은 후 IDFA를 실제로 받으려면:
#import <AdSupport/ASIdentifierManager.h>
NSS 문자열로 가져오려면 다음을 사용합니다.
[[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString]
당신의 코드는 다음과 같습니다.
NSString *idfaString = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
NSLog (@"IDFA: %@", idfaString);
먼저 사용자가 광고 추적에서 제외하기로 결정했는지 확인해야 합니다.만약 그가 허락한다면 당신은 그를 이용할 수 있습니다.IDFA
.
전화로 확인하실 수 있습니다.isAdvertisingTrackingEnabled
의 방법ASIdentifierManager
.
is 광고 추적 사용
광고 추적을 수행하기 전에 이 속성의 값을 확인하십시오.값이 다음과 같은 경우
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;
}
스위프트
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
}
IDFA
- 광고용 식별자
isAdvertisingTrackingEnabled -> trackingAuthorizationStatus
iOS v14부터 애플은 이 논리를 더 이상 사용하지 않고 프레임워크로 옮겼습니다.이제 사용자는 읽기 권한을 부여해야 합니다.idfa
(위치 권한과 동일한 방식으로)
사용자는 다음을 통해 제어할 수 있습니다.
#iOS 13
#AdSupport
#ASIdentifierManager.shared().isAdvertisingTrackingEnabled
Settings -> Privacy -> Advertising -> Limit Ad Tracking
#iOS 14
#AppTrackingTransparency
#ATTrackingManager.trackingAuthorizationStatus
#a global flag
Settings -> Privacy -> Tracking -> `Allow Apps to Request to Track`
#or select an app from list to control every app separately
#a local flag
Settings -> <app_name> -> Allow Tracking
실행
import AppTrackingTransparency
import AdSupport
func getIDFA() -> String? {
// Check whether advertising tracking is enabled
if #available(iOS 14, *) {
if ATTrackingManager.trackingAuthorizationStatus != ATTrackingManager.AuthorizationStatus.authorized {
return nil
}
} else {
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled == false {
return nil
}
}
return ASIdentifierManager.shared().advertisingIdentifier.uuidString
}
덴티파이더 매니저는 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-00000000"이라는 새로운 값을 가진 광고 식별자를 함께 전송합니다.
이 기사에 따르면: https://fpf.org/2016/08/02/ios-10-feature-stronger-limit-ad-tracking/
여기 스위프트의 코멘트 도우미 클래스가 있습니다.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
}
스위프트 3 & 4
var IDFA = String()
if ASIdentifierManager.shared().isAdvertisingTrackingEnabled {
IDFA = ASIdentifierManager.shared().advertisingIdentifier
}
14 에서.ASIdentifierManager.shared().isAdvertisingTrackingEnabled
사용되지 않습니다.사용해주세요ATTrackingManager.trackingAuthorizationStatus == .authorized
대신.
import AdSupport
import AppTrackingTransparency
extension ASIdentifierManager {
//NOTE: if the user has enabled Limit Ad Tracking, this IDFA will be all zeros on a physical device
static var identifierForAdvertising: String {
// Check whether advertising tracking is enabled
if #available(iOS 14, *) {
guard ATTrackingManager.trackingAuthorizationStatus == .authorized else {
return ""
}
} else {
guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else {
return ""
}
}
// Get and return IDFA
return ASIdentifierManager.shared().advertisingIdentifier.uuidString
}
}
iOS Setting을 통해 추적이 비활성화된 경우 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 isAdvertisingTrackingEnabled {
return advertisingIdentifier.uuidString
}
return nil
}
}
Amro의 Swift 답변을 확장하기 위해, 다음과 같은 방법으로 랩핑된 유사한 코드가 있습니다.
import AdSupport
...
func provideIdentifierForAdvertisingIfAvailable() -> String? {
if ASIdentifierManager.sharedManager().advertisingTrackingEnabled {
return ASIdentifierManager.sharedManager().advertisingIdentifier?.UUIDString ?? nil
} else {
return nil
}
}
캡슐화 기능이 있는 Swift 5:
import AdSupport
struct ID{
static var advertising: String? {
// Firstly, Check whether advertising tracking is enabled
guard ASIdentifierManager.shared().isAdvertisingTrackingEnabled else {
return nil
}
// Then, Get and return IDFA
return ASIdentifierManager.shared().advertisingIdentifier.uuidString
}
}
언급URL : https://stackoverflow.com/questions/12944504/how-to-retrieve-iphone-idfa-from-api
'itsource' 카테고리의 다른 글
DateTime::createFromFormat을 통해 '2016.04.30 PM 7:30'의 PHP DateTime 인스턴스를 만드는 데 적합한 형식은 무엇입니까? (0) | 2023.10.04 |
---|---|
dplyr: 열을 알파벳순으로 R 순서 지정 (0) | 2023.10.04 |
C++에서 파일을 디프하는 방법이 있습니까? (0) | 2023.10.04 |
소나타 관리 양식 내에서 Ajax를 사용하는 방법은? (0) | 2023.10.04 |
Angular CLI를 사용하여 패키지를 제거하는 방법? (0) | 2023.10.04 |