Skip to content

プッシュ通知の統合

この参考記事では、Braze Swift SDKのiOSプッシュ通知の設定方法について説明する。

プッシュ通知を使用すると、重要なイベントが発生したときにアプリから通知を送ることができます。新しいインスタントメッセージを配信したり、ニュース速報を送信したり、ユーザーのお気に入りのテレビ番組の最新エピソードがダウンロードしてオフライン視聴する準備ができたときに、プッシュ通知を送信することがあります。プッシュ通知は、アプリのインターフェイスの更新やバックグラウンド作業のトリガーにのみ使用されるサイレント通知にすることもできます。

プッシュ通知は、バックグラウンドでの取得間の遅延が許容できないような、散発的だが即時に必要なコンテンツに適しています。プッシュ通知は、アプリケーションが必要な場合にのみ起動するため、バックグラウンドでの取得よりもはるかに効率的です。

プッシュ通知にはレート制限があるため、アプリケーションで必要なだけ送信しても構いません。iOS と Apple Push Notification service (APNs) サーバーが配信頻度を制御するため、送信しすぎても問題が発生することはありません。プッシュ通知がスロットリングされている場合、デバイスが次にキープアライブパケットを送信するか、別の通知を受信するまで遅延する可能性があります。

初期設定

ステップ 1:APN証明書をアップロードする

Braze を使用して iOS のプッシュ通知を送信する前に、Apple が提供する .p8 のプッシュ通知ファイルを用意する必要があります。Apple の開発者向けドキュメントに記載されているように、

  1. Apple 開発者アカウントで、[証明書、識別子 & プロファイル] を開きます。
  2. [キー] で [すべて] を選択し、右上の追加ボタン (+) をクリックします。
  3. [キーの説明]で、署名キーの一意の名前を入力します。
  4. [キーサービス] で [Apple プッシュ通知サービス (APNs)] チェックボックスをオンにし、[続行] をクリックします。[確認] をクリックします。
  5. キー ID をメモしておきます。[ダウンロード] をクリックして、キーを生成してダウンロードします。ダウンロードしたファイルは、何度もダウンロードできませんので、安全な場所に保存してください。
  6. Braze で、[設定] > [アプリ設定] に移動し、[Apple プッシュ通知証明書] で .p8 ファイルをアップロードします。開発用または実稼働用のプッシュ証明書のいずれかをアップロードできます。アプリが App Store で公開された後にプッシュ通知をテストするには、アプリの開発バージョン用に別のワークスペースを設定することをお勧めします。
  7. プロンプトが表示されたら、アプリのバンドル IDキー IDチーム IDを入力し、[保存] をクリックします。

ステップ2:プッシュ機能を有効にする

Xcode で、署名 & 機能ペインを使ってメインアプリのターゲットにプッシュ通知機能を追加します。

自動プッシュ統合

Swift SDK は、Braze から受信したリモート通知の処理を自動化するための設定のみのアプローチを提供します。この方法は、プッシュ通知を統合する最もシンプルな方法であり、ほとんどの顧客に推奨されます。

自動プッシュ統合を有効にするには、push 設定のautomation プロパティをtrue に設定する:

1
2
let configuration = Braze.Configuration(apiKey: "{YOUR-BRAZE-API-KEY}", endpoint: "{YOUR-BRAZE-API-ENDPOINT}")
configuration.push.automation = true
1
2
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:@"{YOUR-BRAZE-API-KEY}" endpoint:@"{YOUR-BRAZE-API-ENDPOINT}"];
configuration.push.automation = [[BRZConfigurationPushAutomation alloc] initEnablingAllAutomations:YES];

これにより、SDK に次のことが指示されます。

  • プッシュ通知用のアプリケーションをシステムに登録する。
  • 初期化時にプッシュ通知の認証/許可を要求する。
  • プッシュ通知関連のシステム・デリゲート・メソッドの実装を動的に提供する。

個々のコンフィギュレーションを上書きする

よりきめ細かいコントロールのために、各オートメーションステップを個別に有効または無効にすることができます

1
2
3
// Enable all automations and disable the automatic notification authorization request at launch.
configuration.push.automation = true
configuration.push.automation.requestAuthorizationAtLaunch = false
1
2
3
// Enable all automations and disable the automatic notification authorization request at launch.
configuration.push.automation = [[BRZConfigurationPushAutomation alloc] initEnablingAllAutomations:YES];
configuration.push.automation.requestAuthorizationAtLaunch = NO;

