어느 순간부터 아이폰에서 새로운 앱을 설치한 후 실행하면 앱 추적 권한 창을 볼 수 있다. 이것을 왜 띄우는 건지, 어떻게 구현하는 건지 알아보자.
앱 추적 권한 요청 창에서 '허용'을 클릭하면 앱 내 광고를 사용자 맞춤형 광고로 제공할 수 있다.
예를 들어, 최근에 사용자가 '회색 후드티'에 대해서 조회했다면 앱 내에서 '회색 후드티'에 대한 광고를 보여준다.
사용자가 광고를 클릭할 확률이 올라가기 때문에 앱 추적을 사용하지 않을 때보다 수익을 올릴 수 있다.
여기서 알아야하는 개념이 IDFA(Identifier for Advertising)이다. 기기 ID 값인데, 사용자에게 맞춤형 광고를 제공할 때 사용되는 값이다.
애플에서 제공하는 AdSupport 프레임워크로 IDFA에 접근할 수 있다.
애플에서 제공하는 앱 추적 투명성(App Tracking Transparency) 프레임워크를 이용하여 사용자에게 앱 추적 권한을 요청할 수 있다.
info.plist의 Privacy - Tracking Usage Description에 권한을 요청할 때 사용자에게 보여줄 문구를 입력한다.
먼저, AdSupport와 AppTrackingTransparency를 import한다.
import AdSupport
import AppTrackingTransparency
그리고 두가지 경우로 나눌건데, 상황에 맞게 코드를 작성하면 될 것이다.
1) 앱 추적 권한만 요청하는 경우
2) 앱 추적외에 다른 권한도 요청하는 경우
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// 앱 추적 권한 요청
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization { status in
switch status {
case .authorized: // 허용됨
print("Authorized")
print("IDFA = \(ASIdentifierManager.shared().advertisingIdentifier)")
case .denied: // 거부됨
print("Denied")
case .notDetermined: // 결정되지 않음
print("Not Determined")
case .restricted: // 제한됨
print("Restricted")
@unknown default: // 알려지지 않음
print("Unknow")
}
}
}
}
return true
}
func setNotification(){
let n = NotificationHandler()
n.askNotificationPermission {
// 다른 권한 요청 창보다 늦게 띄우기
DispatchQueue.main.asyncAfter(deadline: .now() + 1) {
if #available(iOS 14, *) {
ATTrackingManager.requestTrackingAuthorization(completionHandler: { status in
switch status {
case .authorized: // 허용됨
print("Authorized")
print("IDFA = \(ASIdentifierManager.shared().advertisingIdentifier)") // IDFA 접근
case .denied: // 거부됨
print("Denied")
case .notDetermined: // 결정되지 않음
print("Not Determined")
case .restricted: // 제한됨
print("Restricted")
@unknown default: // 알려지지 않음
print("Unknown")
}
})
}
}
}
}
class NotificationHandler{
//Permission function
func askNotificationPermission(completion: @escaping ()->Void){
//Permission to send notifications
let center = UNUserNotificationCenter.current()
// Request permission to display alerts and play sounds.
center.requestAuthorization(options: [.alert, .badge, .sound])
{ (granted, error) in
// Enable or disable features based on authorization.
completion()
}
}
}
didFinishLaunchingWithOptions 안에서 setNotification() 함수를 호출한다.
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { setNotification() return true }
알림 권한 요청이 먼저 뜨고 나서 앱 추적 권한 요청이 나타난다.
💙 참고한 블로그 💙
https://velog.io/@khy226/swift-앱-추적-권한-띄우기
https://ios-development.tistory.com/462
https://www.androidhuman.com/2021-04-28-ios_att_explainer