Skip to content


푸시 통합

1단계: APN 토큰 업로드

Braze를 사용하여 iOS 푸시 알림을 보내려면 먼저 Apple 개발자 설명서에 설명된 대로 .p8 푸시 알림 파일을 업로드해야 합니다:

  1. Apple 개발자 계정에서 Certificates, Identifiers & Profiles로 이동합니다.
  2. Keys에서 All을 선택하고 페이지 상단의 추가 버튼(+)을 클릭합니다.
  3. Key Description에 서명 키의 고유한 이름을 입력합니다.
  4. Key Services에서 Apple Push Notification service (APNs) 체크박스를 선택한 다음 Continue를 클릭합니다. Confirm을 클릭합니다.
  5. 키 ID를 기록해 두세요. Download를 클릭하여 키를 생성하고 다운로드합니다. 다운로드한 파일은 한 번만 다운로드할 수 있으므로 안전한 곳에 저장하세요.
  6. Braze에서 설정 > 앱 설정으로 이동하여 Apple Push Certificate 아래에 .p8 파일을 업로드합니다. 개발용 또는 프로덕션 푸시 인증서를 업로드할 수 있습니다. 앱이 앱 스토어에 실시간으로 출시된 후 푸시 알림을 테스트하려면 앱의 개발 버전을 위한 별도의 워크스페이스를 설정하는 것이 좋습니다.
  7. 메시지가 표시되면 앱의 번들 ID, 키 ID팀 ID를 입력합니다. 또한 프로비저닝 프로필에 의해 정의되는 앱의 개발 환경 또는 프로덕션 환경 중 어디로 알림을 보낼지 지정해야 합니다.
  8. 완료되면 저장을 선택합니다.

2단계: 푸시 기능 활성화

프로젝트 설정에서 Capabilities 탭 아래의 Push Notifications 기능이 토글되어 활성화되어 있는지 확인하세요.

프로젝트 설정에서 Capabilities 탭 아래의 Push Notifications 기능이 토글되어 활성화되어 있는지 확인하세요.

개발용과 프로덕션용 푸시 인증서가 별도로 있는 경우, General 탭에서 Automatically manage signing 체크박스를 해제하세요. 이렇게 하면 각 빌드 구성에 대해 서로 다른 프로비저닝 프로필을 선택할 수 있습니다. Xcode의 자동 코드 서명 기능은 개발 서명만 처리하기 때문입니다.

Xcode 프로젝트 설정의 General 탭을 보여주는 화면. 이 탭에서 Automatically manage signing 옵션이 해제되어 있습니다.

3단계: 푸시 알림 등록

사용자의 기기가 APN에 등록되도록 하려면 앱의 application:didFinishLaunchingWithOptions: 델리게이트 메서드에 적절한 코드 샘플을 포함해야 합니다. 모든 푸시 통합 코드를 애플리케이션의 메인 스레드에서 호출해야 합니다.

Braze는 푸시 실행 버튼 지원을 위한 기본 푸시 카테고리도 제공하며, 이를 푸시 등록 코드에 수동으로 추가해야 합니다. 추가 통합 단계는 푸시 실행 버튼을 참조하세요.

UserNotification 프레임워크 사용 (iOS 10+)

iOS 10에서 도입된 UserNotifications 프레임워크(권장)를 사용하는 경우, 앱 델리게이트의 application:didFinishLaunchingWithOptions: 메서드에 다음 코드를 추가합니다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) {
  UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
  center.delegate = self;
  UNAuthorizationOptions options = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
  if (@available(iOS 12.0, *)) {
  options = options | UNAuthorizationOptionProvisional;
  }
  [center requestAuthorizationWithOptions:options
                        completionHandler:^(BOOL granted, NSError * _Nullable error) {
                          [[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted];
  }];
  [[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
  UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil];
  [[UIApplication sharedApplication] registerForRemoteNotifications];
  [[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if #available(iOS 10, *) {
  let center = UNUserNotificationCenter.current()
  center.delegate = self as? UNUserNotificationCenterDelegate
  var options: UNAuthorizationOptions = [.alert, .sound, .badge]
  if #available(iOS 12.0, *) {
    options = UNAuthorizationOptions(rawValue: options.rawValue | UNAuthorizationOptions.provisional.rawValue)
  }
  center.requestAuthorization(options: options) { (granted, error) in
    Appboy.sharedInstance()?.pushAuthorization(fromUserNotificationCenter: granted)
  }
  UIApplication.shared.registerForRemoteNotifications()
} else {
  let types : UIUserNotificationType = [.alert, .badge, .sound]
  let setting : UIUserNotificationSettings = UIUserNotificationSettings(types:types, categories:nil)
  UIApplication.shared.registerUserNotificationSettings(setting)
  UIApplication.shared.registerForRemoteNotifications()
}

UserNotifications 프레임워크 미사용

UserNotifications 프레임워크를 사용하지 않는 경우, 앱 델리게이트의 application:didFinishLaunchingWithOptions: 메서드에 다음 코드를 추가합니다:

1
2
3
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil];
[[UIApplication sharedApplication] registerForRemoteNotifications];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
1
2
3
4
let types : UIUserNotificationType = UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert
var setting : UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil)
UIApplication.shared.registerUserNotificationSettings(setting)
UIApplication.shared.registerForRemoteNotifications()

4단계: Braze에 푸시 토큰 등록

APN 등록이 완료되면 다음 메서드를 수정하여 결과 deviceToken을 Braze에 전달해야 사용자가 푸시 알림을 받을 수 있습니다.

application:didRegisterForRemoteNotificationsWithDeviceToken: 메서드에 다음 코드를 추가합니다:

1
[[Appboy sharedInstance] registerDeviceToken:deviceToken];

앱의 application(_:didRegisterForRemoteNotificationsWithDeviceToken:) 메서드에 다음 코드를 추가합니다:

1
Appboy.sharedInstance()?.registerDeviceToken(deviceToken)

5단계: 푸시 처리 활성화

다음 코드는 수신된 푸시 알림을 Braze에 전달하며, 푸시 분석 로깅 및 링크 처리에 필요합니다. 모든 푸시 통합 코드를 애플리케이션의 메인 스레드에서 호출해야 합니다.

iOS 10+

iOS 10 이상을 대상으로 빌드할 때는 UserNotifications 프레임워크를 통합하고 다음을 수행하는 것을 권장합니다.

애플리케이션의 application:didReceiveRemoteNotification:fetchCompletionHandler: 메서드에 다음 코드를 추가합니다.

1
2
3
[[Appboy sharedInstance] registerApplication:application
                didReceiveRemoteNotification:userInfo
                      fetchCompletionHandler:completionHandler];

다음으로, 앱의 (void)userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: 메서드에 다음 코드를 추가합니다.

1
2
3
[[Appboy sharedInstance] userNotificationCenter:center
                 didReceiveNotificationResponse:response
                          withCompletionHandler:completionHandler];

포그라운드 푸시 처리

앱이 포그라운드에 있을 때 푸시 알림을 표시하려면 userNotificationCenter:willPresentNotification:withCompletionHandler:를 구현합니다.

1
2
3
4
5
6
7
8
9
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
  if (@available(iOS 14.0, *)) {
    completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);
  } else {
    completionHandler(UNNotificationPresentationOptionAlert);
  }
}