使用可能なすべてのオプションについては Braze.Configuration.Push.Automation を、オートメーション動作の詳細については automation を参照してください。

自動プッシュ統合を使用している場合は、次のセクションをスキップしてディープリンクに進むことができます。

手動プッシュ統合

プッシュ通知は手動で統合することもできる。このセクションでは、この統合に必要な手順を説明する。

ステップ 1:APNでプッシュ通知に登録する

ユーザーのデバイスがAPNに登録できるように、アプリのapplication:didFinishLaunchingWithOptions: デリゲート・メソッド内に適切なコード・サンプルを含める。アプリケーションのメインスレッドですべてのプッシュ統合コードを呼び出すようにしてください。

Braze には、プッシュアクションボタンをサポートするデフォルトのプッシュカテゴリーも用意されており、プッシュ登録コードに手動で追加する必要があります。その他の統合ステップについては、プッシュアクションボタンを参照のこと。

アプリのデリゲートのapplication:didFinishLaunchingWithOptions: メソッドに以下のコードを追加する。

1
2
3
4
5
6
7
8
9
10
11
application.registerForRemoteNotifications()
let center = UNUserNotificationCenter.current()
center.setNotificationCategories(Braze.Notifications.categories)
center.delegate = self
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
  print("Notification authorization, granted: \(granted), error: \(String(describing: error))")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[application registerForRemoteNotifications];
UNUserNotificationCenter *center = UNUserNotificationCenter.currentNotificationCenter;
[center setNotificationCategories:BRZNotifications.categories];
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) {
                        NSLog(@"Notification authorization, granted: %d, "
                              @"error: %@)",
                              granted, error);
}];

ステップ2:Braze にプッシュトークンを登録する

APNの登録が完了したら、結果のdeviceToken をBrazeに渡し、ユーザーのプッシュ通知を有効にする。

アプリの application(_:didRegisterForRemoteNotificationsWithDeviceToken:) メソッドに次のコードを追加します。

1
AppDelegate.braze?.notifications.register(deviceToken: deviceToken)

アプリの application:didRegisterForRemoteNotificationsWithDeviceToken: メソッドに次のコードを追加します。

1
[AppDelegate.braze.notifications registerDeviceToken:deviceToken];

ステップ 3:プッシュ処理を有効にする

次に、受信したプッシュ通知をBrazeに渡す。このステップは、プッシュ分析とリンク処理のロギングに必要である。アプリケーションのメインスレッドですべてのプッシュ統合コードを呼び出すようにしてください。

デフォルトのプッシュ処理

Brazeのデフォルトのプッシュ処理を有効にするには、アプリのapplication(_:didReceiveRemoteNotification:fetchCompletionHandler:) メソッドに以下のコードを追加する:

1
2
3
4
5
6
7
if let braze = AppDelegate.braze, braze.notifications.handleBackgroundNotification(
  userInfo: userInfo,
  fetchCompletionHandler: completionHandler
) {
  return
}
completionHandler(.noData)

次に、アプリの userNotificationCenter(_:didReceive:withCompletionHandler:) メソッドに以下を追加します。

1
2
3
4
5
6
7
if let braze = AppDelegate.braze, braze.notifications.handleUserNotification(
  response: response,
  withCompletionHandler: completionHandler
) {
  return
}
completionHandler()

Brazeのデフォルトのプッシュ処理を有効にするには、アプリケーションのapplication:didReceiveRemoteNotification:fetchCompletionHandler: メソッドに以下のコードを追加する:

1
2
3
4
5
6
7
BOOL processedByBraze = AppDelegate.braze != nil && [AppDelegate.braze.notifications handleBackgroundNotificationWithUserInfo:userInfo
                                                                                                       fetchCompletionHandler:completionHandler];
if (processedByBraze) {
  return;
}

completionHandler(UIBackgroundFetchResultNoData);

次に、アプリの (void)userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: メソッドに次のコードを追加します。

1
2
3
4
5
6
7
BOOL processedByBraze = AppDelegate.braze != nil && [AppDelegate.braze.notifications handleUserNotificationWithResponse:response
                                                                                                  withCompletionHandler:completionHandler];
if (processedByBraze) {
  return;
}

completionHandler();

フォアグラウンドでのプッシュ通知処理

