itsource

API에서 아이폰 IDFA를 검색하는 방법은?

mycopycode 2023. 10. 4. 21:52
반응형

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

반응형