포그라운드 알림을 클릭하면 iOS 10 푸시 델리게이트 userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:가 호출되고, Braze는 푸시 클릭 이벤트를 기록합니다.

앱의 application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 메서드에 다음 코드를 추가합니다.

1
2
3
Appboy.sharedInstance()?.register(application,
                                            didReceiveRemoteNotification: userInfo,
                                            fetchCompletionHandler: completionHandler)

다음으로, 앱의 userNotificationCenter(_:didReceive:withCompletionHandler:) 메서드에 다음 코드를 추가합니다.

1
2
3
Appboy.sharedInstance()?.userNotificationCenter(center,
                                               didReceive: response,
                                               withCompletionHandler: completionHandler)

포그라운드 푸시 처리

앱이 포그라운드에 있을 때 푸시 알림을 표시하려면 userNotificationCenter(_:willPresent:withCompletionHandler:)를 구현합니다.

1
2
3
4
5
6
7
8
9
func userNotificationCenter(_ center: UNUserNotificationCenter,
                              willPresent notification: UNNotification,
                              withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
  if #available(iOS 14.0, *) {
    completionHandler([.list, .banner]);
  } else {
    completionHandler([.alert]);
  }
}

포그라운드 알림을 클릭하면 iOS 10 푸시 델리게이트 userNotificationCenter(_:didReceive:withCompletionHandler:)가 호출되고, Braze는 푸시 클릭 이벤트를 기록합니다.

iOS 10 이전

iOS 10에서는 푸시를 클릭했을 때 더 이상 application:didReceiveRemoteNotification:fetchCompletionHandler:를 호출하지 않도록 동작이 변경되었습니다. 이러한 이유로, iOS 10 이상으로 빌드를 업데이트하고 UserNotifications 프레임워크를 사용하지 않는 경우, 이전 통합 방식과는 다르게 이전 스타일의 두 델리게이트 모두에서 Braze를 호출해야 합니다.

SDK < iOS 10을 대상으로 빌드하는 앱의 경우 다음 지침을 따르세요.

푸시 알림에서 열람 추적을 활성화하려면 앱의 application:didReceiveRemoteNotification:fetchCompletionHandler: 메서드에 다음 코드를 추가합니다.

1
2
3
[[Appboy sharedInstance] registerApplication:application
                didReceiveRemoteNotification:userInfo
                      fetchCompletionHandler:completionHandler];

iOS 10에서 푸시 분석을 지원하려면 앱의 application:didReceiveRemoteNotification: 델리게이트 메서드에도 다음 코드를 추가해야 합니다.

1
2
[[Appboy sharedInstance] registerApplication:application
                didReceiveRemoteNotification:userInfo];

푸시 알림에서 열람 추적을 활성화하려면 앱의 application(_:didReceiveRemoteNotification:fetchCompletionHandler:) 메서드에 다음 코드를 추가합니다.

1
2
3
Appboy.sharedInstance()?.register(application,
  didReceiveRemoteNotification: userInfo,
  fetchCompletionHandler: completionHandler)

iOS 10에서 푸시 분석을 지원하려면 앱의 application(_:didReceiveRemoteNotification:) 델리게이트 메서드에도 다음 코드를 추가해야 합니다.

1
2
Appboy.sharedInstance()?.register(application,
  didReceiveRemoteNotification: userInfo)

6단계: 딥링킹

푸시에서 앱으로의 딥링킹은 표준 푸시 통합 설명서를 통해 자동으로 처리됩니다. 앱의 특정 위치에 딥링크를 추가하는 방법에 대해 자세히 알아보려면 고급 사용 사례를 참조하세요.

7단계: 단위 테스트(선택 사항)

방금 수행한 통합 단계에 대한 테스트 커버리지를 추가하려면 푸시 단위 테스트를 구현합니다.

New Stuff!