プッシュ通知の統合
この参考記事では、Braze Swift SDKのiOSプッシュ通知の設定方法について説明する。
プッシュ通知を使用すると、重要なイベントが発生したときにアプリから通知を送ることができます。新しいインスタントメッセージを配信したり、ニュース速報を送信したり、ユーザーのお気に入りのテレビ番組の最新エピソードがダウンロードしてオフライン視聴する準備ができたときに、プッシュ通知を送信することがあります。プッシュ通知は、アプリのインターフェイスの更新やバックグラウンド作業のトリガーにのみ使用されるサイレント通知にすることもできます。
プッシュ通知は、バックグラウンドでの取得間の遅延が許容できないような、散発的だが即時に必要なコンテンツに適しています。プッシュ通知は、アプリケーションが必要な場合にのみ起動するため、バックグラウンドでの取得よりもはるかに効率的です。
プッシュ通知にはレート制限があるため、アプリケーションで必要なだけ送信しても構いません。iOS と Apple Push Notification service (APNs) サーバーが配信頻度を制御するため、送信しすぎても問題が発生することはありません。プッシュ通知がスロットリングされている場合、デバイスが次にキープアライブパケットを送信するか、別の通知を受信するまで遅延する可能性があります。
初期設定
ステップ 1:APN証明書をアップロードする
Braze を使用して iOS のプッシュ通知を送信する前に、Apple が提供する .p8
のプッシュ通知ファイルを用意する必要があります。Apple の開発者向けドキュメントに記載されているように、
- Apple 開発者アカウントで、[証明書、識別子 & プロファイル] を開きます。
- [キー] で [すべて] を選択し、右上の追加ボタン (+) をクリックします。
- [キーの説明]で、署名キーの一意の名前を入力します。
- [キーサービス] で [Apple プッシュ通知サービス (APNs)] チェックボックスをオンにし、[続行] をクリックします。[確認] をクリックします。
- キー ID をメモしておきます。[ダウンロード] をクリックして、キーを生成してダウンロードします。ダウンロードしたファイルは、何度もダウンロードできませんので、安全な場所に保存してください。
- Braze で、[設定] > [アプリ設定] に移動し、[Apple プッシュ通知証明書] で
.p8
ファイルをアップロードします。開発用または実稼働用のプッシュ証明書のいずれかをアップロードできます。アプリが App Store で公開された後にプッシュ通知をテストするには、アプリの開発バージョン用に別のワークスペースを設定することをお勧めします。 - プロンプトが表示されたら、アプリのバンドル ID、キー ID、チーム IDを入力し、[保存] をクリックします。
古いナビゲーションを使用している場合は、[設定の管理] > [設定] から .p8
ファイルをアップロードできます。
ステップ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 に次のことが指示されます。
- プッシュ通知用のアプリケーションをシステムに登録する。
- 初期化時にプッシュ通知の認証/許可を要求する。
- プッシュ通知関連のシステム・デリゲート・メソッドの実装を動的に提供する。
SDK によって実行されるオートメーションステップは、コードベース内の既存のプッシュ通知処理統合と互換性があります。SDKは、Brazeから受信したリモート通知の処理のみを自動化する。automation
が有効になっている場合、独自または別のサードパーティの SDK リモート通知を処理するために実装されたシステムハンドラは、引き続き機能します。
プッシュ通知の自動化を有効にするには、SDKをメインスレッドで初期化する必要がある。SDK の初期化は、アプリケーションの起動が完了する前、または AppDelegate application(_:didFinishLaunchingWithOptions:)
実装で行う必要があります。
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
を参照してください。
自動プッシュ統合を使用している場合は、次のセクションをスキップしてディープリンクに進むことができます。
手動プッシュ統合
プッシュ通知は手動で統合することもできる。このセクションでは、この統合に必要な手順を説明する。
アプリに固有の追加の動作をプッシュ通知に依存している場合でも、手動プッシュ通知統合ではなく自動プッシュ統合を使用できる場合があります。この subscribeToUpdates(_:)
メソッドは、Brazeが処理したリモート通知を通知する方法を提供する。
ステップ 1:APNでプッシュ通知に登録する
ユーザーのデバイスがAPNに登録できるように、アプリのapplication:didFinishLaunchingWithOptions:
デリゲート・メソッド内に適切なコード・サンプルを含める。アプリケーションのメインスレッドですべてのプッシュ統合コードを呼び出すようにしてください。
Braze には、プッシュアクションボタンをサポートするデフォルトのプッシュカテゴリーも用意されており、プッシュ登録コードに手動で追加する必要があります。その他の統合ステップについては、プッシュアクションボタンを参照のこと。
アプリのデリゲートのapplication:didFinishLaunchingWithOptions:
メソッドに以下のコードを追加する。
次のコードサンプルには、仮のプッシュ許可の統合が含まれています。(5行目と6行目)。アプリで仮許可を使用する予定がない場合は、requestAuthorization
オプションに UNAuthorizationOptionProvisional
を追加するコード行を削除できます。
プッシュ仮許可の詳細については、iOS 通知オプションをご覧ください。
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);
}];
アプリの起動が完了する前に、center.delegate = self
を使用してデリゲートオブジェクトを同期的に割り当てる必要があります (可能であれば application:didFinishLaunchingWithOptions:
で) 。そうしないと、アプリがプッシュ通知を受信できなくなる可能性があります。詳細については、Apple の UNUserNotificationCenterDelegate
ドキュメントを参照してください。
ステップ2:Braze にプッシュトークンを登録する
APNの登録が完了したら、結果のdeviceToken
をBrazeに渡し、ユーザーのプッシュ通知を有効にする。
アプリの application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
メソッドに次のコードを追加します。
1
AppDelegate.braze?.notifications.register(deviceToken: deviceToken)
アプリの application:didRegisterForRemoteNotificationsWithDeviceToken:
メソッドに次のコードを追加します。
1
[AppDelegate.braze.notifications registerDeviceToken:deviceToken];
application:didRegisterForRemoteNotificationsWithDeviceToken:
デリゲートメソッドは、application.registerForRemoteNotifications()
の呼び出し後に毎回呼び出されます。
他のプッシュサービスから Braze に移行する場合、ユーザーのデバイスがすでに APNs に登録されていれば、このメソッドは次にこのメソッドが呼び出されたときに既存の登録からトークンを収集し、ユーザーはプッシュするために再オプトインする必要はありません。
ステップ 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)'")
}
プッシュ受信イベントは、フォアグラウンド通知と content-available
バックグラウンド通知に対してのみトリガーされることに留意してください。終了中に受信した通知や、content-available
フィールドのないバックグラウンド通知ではトリガーされない。
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);
}];
プッシュ受信イベントは、フォアグラウンド通知と content-available
バックグラウンド通知に対してのみトリガーされることに留意してください。終了中に受信した通知や、content-available
フィールドのないバックグラウンド通知ではトリガーされない。
自動プッシュ統合を使用する場合、Braze によって処理されるリモート通知を受信する唯一の方法は subscribeToUpdates(_:)
です。UIAppDelegate
と UNUserNotificationCenterDelegate
システムメソッドは、通知が Braze によって自動的に処理されるときには呼び出されません。
application(_:didFinishLaunchingWithOptions:)
でプッシュ通知サブスクリプションを作成し、アプリが終了状態にある間にエンドツーエンドのユーザーが通知をタップした後にサブスクリプションがトリガーされるようにする。
{#push-testing} のテスト
コマンドラインからアプリ内通知とプッシュ通知をテストする場合は、CURL とメッセージング API を介してターミナルから単一の通知を送信できます。次のフィールドをテストケースの正しい値に置き換える必要があります。
YOUR_API_KEY
- [設定] > [API キー] で利用できます。YOUR_EXTERNAL_USER_ID
- [ユーザーの検索] ページで使用できます。詳しくはユーザーIDの割り当てを参照のこと。YOUR_KEY1
(省略可能)YOUR_VALUE1
(省略可能)
古いナビゲーションを使用している場合、これらのページは別の場所にあります。
- [API キー] は [開発者コンソール] > [API 設定] にあります。
- [ユーザー検索]は、[ユーザー] > [ユーザー検索] にあります。
以下の例では、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 のカスタマイズなしで行うことができます。