フォアグラウンドのプッシュ通知を有効にし、受信時に Braze がそれを認識できるようにするには、UNUserNotificationCenter.userNotificationCenter(_:willPresent:withCompletionHandler:) を実装します。ユーザーがフォアグラウンド通知をタップすると、userNotificationCenter(_:didReceive:withCompletionHandler:) プッシュデリゲートが呼び出され、Brazeはプッシュクリックイベントを記録する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
func userNotificationCenter(
  _ center: UNUserNotificationCenter,
  willPresent notification: UNNotification,
  withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions
) -> Void) {
  if let braze = AppDelegate.braze {
    // Forward notification payload to Braze for processing.
    braze.notifications.handleForegroundNotification(notification: notification)
  }

  // Configure application's foreground notification display options.
  if #available(iOS 14.0, *) {
    completionHandler([.list, .banner])
  } else {
    completionHandler([.alert])
  }
}

フォアグラウンドのプッシュ通知を有効にし、受信時に Braze がそれを認識できるようにするには、userNotificationCenter:willPresentNotification:withCompletionHandler: を実装します。ユーザーがフォアグラウンド通知をタップすると、userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler: プッシュデリゲートが呼び出され、Brazeはプッシュクリックイベントを記録する。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
  if (AppDelegate.braze != nil) {
    // Forward notification payload to Braze for processing.
    [AppDelegate.braze.notifications handleForegroundNotificationWithNotification:notification];
  }

  // Configure application's foreground notification display options.
  if (@available(iOS 14.0, *)) {
    completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);
  } else {
    completionHandler(UNNotificationPresentationOptionAlert);
  }
}

ディープリンク

プッシュからアプリへのディープリンクは、標準のプッシュ統合ドキュメントを介して自動的に処理されます。アプリ内の特定の場所にディープリンクを追加する方法について詳しくは、高度なユースケースを参照してください。

プッシュ通知更新を購読する

Brazeが処理するプッシュ通知ペイロードにアクセスするには Braze.Notifications.subscribeToUpdates(payloadTypes:_:)メソッドを使う。

payloadTypes パラメーターを使用して、プッシュ開封イベント、プッシュ受信イベント、またはその両方を含む通知を購読するかどうかを指定できます。

1
2
3
4
5
6
// This subscription is maintained through a Braze cancellable, which will observe for changes until the subscription is cancelled.
// You must keep a strong reference to the cancellable to keep the subscription active.
// The subscription is canceled either when the cancellable is deinitialized or when you call its `.cancel()` method.
let cancellable = AppDelegate.braze?.notifications.subscribeToUpdates(payloadTypes: [.open, .received]) { payload in
  print("Braze processed notification with title '\(payload.title)' and body '\(payload.body)'")
}
1
2
3
4
5
NSInteger filtersValue = BRZNotificationsPayloadTypeFilter.opened.rawValue | BRZNotificationsPayloadTypeFilter.received.rawValue;
BRZNotificationsPayloadTypeFilter *filters = [[BRZNotificationsPayloadTypeFilter alloc] initWithRawValue: filtersValue];
BRZCancellable *cancellable = [notifications subscribeToUpdatesWithPayloadTypes:filters update:^(BRZNotificationsPayload * _Nonnull payload) {
  NSLog(@"Braze processed notification with title '%@' and body '%@'", payload.title, payload.body);
}];

{#push-testing} のテスト

コマンドラインからアプリ内通知とプッシュ通知をテストする場合は、CURL とメッセージング API を介してターミナルから単一の通知を送信できます。次のフィールドをテストケースの正しい値に置き換える必要があります。

  • YOUR_API_KEY - [設定] > [API キー] で利用できます。
  • YOUR_EXTERNAL_USER_ID - [ユーザーの検索] ページで使用できます。詳しくはユーザーIDの割り当てを参照のこと。
  • YOUR_KEY1 (省略可能)
  • YOUR_VALUE1 (省略可能)

以下の例では、US-01 インスタンスを使用している。このインスタンスを使用していない場合は、APIドキュメントを参照して、どのエンドポイントにリクエストを行うかを確認すること。

1
2
3
4
5
6
7
8
9
10
11
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer {YOUR_API_KEY}" -d '{
  "external_user_ids":["YOUR_EXTERNAL_USER_ID"],
  "messages": {
    "apple_push": {
      "alert":"Test push",
      "extra": {
        "YOUR_KEY1":"YOUR_VALUE1"
      }
    }
  }
}' https://rest.iad-01.braze.com/messages/send

プッシュプライマー

プッシュプライマーキャンペーンでは、アプリのデバイスでプッシュ通知を有効にするようにユーザーに促します。これは、ノーコードプッシュプライマーを使用して、SDK のカスタマイズなしで行うことができます。

「このページはどの程度役に立ちましたか?」
New Stuff!