알립니다
iOS SDK v4 설치 및 설정에 대한 가이드입니다. 이전 버전은 iOS SDK (Previous) 가이드에서 확인해 주세요.
에어브릿지는 앱 이벤트를 최근 6개월 동안 1번이라도 트래킹한 유저를 대상으로 사일런트 푸시를 매일 KST(한국표준시) 0시~1시 사이에 보내서 앱 삭제 여부를 확인합니다. 앱 삭제 이벤트는 에어브릿지 리포트와 원본 데이터 추출 등으로 확인할 수 있습니다.
애플 개발자 센터의 인증 정보를 에어브릿지 대시보드에 입력해야 합니다.
애플 개발자 대시보드에서 아래 인증 정보 4가지를 확인해 주세요.
APNs 인증 키를 받기 위해서는 먼저 애플 개발자 센터에서 앱의 푸시 알람을 켜야 합니다.
애플 개발자 센터에서 [Identifiers]를 클릭합니다.
앱 삭제를 트래킹하는 앱을 찾아 클릭합니다. 해당 앱에서 ‘Push Notification’을 체크해 주세요.
애플 개발자 센터에서 [Keys]를 클릭합니다. ‘+’버튼을 클릭해 키를 새로 생성합니다. 그리고 APNs 인증 키(p8)를 다운로드합니다. APNs 인증 키는 최초로 키를 생성하는 과정에서만 다운로드할 수 있습니다. 다시 다운로드할 수 없습니다. 분실하면 다시 키를 발급받아야 합니다.
한번에 생성할 수 있는 APNs 인증 키의 최대 개수는 2개입니다.
[Keys]에서 새로 생성한 키를 클릭하면 Key ID를 확인할 수 있습니다.
애플 개발자 센터에서 [Certificates, Identifiers & Profiles]>[Identifiers]를 클릭합니다. 사용하는 앱을 찾아 클릭합니다. 클릭한 앱의 Bundle ID를 확인할 수 있습니다.
애플 개발자 센터의 [Account]>[Membership details]에서 Team ID (App ID Prefix)를 확인할 수 있습니다.
에어브릿지의 [설정]>[앱 삭제 이벤트 트래킹]>[iOS 앱 삭제 트래킹]에 애플 개발자 센터에서 한 인증 정보를 모두 입력합니다.
인증 정보를 에어브릿지에 모두 입력한 이후에 푸시 토큰을 수집하는 앱 환경을 선택합니다.
선택하는 앱 환경에 따라 수집하는 푸시 토큰이 다릅니다. 예를 들어 Production 환경에서 수집한 푸시 토큰은 Development 환경에서 사용할 수 없습니다.
지원 앱: 애플 앱 스토어에서 다운로드한 앱 또는 TestFlight, Ad Hoc, Enterprise 방법으로 배포한 테스트용 앱 등
수집되는 푸시 포큰: 앱 삭제 트래킹에 실제로 사용하는 푸시 토큰
지원 앱: Production에서 지원하지 않는 개발용(테스트 목적의) 앱
수집되는 푸시 토큰: 개발 환경에서 사용하는 푸시 토큰
Development는 사일런트 푸시 테스트만 진행할 수 있습니다. 앱 삭제를 실제로 트래킹하기 위해서는 Production에서 진행해 주세요.
사일런트 푸시 테스트는 사일런트 푸시가 정상적으로 전송되는지 확인할 수 있는 테스트입니다. ‘사일런트 푸시 테스트’를 클릭하면 입력한 인증 정보로 사일런트 푸시를 디바이스에 정상적으로 전송하는지 확인할 수 있습니다. 사일런트 푸시 테스트는 앱 삭제 이벤트를 측정하거나 생성하지 않기 때문에 에어브릿지 대시보드에서 앱 삭제를 확인할 수 없습니다.
앱 삭제 트래킹을 위해 필요한 인증 정보 중 하나인 Bundle ID는 사일런트 푸시 테스트로만 유효성을 검증할 수 있습니다. 따라서 사일런트 푸시 테스트 진행을 권장합니다.
사일런트 푸시 테스트를 진행하기 위해서는 APNs 푸시 토큰(디바이스 토큰)이 필요합니다. 앱 환경에 따라 수집하는 푸시 토큰이 다릅니다. 사일런트 푸시 테스트를 진행하기 전에 푸시 토큰과 앱 환경을 확인해야 합니다. APNs 푸시 토큰을 확인하는 방법은 애플 개발자 가이드를 참고해 주세요.
에어브릿지에서 디바이스로 사일런트 푸시를 전송하면 성공 메시지 또는 에러 코드를 확인할 수 있습니다. iOS 환경의 사일런트 푸시 테스트로 확인할 수 있는 주요 에러 코드는 아래와 같습니다. 에러 코드에 관한 자세한 내용은 애플 개발자 가이드를 참고해 주세요.
에러 코드 | 의미 |
---|---|
403 (InvalidProviderToken) | 잘못된 APNs 인증 정보입니다. 올바른 Key ID 혹은 Team ID를 입력한 후 다시 시도해주세요. |
400 (TopicDisallowed) | 잘못된 Bundle ID입니다. 인증 정보 입력란으로 돌아가 올바른 Bundle ID를 입력한 후 다시 시도해 주세요. |
400 (BadDeviceToken) | 잘못된 푸시 토큰입니다. 테스트 앱과 앱 환경 설정이 일치하는지 확인해 보세요. |
410 (Unregistered) | 잘못된 푸시 토큰입니다. 테스트 앱과 앱 환경 설정이 일치하는지 확인해 보세요. 또는 수일 전에 사용자가 앱을 삭제했을 수 있습니다. |
410 (ExpiredToken) | 잘못된 푸시 토큰입니다. 테스트 앱과 앱 환경 설정이 일치하는지 확인해 보세요. 또는 수일 전에 사용자가 앱을 삭제했을 수 있습니다. |
이미 앱이 삭제됐다는 의미를 가진 일부 에러 코드는 사일런트 푸시가 앱 삭제 이벤트를 정상적으로 트래킹해도 나올 수 있습니다. 하지만 사일런트 푸시 테스트의 목적은 사일런트 푸시가 정상적으로 전송되는 확인하는 것에 있습니다.
트래킹하는 앱을 최근 10일 동안 삭제하지 않은 테스트 디바이스로 사일런트 푸시 테스트를 진행해 주세요.
주의하세요
iOS 시뮬레이터(iOS Simulator)에서는 사일런트 푸시 테스트를 진행할 수 없습니다.
iOS 환경에서 발생한 앱 삭제를 트래킹하기 위해서는 앱에서 사일런트 푸시 알람이 동작되도록 식별자(identifier)를 설정하고 Capabilities를 추가해야 합니다. 또 앱이 앱 삭제 트래킹 목적의 사일런트 푸시 알람을 무시하는 코드를 추가해야 합니다.
1. Xcode에서 [Project 파일]>[Signing & Capabilities]로 이동합니다.
2. '+ Capability'을 클릭합니다. Push Notifications도 선택해 주세요. 그리고 Background Modes를 선택한 후에 Remote Notification을 체크합니다.
registerForRemoteNotifications
함수를 호출하면 앱에서 푸시 알람을 사용할 수 있습니다. 푸시 알람을 기존에 사용하지 않았다면 해당 함수를 호출해 주세요.
func application(_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool
{
...
UIApplication.shared.registerForRemoteNotifications()
...
}
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[UIApplication.sharedApplication registerForRemoteNotifications];
return YES;
}
설정 이후에는 사일런트 푸시 알람을 포함한 푸시 알람이 전송될 때마다 application(_:didFinishLaunchingWithOptions:)
함수가 항상 호출됩니다. 사일런트 푸시 알람이 전송되면 앱이 백그라운드(Background)로 실행된 이후에 해당 함수가 호출됩니다. 이미 앱이 백그라운드로 실행된 상태이기 때문에 앱이 포어그라운드(Foreground)로 변경되더라도 함수가 다시 호출되지 않습니다.
application(_:didFinishLaunchingWithOptions:)
함수 호출 여부는 launchOption
으로 확인할 수 있습니다. 아래 코드를 참고해 주세요.
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let key = UIApplication.LaunchOptionsKey.remoteNotification
let isLaunchRemoteNotification: Bool = launchOptions?[key] != nil
}
APNs Push Token 이 생성되면 해당 토큰을 registerPushToken
함수를 호출해 SDK에 전달해 주세요.
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
AirBridge.registerPushToken(deviceToken)
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[AirBridge registerPushToken:deviceToken];
}
에어브릿지가 앱 삭제 트래킹을 위해 보내는 사일런트 푸시 알람은 유저 앱에 나오지 않아야 하는 알람입니다. 앱은 해당 푸시 알람을 무시해야 합니다. 아래 코드를 참고해 주세요.
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
{
if Airbridge.isUninstallTrackingNotification(userInfo) {
return
}
...
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
if ([Airbridge isUninstallTrackingNotification:userInfo]) {
return;
}
...
}
에어브릿지 대시보드에 인증 정보를 입력하고 에어브릿지 SDK 설정을 마치면 앱 삭제 트래킹 토글을 활성화할 수 있습니다. 토글을 활성화하면 앱 삭제 트래킹이 시작됩니다.
앱 삭제에 관한 자세한 내용은 에어브릿지 가이드에서 확인해 주세요.
도움이 되었나요?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?
) -> Bool {
let key = UIApplication.LaunchOptionsKey.remoteNotification
let isLaunchRemoteNotification: Bool = launchOptions?[key] != nil
}
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data)
{
AirBridge.registerPushToken(deviceToken)
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
[AirBridge registerPushToken:deviceToken];
}
func application(_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
{
if Airbridge.isUninstallTrackingNotification(userInfo) {
return
}
...
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
if ([Airbridge isUninstallTrackingNotification:userInfo]) {
return;
}
...
}