プッシュ通知
プッシュ通知を使用すると、重要なイベントが発生したときにアプリから通知を送ることができます。新しいインスタントメッセージを配信したり、ニュース速報を送信したり、ユーザーのお気に入りのテレビ番組の最新エピソードがオフライン視聴用にダウンロードできるようになったときに、プッシュ通知を送信できます。また、必要なときにのみアプリケーションが起動するため、バックグラウンドでの取得よりも効率的です。

Web URLにリダイレクトでアプリ内でWeb URLを開くが選択されていないにもかかわらず、リンクがアプリ内で開かれる場合、アプリがそのURLを処理している可能性があります(例えば、iOSのユニバーサルリンクやAndroidのApp Linksなど)。代わりにブラウザーでリンクを開くには、ユーザーが通知をタップしたときにアプリがURLをシステムブラウザーに委任していることを確認するか、クリックアクションがBrazeダッシュボードの設定と一致するようにアプリのURL処理を調整してください。クリックアクションとURL処理の設定方法については、各プラットフォームのプッシュ通知ドキュメントを参照してください。

このガイドでは、Braze Web SDK 4.0.0+ のコードサンプルを使用します。最新の Web SDK バージョンにアップグレードするには、SDK アップグレードガイドを参照してください。
前提条件
この機能を使用する前に、Web Braze SDKを統合する必要がある。
プッシュ・プロトコル
Web プッシュ通知は、大部分の主要ブラウザーでサポートされている W3C プッシュ標準を使用します。特定のプッシュ・プロトコルの標準やブラウザのサポートに関する詳細は、アップル社や モジラ社、マイクロソフト社のリソースを参照されたい。
プッシュ通知の設定
ステップ 1: サービスワーカーを設定する
プロジェクトのservice-worker.js ファイルに以下のスニペットを追加し、Web SDKの初期化時に初期化オプションを に設定する。 manageServiceWorkerExternally初期化オプションをtrue に設定する。

サービスワーカーファイルを提供するときは、Web サーバーが Content-Type: application/javascript を返す必要があります。さらに、サービスワーカーファイルの名前がservice-worker.js でない場合は、serviceWorkerLocation 初期化オプションを使う必要がある。
ステップ 2:ブラウザを登録する
ブラウザがプッシュ通知を受け取れるように、ユーザーにプッシュ権限を即座に要求するには、braze.requestPushPermission() 。プッシュが相手のブラウザでサポートされているかどうかをテストするには、まずbraze.isPushSupported() に電話する。
また、プッシュ権限を要求する前にユーザーにソフトプッシュプロンプトを送り、独自のプッシュ関連UIを表示させることもできる。

macOSでは、プッシュ通知を表示する前に、Google Chromeと Google Chrome Helper(Alerts)の両方をエンドユーザーがシステム設定>通知でイネーブルメントにする必要がある(権限が与えられていても)。
ステップ 3:skipWaiting を無効にする(オプション)。
Brazeサービスワーカーファイルは、インストール時に自動的にskipWaiting 。この機能を無効にしたい場合は、Brazeをインポートした後、サービスワーカーファイルに以下のコードを追加する:
ユーザーの配信停止
ユーザーの配信停止は、braze.unregisterPush() 。

SafariとFirefoxの最近のバージョンでは、(ボタンをクリックするハンドラやソフトプッシュプロンプトのような)短時間のイベントハンドラからこのメソッドを呼び出す必要がある。これは、プッシュ登録に関する Chrome のユーザーエクスペリエンスのベストプラクティスと一致しています。
代替ドメイン
Web プッシュを統合するには、ドメインがセキュアである必要があります。一般にこれは、https、localhost、および W3C プッシュ標準で定義されているその他の例外である必要があります。また、ドメインのルートにサービスワーカーを登録するか、少なくともそのファイルの HTTP ヘッダーを制御できる必要もあります。この記事では、代替ドメイン上で Braze Web プッシュを統合する方法について説明します。
ユースケース
W3Cプッシュ標準に概説されている基準をすべて満たすことができない場合は、この方法を使用して、代わりにWebサイトにプッシュ・プロンプト・ダイアログを追加することができる。これは、http Webサイトやブラウザ拡張機能のポップアップがプッシュプロンプトの表示を妨げている場合に、ユーザーにオプトインさせたい場合に役立つ。
考慮事項
Web上の多くの回避策がそうであるように、ブラウザは絶えず進化しており、この方法は将来実行不可能になる可能性があることを覚えておいてほしい。続行する前に、以下を確認する:
- あなたは別のセキュアドメイン(
https://)を所有し、そのドメインにサービスワーカーを登録する権限を持つ。 - ユーザーはWebサイトにログインし、プッシュトークンが正しいプロファイルに一致することを確認する。

Shopifyのプッシュ通知を実装するために、このメソッドを使用することはできない。Shopifyは、この方法でプッシュ配信に必要なヘッダーを自動的に削除する。
代替プッシュ・ドメインの設定
次の例をわかりやすくするために、訪問者を http://insecure.com でのプッシュに登録させることを目的として、http://insecure.com と https://secure.com の2つのドメインを使用します。この例題は、ブラウザー拡張のポップアップページのchrome-extension://スキームにアプリ当てはまるかもしれません。
ステップ1:プロンプトフローを開始する
insecure.com で、URL パラメータを使用してセキュアドメインに新しいウィンドウを開封し、現在ログイン中のユーザーのBraze外部ID を渡します。
http://insecure.com
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<button id="opt-in">Opt-In For Push</button>
<script>
// the same ID you would use with `braze.changeUser`:
const user_id = getUserIdSomehow();
// pass the user ID into the secure domain URL:
const secure_url = `https://secure.com/push-registration.html?external_id=${user_id}`;
// when the user takes some action, open the secure URL in a new window
document.getElementById("opt-in").onclick = function(){
if (!window.open(secure_url, 'Opt-In to Push', 'height=500,width=600,left=150,top=150')) {
window.alert('The popup was blocked by your browser');
} else {
// user is shown a popup window
// and you can now prompt for push in this window
}
}
</script>
ステップ2:プッシュを登録する
この時点で、secure.com はポップアップウィンドウを開封します。ポップアップウィンドウでは、同じユーザー IDのBraze Web SDKを初期化し、Webプッシュに対するユーザーの権限をリクエストできます。
https://secure.com/push-registration.html
ステップ3:ドメイン間で通信する (オプション)
ユーザーは insecure.com から発生したこのワークフローからオプトインできるようになったため、ユーザーがすでにオプトインしているかどうかに基づいてサイトを変更できます。ユーザーがすでにプッシュを登録している場合、それを尋ねることに意味はありません。
iFrames と postMessage API を使用して、2つのドメイン間で通信できます。
insecure.com
insecure.com ドメインで、現在のユーザーのプッシュ登録に関する情報を (プッシュが_実際に_登録されている) セキュアドメインに問い合わせます。
<!-- Create an iframe to the secure domain and run getPushStatus onload-->
<iframe id="push-status" src="https://secure.com/push-status.html" onload="getPushStatus()" style="display:none;"></iframe>
<script>
function getPushStatus(event){
// send a message to the iframe asking for push status
event.target.contentWindow.postMessage({type: 'get_push_status'}, 'https://secure.com');
// listen for a response from the iframe's domain
window.addEventListener("message", (event) => {
if (event.origin === "http://insecure.com" && event.data.type === 'set_push_status') {
// update the page based on the push permission we're told
window.alert(`Is user registered for push? ${event.data.isPushPermissionGranted}`);
}
}
}
</script>
secure.com/push-status.html
よくある質問(FAQ)
サービスワーカー
ルートディレクトリにサービスワーカーを登録できない場合は?
デフォルトでは、サービスワーカーは、それが登録されているのと同じディレクトリ内でのみ使用できる。たとえば、サービスワーカーファイルが /assets/service-worker.js に存在する場合、example.com/assets/*、または assets フォルダーのサブディレクトリー内にのみ登録でき、ホームページ (example.com/) には登録できません。このため、ルートディレクトリ (https://example.com/service-worker.js など) にサービスワーカーをホストして登録することをお勧めします。
ルートドメインにサービスワーカーを登録できない場合、別の方法として、サービスワーカーファイルを提供するときに Service-Worker-AllowedHTTP ヘッダを使うことである。サービスワーカーのレスポンスにService-Worker-Allowed: / を返すようにサーバーを設定することで、ブラウザにスコープを広げ、別のディレクトリから使用できるように指示する。
タグマネージャを使用してサービスワーカーを作成できますか?
いいえ、サービスワーカーは Web サイトのサーバーでホストされている必要があり、タグマネージャで読み込むことはできません。
サイトのセキュリティ
HTTPSは必要か?
はい。ウェブ標準は、プッシュ通知の許可を要求するドメインが安全であることを要求している。
サイトが「安全」とみなされるのはどのような場合か?
サイトが以下のsecure-originパターンのいずれかに一致する場合、そのサイトは安全であるとみなされる。BrazeのWebプッシュ通知は、この開封標準に基づいて構築されているため、中間者攻撃を防ぐことができる。
(https, , *)(wss, *, *)(, localhost, )(, .localhost, *)(, 127/8, )(, ::1/128, *)(file, *, —)(chrome-extension, *, —)
安全なサイトが利用できない場合はどうするのか?
業界のベストプラクティスは、サイト全体をセキュアにすることですが、サイトドメインをセキュアにできない顧客は、セキュアなモーダルを使用して要件に対処できます。詳細については、代替プッシュドメインを使用するためのガイド、または作業デモを確認してください。
前提条件
この機能を使用する前に、Android Braze SDKを統合する必要がある。
組み込み機能
以下の機能は、Braze Android SDKに組み込まれています。その他のプッシュ通知機能を使用するには、アプリにプッシュ通知を設定する必要があります。
| 機能 | 説明 |
|---|---|
| Push Stories | Android Push StoriesはデフォルトでBraze Android SDKに組み込まれています。詳細については、Push Storiesを参照してください。 |
| プッシュプライマー | プッシュプライマーキャンペーンは、ユーザーにデバイスでアプリのプッシュ通知を有効にするよう促します。これは、SDKのカスタマイズなしに、ノーコードプッシュプライマーを使用して行うことができます。 |
プッシュ通知のライフサイクルについて
以下のフローチャートは、Brazeがプッシュ通知のライフサイクル(許可プロンプト、トークン生成、メッセージ配信など)をどのように処理するかを示しています。
---
config:
theme: neutral
---
flowchart TD
%% Permission flow
subgraph Permission[Push Permissions]
B{Android version of the device?}
B -->|Android 13+| C["requestPushPermissionPrompt() called"]
B -->|Android 12 and earlier| D[No permissions required]
%% Connect Android 12 path to Braze state
D --> H3[Braze: user subscription state]
H3 --> J3[Defaults to 'subscribed' when user profile created]
C --> E{Did the user grant push permission?}
E -->|Yes| F[POST_NOTIFICATIONS permission granted]
E -->|No| G[POST_NOTIFICATIONS permission denied]
%% Braze subscription state updates
F --> H1[Braze: user subscription state]
G --> H2[Braze: user subscription state]
H1 --> I1{Automatically opt in after permission granted?}
I1 -->|true| J1[Set to 'opted-in']
I1 -->|false| J2[Remains 'subscribed']
H2 --> K1[Remains 'subscribed'<br/>or 'unsubscribed']
%% Subscription state legend
subgraph BrazeStates[Braze subscription states]
L1['Subscribed' - default state<br/>when user profile created]
L2['Opted-in' - user explicitly<br/>wants push notifications]
L3['Unsubscribed' - user explicitly<br/>opted out of push]
end
%% Note about user-level states
note1[Note: These states are user-level<br/>and apply across all devices for the user]
%% Connect states to legend
J1 -.-> L2
J2 -.-> L1
J3 -.-> L1
K1 -.-> L3
note1 -.-> BrazeStates
end
%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px
class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass
---
config:
theme: neutral
---
flowchart TD
%% Token generation flow
subgraph Token[Token Generation]
H["Braze SDK initialized"] --> Q{Is FCM auto-registration enabled?}
Q -->|Yes| L{Is required configuration present?}
Q -->|No| M[No FCM token generated]
L -->|Yes| I[Generate FCM token]
L -->|No| M
I --> K[Register token with Braze]
%% Configuration requirements
subgraph Config[Required configuration]
N['google-services.json' file is present]
O['com.google.firebase:firebase-messaging' in gradle]
P['com.google.gms.google-services' plugin in gradle]
end
%% Connect config to check
N -.-> L
O -.-> L
P -.-> L
end
%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px
class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass
---
config:
theme: neutral
fontSize: 10
---
flowchart TD
subgraph Display[Push Display]
%% Push delivery flow
W[Push sent to FCM servers] --> X{Did FCM receive push?}
X -->|App is terminated| Y[FCM cannot deliver push to the app]
X -->|Delivery conditions met| X1[App receives push from FCM]
X1 --> X2[Braze SDK receives push]
X2 --> R[Push type?]
%% Push Display Flow
R -->|Standard push| S{Is push permission required?}
R -->|Silent push| T[Braze SDK processes silent push]
S -->|Yes| S1{Did the user grant push permission?}
S -->|No| V[Notification is shown to the user]
S1 -->|Yes| V
S1 -->|No| U[Notification is not shown to the user]
end
%% Styling
classDef permissionClass fill:#e3f2fd,stroke:#1565c0,stroke-width:2px
classDef tokenClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:2px
classDef sdkClass fill:#fff3e0,stroke:#e65100,stroke-width:2px
classDef configClass fill:#f3e5f5,stroke:#7b1fa2,stroke-width:2px
classDef displayClass fill:#ffebee,stroke:#c62828,stroke-width:2px
classDef deliveryClass fill:#fce4ec,stroke:#c2185b,stroke-width:2px
classDef brazeClass fill:#e8f5e9,stroke:#2e7d32,stroke-width:3px
class A,B,C,E,F,G permissionClass
class H,I tokenClass
class J,K sdkClass
class N,O,P configClass
class R,S,S1,T,U,V displayClass
class W,X,X1,X2,Y,Z deliveryClass
class H1,H2,H3,I1,J1,J2,J3,K1,L1,L2,L3,note1 brazeClass
プッシュ通知の設定

レート制限
Firebase Cloud Messaging(FCM)APIのデフォルトのレート制限は、1分あたり600,000リクエストです。この制限に達した場合、Brazeは数分後に自動的に再試行します。引き上げをリクエストするには、Firebaseサポートにお問い合わせください。
ステップ1:プロジェクトにFirebaseを追加する
まず、AndroidプロジェクトにFirebaseを追加します。手順については、GoogleのFirebaseセットアップガイドを参照してください。
ステップ2:依存関係にCloud Messagingを追加する
次に、プロジェクトの依存関係にCloud Messagingライブラリを追加します。Androidプロジェクトでbuild.gradleを開き、dependenciesブロックに以下の行を追加します。
1
implementation "google.firebase:firebase-messaging:+"
依存関係は以下のようになります:
1
2
3
4
dependencies {
implementation project(':android-sdk-ui')
implementation "com.google.firebase:firebase-messaging:+"
}
ステップ3:Firebase Cloud Messaging APIを有効にする
Google Cloudで、Androidアプリが使用しているプロジェクトを選択し、Firebase Cloud Messaging APIを有効にします。

ステップ4:サービスアカウントを作成する
次に、BrazeがFCMトークン登録時に認可されたAPI呼び出しを行えるよう、新しいサービスアカウントを作成します。Google CloudでService Accountsに移動し、プロジェクトを選択します。Service Accountsページで、Create Service Accountを選択します。

サービスアカウント名、ID、説明を入力し、Create and continueを選択します。
Roleフィールドで、ロール一覧からFirebase Cloud Messaging API Adminを探して選択します。より制限されたアクセスにするには、cloudmessaging.messages.create権限を持つカスタムロールを作成し、代わりにそのロールを一覧から選択します。完了したら、Doneを選択します。

Firebase Cloud Messaging Adminではなく、Firebase Cloud Messaging API Adminを選択してください。

ステップ5:JSON認証情報を生成する
次に、FCMサービスアカウントのJSON認証情報を生成します。Google Cloud IAM & AdminでService Accountsに移動し、プロジェクトを選択します。先ほど作成したFCMサービスアカウントを見つけ、 Actions > Manage Keysを選択します。

Add Key > Create new keyを選択します。

JSONを選択し、Createを選択します。FCMプロジェクトIDとは異なるGoogle CloudプロジェクトIDを使用してサービスアカウントを作成した場合は、JSONファイル内のproject_idに割り当てられた値を手動で更新する必要があります。
キーをダウンロードした場所を覚えておいてください—次のステップで必要になります。


秘密キーは漏洩した場合にセキュリティリスクとなる可能性があります。JSON認証情報は安全な場所に保管してください—Brazeにアップロードした後にキーを削除します。
ステップ6:JSON認証情報をBrazeにアップロードする
次に、JSON認証情報をBrazeダッシュボードにアップロードします。Brazeで 設定 > アプリ設定を選択します。

AndroidアプリのPush Notification Settingsで、Firebaseを選択し、Upload JSON Fileを選択して先ほど生成した認証情報をアップロードします。完了したら、Saveを選択します。


ステップ7:自動トークン登録を設定する
ユーザーがプッシュ通知をオプトインすると、プッシュ通知を送信する前に、アプリがそのユーザーのデバイスでFCMトークンを生成する必要があります。Braze SDKを使用すると、プロジェクトのBraze設定ファイルで各ユーザーのデバイスのFCMトークン自動登録を有効にできます。
まず、Firebase Consoleに移動し、プロジェクトを開いて、 Settings > Project settingsを選択します。

Cloud Messagingを選択し、Firebase Cloud Messaging API (V1)の下にあるSender IDフィールドの番号をコピーします。

次に、Android Studioプロジェクトを開き、Firebase Sender IDを使用してbraze.xmlまたはBrazeConfigでFCMトークンの自動登録を有効にします。
FCMトークンの自動登録を設定するには、braze.xmlファイルに以下の行を追加します:
1
2
<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>
FIREBASE_SENDER_IDをFirebaseプロジェクト設定からコピーした値に置き換えます。braze.xmlは以下のようになります:
1
2
3
4
5
6
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string translatable="false" name="com_braze_api_key">12345ABC-6789-DEFG-0123-HIJK456789LM</string>
<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">603679405392</string>
</resources>
FCMトークンの自動登録を設定するには、BrazeConfigに以下の行を追加します:
1
2
.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("FIREBASE_SENDER_ID")
1
2
.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("FIREBASE_SENDER_ID")
FIREBASE_SENDER_IDをFirebaseプロジェクト設定からコピーした値に置き換えます。BrazeConfigは以下のようになります:
1
2
3
4
5
6
7
8
9
10
BrazeConfig brazeConfig = new BrazeConfig.Builder()
.setApiKey("12345ABC-6789-DEFG-0123-HIJK456789LM")
.setCustomEndpoint("sdk.iad-01.braze.com")
.setSessionTimeout(60)
.setHandlePushDeepLinksAutomatically(true)
.setGreatNetworkDataFlushInterval(10)
.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("603679405392")
.build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
6
7
8
9
10
val brazeConfig = BrazeConfig.Builder()
.setApiKey("12345ABC-6789-DEFG-0123-HIJK456789LM")
.setCustomEndpoint("sdk.iad-01.braze.com")
.setSessionTimeout(60)
.setHandlePushDeepLinksAutomatically(true)
.setGreatNetworkDataFlushInterval(10)
.setIsFirebaseCloudMessagingRegistrationEnabled(true)
.setFirebaseCloudMessagingSenderIdKey("603679405392")
.build()
Braze.configure(this, brazeConfig)

FCMトークンを手動で登録する場合は、アプリのonCreate()メソッド内でBrazeインスタンスのregisteredPushTokenプロパティを設定します。
1
2
// Kotlin
Braze.getInstance(context).registeredPushToken = "FCM_TOKEN"
1
2
// Java
Braze.getInstance(context).setRegisteredPushToken("FCM_TOKEN");
複数のFirebaseプロジェクトを使用する
アプリが複数のFirebaseプロジェクトを使用している場合は、以下の手順に従います:
- Brazeプッシュは、アプリの
google-services.jsonから初期化されるデフォルトのFirebaseプロジェクトで使用します。 - カスタムのFirebaseメッセージングサービスを使用する場合は、カスタムFirebaseメッセージングサービスでインストールIDを登録するを完了してください。
- アプリが別の方法でプッシュトークンを取得する場合は、前述のヒントに示すように手動で
registeredPushTokenを設定します。

Firebase Cloud Messagingには、手動で初期化したFirebaseAppからトークンを取得するサポートされたAPIはありません。onNewTokenやonRegisteredなどのFirebaseMessagingServiceコールバックは、デフォルトのプロジェクトに対してのみ発火します。詳細については、Firebaseドキュメントの複数プロジェクトの設定を参照してください。
バージョンの詳細については、SDK変更ログを参照してください。
ステップ8:アプリケーションクラスでの自動リクエストを削除する
サイレントプッシュ通知を送信するたびにBrazeが不要なネットワークリクエストをトリガーしないよう、ApplicationクラスのonCreate()メソッドで設定されている自動ネットワークリクエストを削除します。詳細については、Android Developer Reference: Applicationを参照してください。
通知の表示
ステップ1:Braze Firebase Messaging Serviceを登録する
新規、既存、またはBraze以外のFirebase Messaging Serviceを作成できます。特定のニーズに最適なものを選択してください。
Brazeには、プッシュの受信と開封インテントを処理するサービスが含まれています。BrazeFirebaseMessagingServiceクラスをAndroidManifest.xmlに登録する必要があります。
1
2
3
4
5
6
<service android:name="com.braze.push.BrazeFirebaseMessagingService"
android:exported="false">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
通知コードもBrazeFirebaseMessagingServiceを使用して、開封とクリックアクションのトラッキングを処理します。このサービスが正しく機能するためには、AndroidManifest.xmlに登録する必要があります。また、Brazeはシステムからの通知に一意のキーをプレフィックスとして付加し、Brazeシステムから送信された通知のみをレンダリングします。他のFCMサービスから送信された通知をレンダリングするために、追加のサービスを個別に登録できます。FirebaseプッシュサンプルアプリのAndroidManifest.xmlを参照してください。

Braze SDK 3.1.1以前では、FCMプッシュの処理にAppboyFcmReceiverが使用されていました。AppboyFcmReceiverクラスをマニフェストから削除し、上記の統合に置き換える必要があります。
すでにFirebase Messaging Serviceが登録されている場合、BrazeFirebaseMessagingService.handleBrazeRemoteMessage()を介してRemoteMessageオブジェクトをBrazeに渡すことができます。このメソッドは、RemoteMessageオブジェクトがBrazeから発信された場合にのみ通知を表示し、そうでない場合は安全に無視します。
カスタムFirebase Messaging ServiceでインストールIDを登録する
firebase-messaging v25.1.0以降を使用している場合、Firebase登録にはFirebase Installation IDが使用されます。カスタムFirebase Messaging ServiceでonRegisteredをオーバーライドし、registeredPushTokenを設定します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onRegistered(String installationId) {
super.onRegistered(installationId);
Braze.getInstance(this).setRegisteredPushToken(installationId);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
// This Remote Message originated from Braze and a push notification was displayed.
// No further action is needed.
} else {
// This Remote Message did not originate from Braze.
// No action was taken and you can safely pass this Remote Message to other handlers.
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onRegistered(installationId: String) {
super.onRegistered(installationId)
Braze.getInstance(this).registeredPushToken = installationId
}
override fun onMessageReceived(remoteMessage: RemoteMessage?) {
super.onMessageReceived(remoteMessage)
if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
// This Remote Message originated from Braze and a push notification was displayed.
// No further action is needed.
} else {
// This Remote Message did not originate from Braze.
// No action was taken and you can safely pass this Remote Message to other handlers.
}
}
}
Brazeからのプッシュでない場合に呼び出されるフォールバックFirebase Messaging Serviceを指定することもできます。
braze.xmlに以下を指定します。
1
2
<bool name="com_braze_fallback_firebase_cloud_messaging_service_enabled">true</bool>
<string name="com_braze_fallback_firebase_cloud_messaging_service_classpath">com.company.OurFirebaseMessagingService</string>
またはランタイム構成で設定します。
1
2
3
4
5
BrazeConfig brazeConfig = new BrazeConfig.Builder()
.setFallbackFirebaseMessagingServiceEnabled(true)
.setFallbackFirebaseMessagingServiceClasspath("com.company.OurFirebaseMessagingService")
.build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
val brazeConfig = BrazeConfig.Builder()
.setFallbackFirebaseMessagingServiceEnabled(true)
.setFallbackFirebaseMessagingServiceClasspath("com.company.OurFirebaseMessagingService")
.build()
Braze.configure(this, brazeConfig)
ステップ2:小さいアイコンをデザインガイドラインに準拠させる
Androidの通知アイコンに関する一般的な情報については、通知の概要を参照してください。
Android N以降では、色を含む小さい通知アイコンアセットを更新または削除する必要があります。Androidシステム(Braze SDKではなく)は、アクションアイコンと通知の小さいアイコンのアルファおよび透過チャネル以外のすべてを無視します。つまり、Androidは通知の小さいアイコンの透過領域を除くすべての部分をモノクロに変換します。
通知の小さいアイコンアセットを適切に作成するには:
- 画像から白以外のすべての色を削除します。
- アセットのその他の白以外の領域はすべて透過にする必要があります。

不適切なアセットの一般的な症状は、小さい通知アイコンが単色の正方形としてレンダリングされることです。これは、Androidシステムが通知の小さいアイコンアセットで透過領域を見つけられないことが原因です。
以下の大きいアイコンと小さいアイコンは、適切にデザインされたアイコンの例です。
![]()
ステップ3:通知アイコンを設定する
braze.xmlでアイコンを指定する
Brazeでは、braze.xmlでドローアブルリソースを指定することで通知アイコンを設定できます。
1
2
<drawable name="com_braze_push_small_notification_icon">REPLACE_WITH_YOUR_ICON</drawable>
<drawable name="com_braze_push_large_notification_icon">REPLACE_WITH_YOUR_ICON</drawable>
小さい通知アイコンの設定は必須です。設定しない場合、Brazeはアプリケーションアイコンを小さい通知アイコンとしてデフォルトで使用しますが、最適な表示にならない場合があります。
大きい通知アイコンの設定は任意ですが、推奨されます。
アイコンのアクセントカラーを指定する
通知アイコンのアクセントカラーはbraze.xmlでオーバーライドできます。色が指定されていない場合、デフォルトの色はLollipopがシステム通知に使用するのと同じグレーです。
1
<integer name="com_braze_default_notification_accent_color">0xFFf33e3e</integer>
カラーリファレンスを使用することもできます。
1
<color name="com_braze_default_notification_accent_color">@color/my_color_here</color>
ステップ4:ディープリンクを追加する
自動ディープリンクオープンを有効にする
プッシュ通知がクリックされたときにBrazeが自動的にアプリとディープリンクを開くようにするには、braze.xmlでcom_braze_handle_push_deep_links_automaticallyをtrueに設定します。
1
<bool name="com_braze_handle_push_deep_links_automatically">true</bool>
このフラグはランタイム構成でも設定できます。
1
2
3
4
BrazeConfig brazeConfig = new BrazeConfig.Builder()
.setHandlePushDeepLinksAutomatically(true)
.build();
Braze.configure(this, brazeConfig);
1
2
3
4
val brazeConfig = BrazeConfig.Builder()
.setHandlePushDeepLinksAutomatically(true)
.build()
Braze.configure(this, brazeConfig)
ディープリンクをカスタムで処理する場合は、Brazeからのプッシュ受信および開封インテントをリッスンするプッシュコールバックを作成する必要があります。詳細については、プッシュイベントのコールバックの使用を参照してください。
フォアグラウンド通知の処理
デフォルトでは、Androidでアプリがフォアグラウンドにある間にプッシュ通知が届くと、システムが自動的に表示します。Brazeにプッシュ通知ペイロードを処理させる(分析トラッキング、ディープリンク処理、カスタム処理のため)には、FirebaseMessagingService.onMessageReceivedメソッド内で受信したプッシュデータをBrazeにルーティングします。
仕組み
BrazeFirebaseMessagingService.handleBrazeRemoteMessageを呼び出すと、Brazeはペイロードがbrazeプッシュ通知かどうかを判断し、そうであればNotificationManagerCompatメソッドを使用して通知を作成および表示します。iOSとは異なり、Androidではアプリがフォアグラウンドかバックグラウンドかに関係なく通知が表示されます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
package com.example.push;
import com.braze.push.BrazeFirebaseMessagingService;
import com.google.firebase.messaging.FirebaseMessagingService;
import com.google.firebase.messaging.RemoteMessage;
public class MyFirebaseMessagingService extends FirebaseMessagingService {
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
// Let Braze process the payload and display the notification
if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
// Braze successfully handled the push notification
} else {
// Handle non-Braze messages
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package com.example.push
import com.braze.push.BrazeFirebaseMessagingService
import com.google.firebase.messaging.FirebaseMessagingService
import com.google.firebase.messaging.RemoteMessage
class MyFirebaseMessagingService : FirebaseMessagingService() {
override fun onMessageReceived(remoteMessage: RemoteMessage) {
super.onMessageReceived(remoteMessage)
// Let Braze process the payload and display the notification
if (BrazeFirebaseMessagingService.handleBrazeRemoteMessage(this, remoteMessage)) {
// Braze successfully handled the push notification
} else {
// Handle non-Braze messages
}
}
}
詳細については、Braze Android SDKリポジトリのFirebase統合サンプルを参照してください。
フォアグラウンド動作のカスタマイズ
システム通知を抑制する、またはアプリ内UIを代わりに表示するなど、カスタムフォアグラウンド動作を実装する場合は、以下の方法を使用できます。
subscribeToPushNotificationEventsを使用してプッシュイベントに反応し、BrazeNotificationUtils.routeUserWithNotificationOpenedIntentメソッドでディープリンクを処理します。詳細については、Firebaseプッシュサンプルを参照してください。- カスタム
IBrazeNotificationFactoryを使用して独自の通知を作成および投稿するか、処理パス内でnotificationManager.notifyを呼び出さないことで通知を抑制します。
通知のカスタマイズの詳細については、カスタム通知ファクトリーを参照してください。
カスタムディープリンクの作成
アプリにディープリンクをまだ追加していない場合は、Android開発者ドキュメントのディープリンクに関する手順に従ってください。ディープリンクの詳細については、FAQの記事を参照してください。
ディープリンクの追加
Brazeダッシュボードでは、プッシュ通知キャンペーンやキャンバスにディープリンクまたはWeb URLを設定でき、通知がクリックされたときに開かれます。

バックスタック動作のカスタマイズ
Android SDKはデフォルトで、プッシュディープリンクを辿る際にホストアプリのメインランチャーアクティビティをバックスタックに配置します。Brazeでは、メインランチャーアクティビティの代わりにバックスタックで開くカスタムアクティビティを設定したり、バックスタックを完全に無効にしたりできます。
たとえば、ランタイム設定を使用してYourMainActivityというアクティビティをバックスタックアクティビティとして設定するには、以下のようにします。
1
2
3
4
5
BrazeConfig brazeConfig = new BrazeConfig.Builder()
.setPushDeepLinkBackStackActivityEnabled(true)
.setPushDeepLinkBackStackActivityClass(YourMainActivity.class)
.build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
val brazeConfig = BrazeConfig.Builder()
.setPushDeepLinkBackStackActivityEnabled(true)
.setPushDeepLinkBackStackActivityClass(YourMainActivity.class)
.build()
Braze.configure(this, brazeConfig)
braze.xmlでの同等の設定については、以下を参照してください。クラス名はClass.forName()が返すものと同じである必要があります。
1
2
<bool name="com_braze_push_deep_link_back_stack_activity_enabled">true</bool>
<string name="com_braze_push_deep_link_back_stack_activity_class_name">your.package.name.YourMainActivity</string>
ステップ5:通知チャネルを定義する
Braze Android SDKはAndroid通知チャネルをサポートしています。Braze通知に通知チャネルのIDが含まれていない場合、またはBraze通知に無効なチャネルIDが含まれている場合、BrazeはSDKで定義されたデフォルトの通知チャネルで通知を表示します。ユーザーは、プラットフォーム内のAndroid通知チャネルを使用して通知をグループ化します。
デフォルトのBraze通知チャネルのユーザー向け名称を設定するには、BrazeConfig.setDefaultNotificationChannelName()を使用します。
デフォルトのBraze通知チャネルのユーザー向け説明を設定するには、BrazeConfig.setDefaultNotificationChannelDescription()を使用します。
Androidプッシュオブジェクトパラメーターにnotification_channelフィールドを含めるように、すべてのAPIキャンペーンを更新してください。このフィールドが指定されていない場合、BrazeはダッシュボードのフォールバックチャネルIDで通知ペイロードを送信します。
デフォルトの通知チャネル以外に、Brazeはチャネルを作成しません。その他のすべてのチャネルは、ホストアプリによってプログラムで定義し、Brazeダッシュボードに入力する必要があります。
デフォルトのチャネル名と説明は、braze.xmlでも設定できます。
1
2
<string name="com_braze_default_notification_channel_name">Your channel name</string>
<string name="com_braze_default_notification_channel_description">Your channel description</string>
ステップ6:通知の表示と分析をテストする
表示のテスト
この時点で、Brazeから送信された通知を確認できるはずです。テストするには、Brazeダッシュボードのキャンペーンページに移動し、プッシュ通知キャンペーンを作成します。Androidプッシュを選択し、メッセージをデザインします。次に、コンポーザーの目のアイコンをクリックしてテスト送信画面を開きます。現在のユーザーのユーザーIDまたはメールアドレスを入力し、テスト送信をクリックします。デバイスにプッシュ通知が表示されるはずです。

プッシュ表示に関する問題については、トラブルシューティングガイドを参照してください。
分析のテスト
この時点で、プッシュ通知開封の分析ログも取得できるはずです。通知が届いたときにクリックすると、キャンペーン結果ページの直接開封が1増加するはずです。プッシュ分析の詳細については、プッシュレポートの記事を参照してください。
プッシュ分析に関する問題については、トラブルシューティングガイドを参照してください。
コマンドラインからのテスト
コマンドラインインターフェイスからアプリ内通知やプッシュ通知をテストする場合は、cURLとメッセージングAPIを使用してターミナルから単一の通知を送信できます。テストケースに合わせて以下のフィールドを正しい値に置き換える必要があります。
YOUR_API_KEY(設定 > APIキーに移動します。)YOUR_EXTERNAL_USER_ID(ユーザー検索ページでプロファイルを検索します。)YOUR_KEY1(オプション)YOUR_VALUE1(オプション)
1
2
3
4
5
6
7
8
9
10
11
12
curl -X POST -H "Content-Type: application/json" -H "Authorization: Bearer {YOUR_API_KEY}" -d '{
"external_user_ids":["YOUR_EXTERNAL_USER_ID"],
"messages": {
"android_push": {
"title":"Test push title",
"alert":"Test push",
"extra": {
"YOUR_KEY1":"YOUR_VALUE1"
}
}
}
}' https://rest.iad-01.braze.com/messages/send
この例ではUS-01インスタンスを使用しています。このインスタンスを使用していない場合は、US-01エンドポイントをお使いのエンドポイントに置き換えてください。
会話プッシュ通知

ピープル&カンバセーションイニシアチブは、Androidの複数年にわたる取り組みで、電話のシステムサーフェスにおいて人や会話を優先的に表示することを目的としています。この優先順位は、他の人とのコミュニケーションやインタラクションが、あらゆる層のAndroidユーザーにとって依然として最も価値があり重要な機能領域であるという事実に基づいています。
使用要件
- この通知タイプには、Braze Android SDK v15.0.0以降とAndroid 11以降のデバイスが必要です。
- サポートされていないデバイスまたはSDKでは、標準のプッシュ通知にフォールバックされます。
この機能はBraze REST APIを通じてのみ利用できます。詳細については、Androidプッシュオブジェクトを参照してください。
FCMクォータ超過エラー
Firebase Cloud Messaging(FCM)の制限を超えると、Googleは「クォータ超過」エラーを返します。FCMのデフォルト制限は、1分あたり600,000リクエストです。BrazeはGoogleの推奨ベストプラクティスに従って送信をリトライします。ただし、これらのエラーが大量に発生すると、送信時間が数分間延長される可能性があります。潜在的な影響を軽減するため、Brazeはレート制限が超過していることを示すアラートと、エラーを防ぐために実行できる手順を通知します。
現在の制限を確認するには、Google Cloud Console > APIs & Services > Firebase Cloud Messaging API > Quotas & System Limits にアクセスするか、FCM APIクォータページにアクセスしてください。
ベストプラクティス
これらのエラー量を低く抑えるために、以下のベストプラクティスを推奨します。
FCMにレート制限の引き上げをリクエストする
FCMにレート制限の引き上げをリクエストするには、Firebaseサポートに直接連絡するか、以下の手順を実行します。
- FCM APIクォータページにアクセスします。
- Send requests per minute クォータを探します。
- Edit Quota を選択します。
- 新しい値を入力してリクエストを送信します。
ワークスペースのレート制限を適用する
Androidプッシュ通知にワークスペースのレート制限を適用できます。これにより、送信メッセージの配信レートを調整できます。詳細については、ワークスペースのメッセージングレート制限を参照してください。
レート制限
プッシュ通知にはレート制限があるため、アプリケーションで必要なだけ送信しても構いません。iOSとApple Push Notification service(APNs)サーバーが配信頻度をコントロールするため、送信しすぎても問題が発生することはありません。プッシュ通知がスロットリングされている場合、デバイスが次にキープアライブパケットを送信するか、別の通知を受信するまで遅延する可能性があります。
プッシュ通知の設定
ステップ1:APNsトークンをアップロードする
Brazeを使ってiOSプッシュ通知を送信する前に、Appleの開発者向けドキュメントに記載されているように、.p8 プッシュ通知ファイルをアップロードする必要があります。
- Apple開発者アカウントで、Certificates, Identifiers & Profilesにアクセスします。
- KeysでAllを選択し、ページ上部の追加ボタン(+)をクリックします。
- Key Descriptionで、署名キーの一意の名前を入力します。
- Key ServicesでApple Push Notification service (APNs)チェックボックスをオンにし、Continueをクリックします。Confirmをクリックします。
- キーIDをメモしておきます。Downloadをクリックして、キーを生成してダウンロードします。ダウンロードしたファイルは安全な場所に保存してください。このファイルは一度しかダウンロードできません。
- Brazeで、設定 > アプリ設定に移動し、Apple Push Certificateで
.p8ファイルをアップロードします。開発用または本番用のプッシュ証明書のいずれかをアップロードできます。アプリがApp Storeで公開された後にプッシュ通知をテストするには、アプリの開発バージョン用に別のワークスペースを設定することをお勧めします。 - プロンプトが表示されたら、アプリのバンドルID、キーID、チームIDを入力します。また、アプリの開発環境と本番環境のどちらに通知を送信するかを指定する必要があります。これはプロビジョニングプロファイルによって定義されます。
- 完了したら、保存を選択します。
ステップ2:プッシュ機能を有効にする
Xcodeで、メインアプリターゲットのSigning & Capabilitiesセクションに移動し、プッシュ通知機能を追加します。

ステップ3:プッシュ処理を設定する
Swift SDKを使用して、Brazeから受信したリモート通知の処理を自動化できます。これはプッシュ通知を処理する最も簡単な方法であり、推奨される処理方法です。
ステップ3.1:pushプロパティでオートメーションを有効にする
自動プッシュ統合を有効にするには、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から受信したリモート通知の処理のみを自動化します。独自またはサードパーティSDKのリモート通知を処理するために実装されたシステムハンドラーは、automationが有効になっていても引き続き動作します。

プッシュ通知のオートメーションを有効にするには、SDKをメインスレッドで初期化する必要があります。SDK初期化は、アプリケーションの起動完了前、またはAppDelegateのapplication(_:didFinishLaunchingWithOptions:)実装内で行う必要があります。
SDKの初期化前に追加のセットアップが必要な場合は、遅延初期化のドキュメントページを参照してください。
ステップ3.2:個別の設定をオーバーライドする(オプション)
より細かい制御が必要な場合、各オートメーションステップを個別に有効または無効にできます。
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が処理したリモート通知の通知を受け取る方法を提供します。
ステップ3.1:APNsにプッシュ通知を登録する
アプリのapplication:didFinishLaunchingWithOptions:デリゲートメソッド内に適切なコードサンプルを含めて、ユーザーのデバイスがAPNsに登録できるようにします。すべてのプッシュ統合コードをアプリケーションのメインスレッドで呼び出してください。
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ドキュメントをご覧ください。
アプリがwipeData()を呼び出し、同じアプリ実行中に後でBraze SDKを再度有効にする場合は、SDKが使用するデバイストークンを再設定するためにregisterForRemoteNotifications()を再度呼び出す必要があります。
ステップ3.2:Brazeにプッシュトークンを登録する
APNs登録が完了したら、結果の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.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);
}
}
通知のテスト
コマンドラインからアプリ内通知とプッシュ通知をテストする場合は、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
プッシュ通知の更新を購読する
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 フィールドのないバックグラウンド通知ではトリガーされません。

自動プッシュ統合を使用している場合、subscribeToUpdates(_:) はBrazeが処理したリモート通知について通知を受け取る唯一の方法です。通知がBrazeによって自動的に処理される場合、UIAppDelegate および UNUserNotificationCenterDelegate のシステムメソッドは呼び出されません。

アプリが終了状態にあるときにエンドユーザーが通知をタップした後に購読がトリガーされるように、application(_:didFinishLaunchingWithOptions:) でプッシュ通知の購読を作成してください。
フォアグラウンド通知の処理
デフォルトでは、アプリがフォアグラウンドにある状態でプッシュ通知が届いた場合、iOSは自動的に通知を表示しません。フォアグラウンドでプッシュ通知を表示し、Brazeの分析で追跡するには、UNUserNotificationCenterDelegate.userNotificationCenter(_:willPresent:withCompletionHandler:) の実装内で handleForegroundNotification(notification:) メソッドを呼び出します。
仕組み
handleForegroundNotification(notification:) を呼び出すと、Brazeは通知ペイロードを処理して分析データをログに記録し、ディープリンクやボタンアクションを処理します。実際の表示動作は、完了ハンドラーに渡す UNNotificationPresentationOptions によってコントロールされます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import BrazeKit
import UserNotifications
extension AppDelegate: UNUserNotificationCenterDelegate {
func userNotificationCenter(
_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void
) {
// Let Braze process the notification payload
if let braze = AppDelegate.braze {
braze.notifications.handleForegroundNotification(notification: notification)
}
// Control how the notification appears in the foreground
if #available(iOS 14.0, *) {
completionHandler([.banner, .list, .sound])
} else {
completionHandler([.alert, .sound])
}
}
}
完全な例については、Braze Swift SDKリポジトリのプッシュ通知手動統合サンプルを参照してください。
プッシュプライマー
プッシュプライマーキャンペーンは、アプリのプッシュ通知をデバイスで有効にするようユーザーに促します。これは、ノーコードプッシュプライマーを使用して、SDKのカスタマイズなしで行うことができます。
ダイナミックAPNsゲートウェイ管理
ダイナミックApple Push Notification Service(APNs)ゲートウェイ管理は、正しいAPNs環境を自動検出することで、iOSプッシュ通知の信頼性と効率性を向上させます。以前は、プッシュ通知のAPNs環境(開発または本番)を手動で選択する必要があり、ゲートウェイの設定ミス、配信失敗、BadDeviceTokenエラーが発生することがありました。
ダイナミックAPNsゲートウェイ管理により、次のメリットがあります。
- 信頼性の向上:通知は常に正しいAPNs環境に配信されるため、配信失敗が減少します。
- 設定の簡素化:APNsゲートウェイ設定を手動で管理する必要がなくなります。
- エラー耐性:無効なゲートウェイ値や欠落したゲートウェイ値が適切に処理され、中断のないサービスが提供されます。
前提条件
Brazeは、以下のSDKバージョン要件を満たすiOSのプッシュ通知に対して、ダイナミックAPNsゲートウェイ管理をサポートしています。
仕組み
iOSアプリがBraze Swift SDKと統合されると、aps-environmentを含むデバイス関連データが、利用可能な場合にBraze SDK APIに送信されます。apns_gatewayの値は、アプリが開発(dev)または本番(prod)のAPNs環境を使用しているかを示します。
Brazeは各デバイスについて報告されたゲートウェイ値も保存します。新しい有効なゲートウェイ値を受信すると、Brazeは保存された値を自動的に更新します。
Brazeがプッシュ通知を送信する場合:
- デバイスに有効なゲートウェイ値(devまたはprod)が保存されている場合、Brazeはそれを使用して正しいAPNs環境を決定します。
- ゲートウェイ値が保存されていない場合、Brazeはアプリ設定ページで構成されたAPNs環境をデフォルトとして使用します。
よくある質問
この機能が導入された理由は何ですか?
ダイナミックAPNsゲートウェイ管理により、正しい環境が自動的に選択されます。以前は、APNsゲートウェイを手動で設定する必要があり、BadDeviceTokenエラー、トークンの無効化、APNsのレート制限の問題が発生する可能性がありました。
プッシュ配信パフォーマンスにどのような影響がありますか?
この機能は、プッシュトークンを常に正しいAPNs環境にルーティングすることで配信率を向上させ、ゲートウェイの設定ミスによる失敗を回避します。
この機能を無効にできますか?
ダイナミックAPNsゲートウェイ管理はデフォルトで有効になっており、信頼性の向上を提供します。手動でのゲートウェイ選択が必要な特定のユースケースがある場合は、Brazeサポートにお問い合わせください。
Android TVのプッシュ通知について

ネイティブ機能ではありませんが、Braze Android SDKとFirebase Cloud Messagingを活用してAndroid TV用のプッシュトークンを登録することで、Android TVプッシュ統合が可能になります。ただし、通知ペイロードを受信した後に表示するためのUIを構築する必要があります。
前提条件
この機能を使用するには、以下を完了する必要があります。
プッシュ通知の設定
Android TVのプッシュ通知を設定するには、以下の手順に従います。
- アプリにカスタムビューを作成して通知を表示します。
- カスタム通知ファクトリーを作成します。これにより、デフォルトのSDK動作がオーバーライドされ、通知を手動で表示できるようになります。
nullを返すことで、SDKによる処理が防止され、通知を表示するためのカスタムコードが必要になります。これらのステップを完了すると、Android TVへのプッシュ送信を開始できます。 - (オプション)クリック分析を効果的にトラッキングするには、クリック分析トラッキングを設定します。これは、Brazeプッシュの開封および受信インテントをリッスンするプッシュコールバックを作成することで実現できます。

これらの通知は永続的ではなく、デバイスが表示しているときにのみユーザーに表示されます。これは、Android TVの通知センターが通知履歴をサポートしていないためです。
Android TVプッシュ通知のテスト
プッシュ実装が成功したかどうかをテストするには、通常のAndroidデバイスと同様に、Brazeダッシュボードから通知を送信します。
- アプリケーションが閉じている場合:プッシュメッセージは画面にトースト通知として表示されます。
- アプリケーションが開いている場合:独自のホストUIでメッセージを表示できます。Android Mobile SDKのアプリ内メッセージのUIスタイルに従ってください。
ベストプラクティス
Brazeを使用するマーケターにとって、Android TVへのキャンペーン配信は、Androidモバイルアプリへのプッシュ配信と同じです。これらのデバイスのみをターゲットにするには、セグメンテーションでAndroid TVアプリを選択してください。
FCMから返される配信およびクリックのレスポンスは、モバイルAndroidデバイスと同じ規則に従います。そのため、エラーはメッセージアクティビティログに表示されます。
前提条件
この機能を使う前に、Cordova Braze SDKを統合する必要がある。 SDKを統合すると、基本的なプッシュ通知機能はデフォルトで有効になります。リッチプッシュ通知とPush Storiesを使用するには、それぞれ個別に設定する必要があります。iOSのプッシュ通知を利用するには、有効なプッシュ証明書もアップロードする必要があります。

Cordovaプラグインを追加、削除、または更新するたびに、CordovaはiOSアプリのXcodeプロジェクト内のPodfileを上書きします。つまり、Cordovaプラグインを変更するたびに、これらの機能を再度設定する必要があります。
プッシュディープリンクを有効にする
デフォルトでは、Braze Cordova SDKはプッシュ通知からのディープリンクを自動的に処理しません。プッシュディープリンクを有効にするには、ディープリンクの設定ステップに従ってください。 これらの設定やその他のプッシュ設定オプションの詳細については、オプションの設定を参照してください。
基本プッシュ通知を無効にする(iOSのみ)
iOS用のBraze Cordova SDKを統合すると、基本的なプッシュ通知機能がデフォルトで有効になります。iOSアプリでこの機能を無効にするには、config.xmlファイルに以下を追加してください。詳細については、オプションの設定を参照してください。
1
2
3
4
<platform name="ios">
<preference name="com.braze.ios_disable_automatic_push_registration" value="NO" />
<preference name="com.braze.ios_disable_automatic_push_handling" value="NO" />
</platform>
前提条件
この機能を使う前に、Flutter Braze SDKを統合する必要がある。
プッシュ通知の設定
ステップ1: 初期設定を完了する
ステップ1.1: プッシュに登録する
GoogleのFirebase Cloud Messaging(FCM)APIを使用してプッシュに登録します。詳細な手順については、ネイティブAndroidプッシュ統合ガイドの以下のステップを参照してください。
- Firebaseをプロジェクトに追加する。
- Cloud Messagingを依存関係に追加する。
- サービスアカウントを作成する。
- JSON認証情報を生成する。
- JSON認証情報をBrazeにアップロードする。
ステップ1.2: Google Sender IDを取得する
まず、Firebase Consoleに移動してプロジェクトを開き、 Settings > Project settingsを選択します。

Cloud Messagingを選択し、Firebase Cloud Messaging API (V1)の下にあるSender IDをクリップボードにコピーします。

ステップ1.3: braze.xmlを更新する
braze.xmlファイルに以下を追加します。FIREBASE_SENDER_IDを先ほどコピーしたSender IDに置き換えてください。
1
2
<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>
ステップ1.1: APNs証明書をアップロードする
Apple Push Notification service(APNs)証明書を生成し、Brazeダッシュボードにアップロードします。詳細な手順については、APNs証明書のアップロードを参照してください。
ステップ1.2: アプリにプッシュ通知サポートを追加する
ネイティブiOS統合ガイドに従ってください。
ステップ2: プッシュ通知イベントをリッスンする(オプション)
Brazeが検出して処理したプッシュ通知イベントをリッスンするには、subscribeToPushNotificationEvents()を呼び出し、実行する引数を渡します。

Brazeプッシュ通知イベントはAndroidとiOSの両方で利用できます。プラットフォームの違いにより、iOSではユーザーが通知を操作した場合にのみBrazeプッシュイベントが検出されます。
1
2
3
4
5
6
7
8
9
10
// Create stream subscription
StreamSubscription pushEventsStreamSubscription;
pushEventsStreamSubscription = braze.subscribeToPushNotificationEvents((BrazePushEvent pushEvent) {
print("Push Notification event of type ${pushEvent.payloadType} seen. Title ${pushEvent.title}\n and deeplink ${pushEvent.url}");
// Handle push notification events
});
// Cancel stream subscription
pushEventsStreamSubscription.cancel();
プッシュ通知イベントフィールド

iOSのプラットフォーム制限により、Braze SDKはアプリがフォアグラウンドにある間のみプッシュペイロードを処理できます。リスナーは、ユーザーがプッシュを操作した後にのみ、iOSでpush_openedイベントタイプに対してトリガーされます。
プッシュ通知フィールドの完全なリストについては、以下の表を参照してください。
| フィールド名 | 型 | 説明 |
|---|---|---|
payloadType |
String | 通知ペイロードタイプを指定します。Braze Flutter SDKから送信される2つの値はpush_openedとpush_receivedです。iOSではpush_openedイベントのみがサポートされています。 |
url |
String | 通知によって開かれたURLを指定します。 |
useWebview |
Boolean | trueの場合、URLはアプリ内のモーダルWebビューで開かれます。falseの場合、URLはデバイスのブラウザーで開かれます。 |
title |
String | 通知のタイトルを表します。 |
body |
String | 通知の本文またはコンテンツテキストを表します。 |
summaryText |
String | 通知のサマリーテキストを表します。iOSではsubtitleからマッピングされます。 |
badgeCount |
Number | 通知のバッジカウントを表します。 |
timestamp |
Number | ペイロードがアプリケーションによって受信された時刻を表します。 |
isSilent |
Boolean | trueの場合、ペイロードはサイレントに受信されます。Androidのサイレントプッシュ通知の送信について詳しくは、Androidのサイレントプッシュ通知を参照してください。iOSのサイレントプッシュ通知の送信について詳しくは、iOSのサイレントプッシュ通知を参照してください。 |
isBrazeInternal |
Boolean | フィーチャーフラグの同期やアンインストール追跡などの内部SDK機能のために通知ペイロードが送信された場合、trueになります。ペイロードはユーザーに対してサイレントに受信されます。 |
imageUrl |
String | 通知画像に関連付けられたURLを指定します。 |
brazeProperties |
Object | キャンペーンに関連付けられたBrazeプロパティ(キーと値のペア)を表します。 |
ios |
Object | iOS固有のフィールドを表します。 |
android |
Object | Android固有のフィールドを表します。 |
ステップ3: プッシュ通知の表示をテストする
ネイティブレイヤーでプッシュ通知を設定した後、統合をテストするには:
- Flutterアプリケーションでアクティブユーザーを設定します。これを行うには、
braze.changeUser('your-user-id')を呼び出してプラグインを初期化します。 - キャンペーンに移動し、新しいプッシュ通知キャンペーンを作成します。テストしたいプラットフォームを選択します。
- テスト通知を作成し、テストタブに移動します。テストユーザーと同じ
user-idを追加し、テスト送信をクリックします。 - まもなくデバイスに通知が届くはずです。表示されない場合は、通知センターを確認するか、設定を更新する必要があるかもしれません。

Xcode 14以降では、iOSシミュレーターでリモートプッシュ通知をテストできます。
ステップ4: ディープリンクを追加する(Android)

Androidでは、com_braze_handle_push_deep_links_automaticallyのデフォルト値はfalseです。デフォルトの場合、プッシュ通知をタップしてもDartリスナーにpush_openedイベントは送信されますが、ネイティブSDKはアプリをフォアグラウンドに移動したり、ディープリンク先を自動的に開いたりしません。通知をタップしてもアプリが起動しない場合、このフラグが最も可能性の高い原因です。
プッシュ通知がタップされたときにBrazeが自動的にアプリとディープリンクを開くようにするには、braze.xmlでcom_braze_handle_push_deep_links_automaticallyをtrueに設定します。
1
<bool name="com_braze_handle_push_deep_links_automatically">true</bool>
このフラグは、ネイティブAndroidコードのランタイム設定でも設定できます。
1
2
3
4
val brazeConfig = BrazeConfig.Builder()
.setHandlePushDeepLinksAutomatically(true)
.build()
Braze.configure(this, brazeConfig)
ディープリンクをカスタム処理したい場合は、ステップ2で説明したsubscribeToPushNotificationEvents()リスナーを使用して、push_openedイベントのurlフィールドを自分でルーティングしてください。詳細については、ディープリンクを参照してください。
前提条件
この機能を使用する前に、Android Braze SDKを統合する必要がある。
プッシュ通知の設定
Huawei 製の新しいスマートフォンには、GoogleのFirebase Cloud Messaging (FCM) の代わりにプッシュ配信に使用されるサービス、Huawei Mobile Services (HMS) が搭載されています。
ステップ1:Huawei開発者アカウントに登録する
始める前に、Huawei開発者アカウントへの登録と設定が必要です。Huaweiアカウントで、[My Projects] > [Project Settings] > [App Information] に移動し、App ID と App secret を書き留めます。

ステップ2:Brazeダッシュボードで新しいHuaweiアプリを作成する
Brazeダッシュボードで、設定ナビゲーションの下にあるアプリ設定に移動します。
+ アプリを追加をクリックし、名前(My Huawei Appなど)を入力し、プラットフォームとして Android を選択します。

新しいBrazeアプリを作成したら、プッシュ通知設定を見つけて、プッシュプロバイダーとして Huawei を選択します。次に、Huawei Client Secret と Huawei App ID を指定します。

ステップ3:HuaweiメッセージングSDKをアプリに統合する
Huaweiは、Huawei Messaging Serviceをアプリケーションに統合するAndroid統合codelabを提供しています。以下の手順に従って開始してください。
codelabが完了したら、カスタムのHuawei Message Serviceを作成してプッシュトークンを取得し、メッセージをBraze SDKに転送する必要があります。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public class CustomPushService extends HmsMessageService {
@Override
public void onNewToken(String token) {
super.onNewToken(token);
Braze.getInstance(this.getApplicationContext()).setRegisteredPushToken(token);
}
@Override
public void onMessageReceived(RemoteMessage remoteMessage) {
super.onMessageReceived(remoteMessage);
if (BrazeHuaweiPushHandler.handleHmsRemoteMessageData(this.getApplicationContext(), remoteMessage.getDataOfMap())) {
// Braze has handled the Huawei push notification
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
class CustomPushService: HmsMessageService() {
override fun onNewToken(token: String?) {
super.onNewToken(token)
Braze.getInstance(applicationContext).setRegisteredPushToken(token!!)
}
override fun onMessageReceived(hmsRemoteMessage: RemoteMessage?) {
super.onMessageReceived(hmsRemoteMessage)
if (BrazeHuaweiPushHandler.handleHmsRemoteMessageData(applicationContext, hmsRemoteMessage?.dataOfMap)) {
// Braze has handled the Huawei push notification
}
}
}
カスタムプッシュサービスを追加した後、AndroidManifest.xml に以下を追加します。
1
2
3
4
5
6
7
<service
android:name="package.of.your.CustomPushService"
android:exported="false">
<intent-filter>
<action android:name="com.huawei.push.action.MESSAGING_EVENT" />
</intent-filter>
</service>
ステップ4:フォアグラウンド通知を処理する
デフォルトでは、アプリがフォアグラウンドにあるときにプッシュ通知が届くと、Huaweiは自動的にそれを表示します。Brazeにプッシュ通知のペイロードを処理させる場合(分析トラッキング、ディープリンク処理、カスタム処理のため)、HmsMessageService.onMessageReceived メソッド内で受信したプッシュデータをBrazeにルーティングします。
BrazeHuaweiPushHandler.handleHmsRemoteMessageData を呼び出すと、BrazeはペイロードがBrazeプッシュ通知かどうかを判断し、該当する場合は通知を作成して表示します。詳細については、Androidプッシュ通知のドキュメントにあるフォアグラウンド通知の処理を参照してください。
完全な例については、Braze Android SDKドキュメントのHuaweiハンドラーリファレンスを参照してください。
ステップ5:プッシュ通知をテストする(任意)
ここまでで、Brazeダッシュボードに新しいHuawei Androidアプリを作成し、Huawei開発者の認証情報を使用して設定し、BrazeおよびHuawei SDKをアプリに統合しました。
次に、Brazeで新しいプッシュキャンペーンをテストすることで、統合をテストできます。
ステップ5.1:新しいプッシュ通知キャンペーンを作成する
キャンペーンページで、新しいキャンペーンを作成し、メッセージタイプとしてプッシュ通知を選択します。
キャンペーンに名前を付けたら、プッシュプラットフォームとしてAndroidプッシュを選択します。

次に、タイトルとメッセージを入力してプッシュキャンペーンを作成します。
ステップ5.2:テストプッシュを送信する
テストタブで、changeUser(USER_ID_STRING) メソッドを使ってアプリに設定したユーザーIDを入力し、テスト送信をクリックしてテストプッシュを送信します。

この時点で、BrazeからHuawei (HMS) デバイスにテストプッシュ通知が届くはずです。
ステップ5.3:Huaweiセグメンテーションを設定する(任意)
Brazeダッシュボードの Huaweiアプリは Androidプッシュプラットフォーム上に構築されているため、すべてのAndroidユーザー(Firebase Cloud MessagingおよびHuawei Mobile Services)にプッシュを送信するか、キャンペーンオーディエンスを特定のアプリにセグメント化するかを柔軟に選択できます。
Huaweiアプリのみにプッシュを送信するには、新しいセグメントを作成して、アプリセクション内でHuaweiアプリを選択します。

もちろん、すべてのAndroidプッシュプロバイダーに同じプッシュを送信する場合は、アプリを指定しないことを選択することで、現在のワークスペース内で設定されているすべてのAndroidアプリに送信できます。
前提条件
この機能を使う前に、React Native Braze SDKを統合する必要がある。
プッシュ通知の設定
ステップ1:初期設定を完了する
前提条件
Expoでプッシュ通知を使う前に、Braze Expoプラグインを設定する必要があります。
ステップ1.1:app.json ファイルを更新する
次に、AndroidとiOS用の app.json ファイルを更新します:
- Android:
enableFirebaseCloudMessagingオプションを追加します。 - iOS:
enableBrazeIosPushオプションを追加します。
ステップ1.2:Googleの送信者IDを追加する
まずFirebase Consoleに移動し、プロジェクトを開いて、 Settings > Project settingsを選択します。

Cloud Messagingを選択し、Firebase Cloud Messaging API (V1) の下にあるSender IDをクリップボードにコピーします。

次に、プロジェクトの app.json ファイルを開き、firebaseCloudMessagingSenderId プロパティをクリップボード内の送信者IDに設定します。以下に例を示します。
1
"firebaseCloudMessagingSenderId": "693679403398"
ステップ1.3:Google Services JSONへのパスを追加する
プロジェクトの app.json ファイルに、google-services.json ファイルへのパスを追加します。このファイルは、設定で enableFirebaseCloudMessaging: true を指定する場合に必要です。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
{
"expo": {
"android": {
"googleServicesFile": "PATH_TO_GOOGLE_SERVICES"
},
"plugins": [
[
"@braze/expo-plugin",
{
"androidApiKey": "YOUR-ANDROID-API-KEY",
"iosApiKey": "YOUR-IOS-API-KEY",
"enableBrazeIosPush": true,
"enableFirebaseCloudMessaging": true,
"firebaseCloudMessagingSenderId": "YOUR-FCM-SENDER-ID",
"androidHandlePushDeepLinksAutomatically": true
}
],
]
}
}
Expo Notificationsなどの追加のプッシュ通知ライブラリに依存している場合は、ネイティブのセットアップ手順ではなく、これらの設定を使用する必要があることに注意してください。
Braze Expoプラグインを使用していない場合、またはこれらの設定をネイティブで構成したい場合は、ネイティブAndroidプッシュ統合ガイドを参照してプッシュ通知を登録してください。
Braze Expoプラグインを使用していない場合、またはこれらの設定をネイティブで構成したい場合は、ネイティブiOSプッシュ統合ガイドの以下のステップを参照してプッシュ登録を行ってください:
ステップ1.1:プッシュ通知の権限をリクエストする
アプリ起動時にプッシュ通知の権限をリクエストする予定がない場合は、AppDelegate内の requestAuthorizationWithOptions:completionHandler: 呼び出しを省略してください。その後、ステップ2に進んでください。それ以外の場合は、iOSネイティブ統合ガイドに従ってください。
ステップ1.2(オプション):プッシュキーを移行する
以前にプッシュキーの管理に expo-notifications を使用していた場合は、アプリケーションのルートフォルダーから expo fetch:ios:certs を実行してください。これにより、プッシュキー(.p8ファイル)がダウンロードされ、その後Brazeダッシュボードにアップロードできるようになります。
ステップ2:プッシュ通知の許可をリクエストする
iOSおよびAndroid 13以降のユーザーにプッシュ通知の許可をリクエストするには、Braze.requestPushPermission() メソッド(v1.38.0以降で使用可能)を使用します。Android 12以前の場合、このメソッドは何も実行しません。
このメソッドは、SDKがiOS上のユーザーにどの権限をリクエストするかを指定する必須パラメーターを受け取ります。これらのオプションはAndroidには影響しません。
1
2
3
4
5
6
7
8
const permissionOptions = {
alert: true,
sound: true,
badge: true,
provisional: false
};
Braze.requestPushPermission(permissionOptions);
ステップ2.1:プッシュ通知をリッスンする(オプション)
さらに、Brazeが受信プッシュ通知を検出して処理したイベントをサブスクライブすることもできます。リスナーキー Braze.Events.PUSH_NOTIFICATION_EVENT を使用します。

iOSプッシュ受信イベントは、フォアグラウンド通知と content-available バックグラウンド通知に対してのみトリガーされます。終了中に受信した通知や、content-available フィールドのないバックグラウンド通知ではトリガーされません。
1
2
3
4
Braze.addListener(Braze.Events.PUSH_NOTIFICATION_EVENT, data => {
console.log(`Push Notification event of type ${data.payload_type} seen. Title ${data.title}\n and deeplink ${data.url}`);
console.log(JSON.stringify(data, undefined, 2));
});
プッシュ通知イベントフィールド
プッシュ通知フィールドの完全なリストについては、以下の表を参照してください。
| フィールド名 | タイプ | 説明 |
|---|---|---|
payload_type |
文字列 | 通知ペイロードのタイプを指定します。Braze React Native SDKから送信される2つの値は push_opened と push_received です。 |
url |
文字列 | 通知によって開かれたURLを指定します。 |
use_webview |
ブール値 | true の場合、URLはアプリ内のモーダルウェブビューで開かれます。false の場合、URLはデバイスのブラウザーで開かれます。 |
title |
文字列 | 通知のタイトルを表します。 |
body |
文字列 | 通知の本文またはコンテンツテキストを表します。 |
summary_text |
文字列 | 通知の要約テキストを表します。これはiOSでは subtitle からマッピングされます。 |
badge_count |
数値 | 通知のバッジカウントを表します。 |
timestamp |
数値 | ペイロードがアプリケーションによって受信された時刻を表します。 |
is_silent |
ブール値 | true の場合、ペイロードはサイレントに受信されます。Androidのサイレントプッシュ通知の送信の詳細については、Androidでのサイレントプッシュ通知を参照してください。iOSのサイレントプッシュ通知の送信の詳細については、iOSでのサイレントプッシュ通知を参照してください。 |
is_braze_internal |
ブール値 | フィーチャーフラグ同期やアンインストール追跡などの内部SDK機能に対して通知ペイロードが送信された場合、これは true になります。ペイロードはユーザーに対してサイレントに受信されます。 |
image_url |
文字列 | 通知画像に関連するURLを指定します。 |
braze_properties |
オブジェクト | キャンペーンに関連するBrazeプロパティ(キーと値のペア)を表します。 |
ios |
オブジェクト | iOS固有のフィールドを表します。 |
android |
オブジェクト | Android固有のフィールドを表します。 |
ステップ3:ディープリンクを有効にする(オプション)
Reactコンポーネント内でプッシュ通知がクリックされた際にBrazeがディープリンクを処理できるようにするには、まずReact Native Linkingライブラリで説明されているステップを実装するか、任意のソリューションで実装してください。次に、以下の追加ステップに従ってください。
ディープリンクの詳細については、FAQの記事を参照してください。

既存のReact Nativeプッシュ統合を移行する場合は、Braze SDK、React Native、Expo、または関連ライブラリをアップグレードした後にディープリンクを再テストしてください。以下を確認してください:
- React Native Linkingがまだ設定されており、ディープリンクURLを処理していること。
- iOSの初期プッシュペイロード処理(ステップ3.1を参照)が実装されており、アプリ起動時にまだ呼び出されていること。
- プッシュクリックイベントを処理するために使用しているネイティブデリゲートまたはリスナーメソッドがまだ登録されており、期待通りに呼び出されていること。
Braze Expoプラグインを使用している場合、app.json で androidHandlePushDeepLinksAutomatically を true に設定することで、プッシュ通知のディープリンクを自動的に処理できます。
代わりにディープリンクを手動で処理するには、ネイティブAndroidのドキュメントを参照してください:ディープリンクを追加する。
ステップ3.1:アプリ起動時にプッシュ通知のペイロードを保存する

これはReact Native SDK 19.1.0以降でサポートされています。
メインアクティビティの onCreate() メソッドに populateInitialPushPayloadFromIntent を追加します。React Nativeが初期化される前にこれを呼び出して、初期のIntentデータをキャプチャする必要があります。以下に例を示します。
1
2
3
4
override fun onCreate(savedInstanceState: Bundle?) {
BrazeReactUtils.populateInitialPushPayloadFromIntent(intent)
super.onCreate(savedInstanceState)
}
ステップ3.2:閉じた状態からのディープリンクを処理する
React Native Linkingが扱う基本シナリオに加えて、Braze.getInitialPushPayload メソッドを実装し、url の値を取得します。これにより、アプリが起動していない状態でプッシュ通知からアプリを開くディープリンクに対応できます。以下に例を示します。
1
2
3
4
5
6
7
8
// Handles deep links when an app is launched from a hard close via push click.
Braze.getInitialPushPayload(pushPayload => {
if (pushPayload) {
console.log('Braze.getInitialPushPayload is ' + pushPayload);
showToast('Initial URL is ' + pushPayload.url);
handleOpenUrl({ pushPayload.url });
}
});

このメソッドでは、ステップ3.1でプラットフォーム向けのネイティブ設定が必要です。Braze Expoプラグインを使用している場合、これは自動的に処理される可能性があります。

iOSでプッシュ通知からのディープリンクを処理するには、ネイティブiOSレイヤーでリンク処理も設定する必要があります。
これには、カスタムURLスキームの登録と AppDelegate でのURLハンドラーの実装が含まれます。完全なセットアップ手順については、ネイティブiOSドキュメントのディープリンクの処理を参照してください。
ステップ3.1:アプリ起動時にプッシュ通知のペイロードを保存する

Braze Expoプラグインを使用している場合は、ステップ3.1をスキップしてください。この機能は自動的に処理されます。
iOSの場合は、AppDelegateの didFinishLaunchingWithOptions メソッドに populateInitialPayloadFromLaunchOptions を追加します。以下に例を示します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// ... Perform regular React Native setup
BRZConfiguration *configuration = [[BRZConfiguration alloc] initWithApiKey:apiKey endpoint:endpoint];
configuration.triggerMinimumTimeInterval = 1;
configuration.logger.level = BRZLoggerLevelInfo;
Braze *braze = [BrazeReactBridge initBraze:configuration];
AppDelegate.braze = braze;
[self registerForPushNotifications];
[[BrazeReactUtils sharedInstance] populateInitialPayloadFromLaunchOptions:launchOptions];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
// ... Perform regular React Native setup
let configuration = Braze.Configuration(apiKey: apiKey, endpoint: endpoint)
configuration.triggerMinimumTimeInterval = 1
configuration.logger.level = .info
let braze = BrazeReactBridge.initBraze(configuration)
AppDelegate.braze = braze
registerForPushNotifications()
BrazeReactUtils.shared().populateInitialPayload(fromLaunchOptions: launchOptions)
return super.application(application, didFinishLaunchingWithOptions: launchOptions)
}
ステップ3.2:閉じた状態からのディープリンクを処理する
React Native Linkingが扱う基本シナリオに加えて、Braze.getInitialPushPayload メソッドを実装し、url の値を取得します。これにより、アプリが起動していない状態でプッシュ通知からアプリを開くディープリンクに対応できます。以下に例を示します。
1
2
3
4
5
6
7
8
// Handles deep links when an app is launched from a hard close via push click.
Braze.getInitialPushPayload(pushPayload => {
if (pushPayload) {
console.log('Braze.getInitialPushPayload is ' + pushPayload);
showToast('Initial URL is ' + pushPayload.url);
handleOpenUrl({ pushPayload.url });
}
});

このメソッドでは、ステップ3.1でプラットフォーム向けのネイティブ設定が必要です。Braze Expoプラグインを使用している場合、これは自動的に処理される可能性があります。
ステップ3.3:ユニバーサルリンクを有効にする(オプション)
ユニバーサルリンクのサポートを有効にするには、指定されたURLを開くかどうかを判断するBrazeデリゲートを実装し、それをBrazeインスタンスに登録します。
iOS ディレクトリ内に BrazeReactDelegate.swift ファイルを作成し、以下を追加します。YOUR_DOMAIN_HOST を実際のドメインに置き換えてください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
import Foundation
import BrazeKit
import UIKit
class BrazeReactDelegate: NSObject, BrazeDelegate {
/// This delegate method determines whether to open a given URL.
/// Reference the context to get additional details about the URL payload.
func braze(_ braze: Braze, shouldOpenURL context: Braze.URLContext) -> Bool {
if let host = context.url.host,
host.caseInsensitiveCompare("YOUR_DOMAIN_HOST") == .orderedSame {
// Sample custom handling of universal links
let application = UIApplication.shared
let userActivity = NSUserActivity(activityType: NSUserActivityTypeBrowsingWeb)
userActivity.webpageURL = context.url
// Routes to the `continueUserActivity` method, which should be handled in your AppDelegate.
application.delegate?.application?(
application,
continue: userActivity,
restorationHandler: { _ in }
)
return false
}
// Let Braze handle links otherwise
return true
}
}
次に、プロジェクトの AppDelegate.swift ファイルの didFinishLaunchingWithOptions 内で BrazeReactDelegate を作成し登録します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import BrazeKit
class AppDelegate: UIResponder, UIApplicationDelegate {
static var braze: Braze?
// Keep a strong reference to the BrazeDelegate so it is not deallocated.
private var brazeDelegate: BrazeReactDelegate?
func application(
_ application: UIApplication,
didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]? = nil
) -> Bool {
// Other setup code (e.g., Braze initialization)
brazeDelegate = BrazeReactDelegate()
AppDelegate.braze?.delegate = brazeDelegate
return true
}
}
iOS ディレクトリ内に BrazeReactDelegate.h ファイルを作成し、以下のコードスニペットを追加します。
1
2
3
4
5
6
#import <Foundation/Foundation.h>
#import <BrazeKit/BrazeKit-Swift.h>
@interface BrazeReactDelegate: NSObject<BrazeDelegate>
@end
次に、BrazeReactDelegate.m ファイルを作成し、以下のコードスニペットを追加します。YOUR_DOMAIN_HOST を実際のドメインに置き換えてください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#import "BrazeReactDelegate.h"
#import <UIKit/UIKit.h>
@implementation BrazeReactDelegate
/// This delegate method determines whether to open a given URL.
///
/// Reference the `BRZURLContext` object to get additional details about the URL payload.
- (BOOL)braze:(Braze *)braze shouldOpenURL:(BRZURLContext *)context {
if ([[context.url.host lowercaseString] isEqualToString:@"YOUR_DOMAIN_HOST"]) {
// Sample custom handling of universal links
UIApplication *application = UIApplication.sharedApplication;
NSUserActivity* userActivity = [[NSUserActivity alloc] initWithActivityType:NSUserActivityTypeBrowsingWeb];
userActivity.webpageURL = context.url;
// Routes to the `continueUserActivity` method, which should be handled in your `AppDelegate`.
[application.delegate application:application
continueUserActivity:userActivity restorationHandler:^(NSArray<id<UIUserActivityRestoring>> * _Nullable restorableObjects) {}];
return NO;
}
// Let Braze handle links otherwise
return YES;
}
@end
次に、プロジェクトの AppDelegate.m ファイルの didFinishLaunchingWithOptions 内で BrazeReactDelegate を作成し登録します。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#import "BrazeReactUtils.h"
#import "BrazeReactDelegate.h"
@interface AppDelegate ()
// Keep a strong reference to the BrazeDelegate to ensure it is not deallocated.
@property (nonatomic, strong) BrazeReactDelegate *brazeDelegate;
@end
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
// Other setup code
self.brazeDelegate = [[BrazeReactDelegate alloc] init];
braze.delegate = self.brazeDelegate;
}
統合の例については、こちらのAppDelegateの例のサンプルアプリを参照してください。
ステップ4:フォアグラウンド通知を処理する
フォアグラウンド通知の処理は、プラットフォームや設定によって異なります。統合方法に合わせてアプローチを選択してください。
iOSでは、フォアグラウンド通知の処理はネイティブのSwift統合と同じです。UNUserNotificationCenterDelegate.userNotificationCenter(_:willPresent:withCompletionHandler:) の実装内で handleForegroundNotification(notification:) を呼び出します。
詳細な情報とコード例については、Swiftプッシュ通知のドキュメントにあるフォアグラウンド通知の処理を参照してください。
Androidの場合、フォアグラウンド通知の処理はネイティブのAndroid統合と同じです。FirebaseMessagingService.onMessageReceived メソッド内で BrazeFirebaseMessagingService.handleBrazeRemoteMessage を呼び出します。
詳細な情報とコード例については、Androidプッシュ通知のドキュメントにあるフォアグラウンド通知の処理を参照してください。
Expo管理ワークフローでは、ネイティブ通知ハンドラーを直接呼び出しません。代わりに、Expo Notifications APIを使ってフォアグラウンド表示をコントロールし、Braze Expoプラグインがネイティブ処理を自動的に行います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import * as Notifications from 'expo-notifications';
import Braze from '@braze/react-native-sdk';
// Control foreground presentation in Expo
Notifications.setNotificationHandler({
handleNotification: async () => ({
shouldShowAlert: true, // Show alert while in foreground
shouldPlaySound: false,
shouldSetBadge: false,
}),
});
// React to Braze push events
const subscription = Braze.addListener('pushNotificationEvent', (event) => {
console.log('Braze push event', {
type: event.payload_type, // "push_received" | "push_opened"
title: event.title,
url: event.url,
is_silent: event.is_silent,
});
// Handle deep links, custom behavior, etc.
});
// Handle initial payload when app launches via push
Braze.getInitialPushPayload((payload) => {
if (payload) {
console.log('Initial push payload', payload);
}
});

Expo管理ワークフローでは、Braze Expoプラグインがネイティブプッシュ処理を自動的に行います。上記のExpo Notificationsプレゼンテーションオプションで、フォアグラウンドUIをコントロールします。
ベアワークフロー統合については、代わりにネイティブのiOSおよびAndroidのアプローチに従ってください。
ステップ5:テストのプッシュ通知を送信する
この時点で、デバイスに通知を送信できるはずです。次のステップに従って、プッシュ統合をテストしてください。

macOS 13以降の特定のデバイスでは、Xcode 14以降で実行されているiOS 16以降のシミュレーターでiOSプッシュ通知をテストできます。詳細については、Xcode 14 Release Notesを参照してください。
- React Nativeアプリケーションで
Braze.changeUserId('your-user-id')メソッドを呼び出して、アクティブユーザーを設定します。 - キャンペーンに移動し、新しいプッシュ通知キャンペーンを作成します。テストしたいプラットフォームを選択します。
- テスト通知を作成し、テストタブに移動します。テストユーザーと同じ
user-idを追加し、テスト送信をクリックします。まもなくデバイスに通知が届くはずです。

Expoプラグインの使用
Expoのプッシュ通知を設定した後、プラグインを使用して以下のプッシュ通知の動作を処理できます—ネイティブのAndroidまたはiOSレイヤーでコードを記述する必要はありません。
AndroidプッシュをFMSに転送する
追加のFirebase Messaging Service(FMS)を使用する場合、アプリケーションがBraze以外からのプッシュを受信したときに呼び出すフォールバックFMSを指定できます。例:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"expo": {
"plugins": [
[
"@braze/expo-plugin",
{
...
"androidFirebaseMessagingFallbackServiceEnabled": true,
"androidFirebaseMessagingFallbackServiceClasspath": "com.company.OurFirebaseMessagingService"
}
]
]
}
}
Expo Application Servicesでアプリ拡張機能を使用する
Expo Application Services(EAS)を使用しており、enableBrazeIosRichPushまたはenableBrazeIosPushStoriesを有効にしている場合、プロジェクト内の各アプリ拡張機能に対応するバンドル識別子を宣言する必要があります。このステップにはいくつかのアプローチがあり、プロジェクトでEASによるコード署名をどのように管理しているかによって異なります。
1つのアプローチは、Expoのアプリ拡張機能のドキュメントに従って、app.jsonファイルのappExtensions設定を使用する方法です。または、Expoのローカル認証情報のドキュメントに従って、credentials.jsonファイルのmultitarget設定をセットアップすることもできます。
トラブルシューティング
以下は、Braze React Native SDKとExpoプラグインを使用したプッシュ通知統合の一般的なトラブルシューティング手順です。
プッシュ通知が動作しなくなった
Expoプラグインを介したプッシュ通知が動作しなくなった場合:
- Braze SDKがまだセッションをトラッキングしていることを確認します。
wipeDataの明示的または暗黙的な呼び出しによってSDKが無効にされていないことを確認します。- Expoまたは関連ライブラリの最近のアップグレードを確認します。Braze設定との競合が発生している可能性があります。
- 最近追加されたプロジェクト依存関係を確認し、既存のプッシュ通知デリゲートメソッドを手動でオーバーライドしていないか確認します。

デバイストークンがBrazeに登録されない
デバイストークンがBrazeに登録されない場合、まずプッシュ通知が動作しなくなったのセクションを確認してください。
問題が解決しない場合、別の依存関係がBrazeのプッシュ通知設定に干渉している可能性があります。その依存関係を削除するか、代わりに手動でBraze.registerPushTokenを呼び出すことを試してください。
プッシュ通知からのディープリンクが開かない
移行後にプッシュ通知からのディープリンクが開かなくなった場合、以下を確認してください:
- アップグレードしたアプリでReact Native Linkingの設定がまだ有効であることを確認します。
- iOSのネイティブ統合の場合、
populateInitialPayloadFromLaunchOptionsとBraze.getInitialPushPayloadを実装していることを確認します。これにより、アプリが終了状態から起動されたときに、初期プッシュペイロードを取得し、そのurlをディープリンクハンドラーに渡すことができます。 - Braze Expoプラグインを使用している場合、
androidHandlePushDeepLinksAutomaticallyが実装に応じて正しく設定されていることを確認します。 - 最近追加された依存関係が通知処理やアプリデリゲートの動作をオーバーライドしていないか確認します。
これらの確認を完了しても問題が解決しない場合は、サポートチケットを送信し、SDKログと再現手順を含めてください。
前提条件
この機能を使用する前に、Web Braze SDKを統合する必要がある。 また、Web SDK用のプッシュ通知を設定する必要があります。iOSおよびiPadOSユーザーにプッシュ通知を送信できるのは、Safari v16.4以降を使用している場合に限られます。
モバイル向け Safari プッシュの設定
ステップ1: マニフェストファイルを作成する
Web アプリケーションマニフェストは、ユーザーのホーム画面にインストールされたときにWebサイトがどのように表示されるかを制御するJSONファイルです。
たとえば、App Switcherで使用されるバックグラウンドテーマの色やアイコン、ネイティブアプリのようにフルスクリーンで表示するかどうか、アプリを横向きまたは縦向きモードで開くかどうかを設定できます。
Webサイトのルートディレクトリに、以下の必須フィールドを含む新しいmanifest.jsonファイルを作成します。
1
2
3
4
5
6
7
8
9
{
"name": "your app name",
"short_name": "your app name",
"display": "fullscreen",
"icons": [{
"src": "favicon.ico",
"sizes": "128x128",
}]
}
サポートされているフィールドの完全なリストは、MDNのWebアプリマニフェストドキュメントを参照してください。
ステップ2: マニフェストファイルをリンクする
マニフェストファイルがホストされている場所を指す以下の<link>タグを、Webサイトの<head>要素に追加します。
1
<link rel="manifest" href="/manifest.json" />
ステップ3: サービスワーカーを追加する
Webプッシュ統合ガイドで説明されているように、Webサイトにはbrazeサービスワーカーライブラリをインポートするサービスワーカーファイルが必要です。
ステップ4: ホーム画面に追加する
一般的なブラウザー(Safari、Chrome、FireFox、Edgeなど)はすべて、最新バージョンでWebプッシュ通知をサポートしています。iOSまたはiPadOSでプッシュ許可をリクエストするには、共有 > ホーム画面に追加を選択して、Webサイトをユーザーのホーム画面に追加する必要があります。ホーム画面に追加を使用すると、ユーザーはWebサイトをブックマークし、ホーム画面にアイコンを追加できます。

ステップ5: ネイティブプッシュプロンプトを表示する
アプリがホーム画面に追加された後、ユーザーがアクション(ボタンのクリックなど)を実行したときにプッシュ許可をリクエストできます。これはrequestPushPermissionメソッド、またはコード不要のプッシュプライマーアプリ内メッセージを使用して行うことができます。

プロンプトを承認または拒否した後、再度プロンプトを表示するには、Webサイトを削除してホーム画面に再インストールする必要があります。

以下に例を示します。
1
2
3
4
5
6
7
8
9
import { requestPushPermission } from "@braze/web-sdk";
button.onclick = function(){
requestPushPermission(() => {
console.log(`User accepted push prompt`);
}, (temporary) => {
console.log(`User ${temporary ? "temporarily dismissed" : "permanently denied"} push prompt`);
});
};
次のステップ
次に、統合を検証するためにテストメッセージを自分自身に送信します。統合が完了したら、ノーコードのプッシュプライマーメッセージを使用して、プッシュ通知のオプトイン率を最適化できます。
前提条件
この機能を使用する前に、Unity Braze SDKを統合する必要がある。
プッシュ通知の設定
ステップ1:プラットフォームを設定する
ステップ1.1:Firebaseを有効にする
開始するには、Firebase Unityの設定ドキュメントに従ってください。

Firebase Unity SDKを統合すると、AndroidManifest.xmlがオーバーライドされる場合があります。その場合は、必ず元に戻してください。
ステップ1.2:Firebaseの認証情報を設定する
FirebaseサーバーキーとSender IDをBrazeダッシュボードに入力する必要があります。これを行うには、Firebase Developers Consoleにログインし、Firebaseプロジェクトを選択します。次に、Settingsの下にあるCloud Messagingを選択し、サーバーキーとSender IDをコピーします。
Brazeの設定の管理にあるアプリ設定ページでAndroidアプリを選択します。次に、Firebase Cloud Messaging Server KeyフィールドにFirebaseサーバーキーを入力し、Firebase Cloud Messaging Sender IDフィールドにFirebase Sender IDを入力します。

ステップ1.1:統合方法を確認する
Brazeは、iOSプッシュ統合を自動化するためのUnityネイティブソリューションを提供します。代わりに手動で統合の設定と管理を行いたい場合は、Swift:プッシュ通知を参照してください。
それ以外の場合は、次のステップに進みます。

自動プッシュ通知ソリューションは、iOS 12の暫定認証機能を利用しており、ネイティブのプッシュプロンプトポップアップでは使用できません。
ステップ1.1:ADMを有効にする
- まだアカウントを作成していない場合は、Amazon Apps & Games Developer Portalでアカウントを作成します。
- OAuth認証情報(クライアントIDとクライアントシークレット)とADM APIキーを取得します。
- Unity Braze設定ウィンドウでAutomatic ADM Registration Enabledを有効にします。
- または、
res/values/braze.xmlファイルに次の行を追加して、ADM登録を有効にすることもできます。
- または、
1
<bool name="com_braze_push_adm_messaging_registration_enabled">true</bool>
ステップ2:プッシュ通知を構成する
ステップ2.1:プッシュ設定を行う
Braze SDKは、Firebase Cloud Messagingサーバーへのプッシュ登録を自動的に処理して、デバイスがプッシュ通知を受信できるようにすることができます。UnityでAutomate Unity Android Integrationを有効にし、以下のプッシュ通知設定を行います。
| 設定 | 説明 |
|---|---|
| Automatic Firebase Cloud Messaging Registration Enabled | デバイスのFCMプッシュトークンを自動的に取得して送信するようにBraze SDKに指示します。 |
| Firebase Cloud Messaging Sender ID | Firebaseコンソールの送信者ID。 |
| Handle Push Deeplinks Automatically | プッシュ通知がクリックされたときに、ディープリンクを開くかアプリを開くかをSDKで処理するかどうか。 |
| Small Notification Icon Drawable | プッシュ通知が届いたときに表示される小さなアイコンのAndroid Drawableリソース参照。@drawable/プレフィックスを含む完全な参照を入力します(例:@drawable/hourglass_icon)。自動統合はこの値をそのままbraze.xmlに書き込みます。空のままにすると、通知はアプリケーションアイコンを小さなアイコンとして使用します。 |
| Large Notification Icon Drawable | 通知用のオプションの大きなアイコン。小さなアイコンと同じ@drawable/形式を使用します(例:@drawable/my_large_icon)。 |

Small Notification Icon DrawableとLarge Notification Icon Drawableは、Braze > Braze ConfigurationのPush Configurationの下に表示されます。両方の値は入力したとおりにbraze.xmlに書き込まれます。@drawable/プレフィックスは自分で含めてください。Braze Unity統合では自動的に追加されません(例:<drawable name="com_braze_push_small_notification_icon">@drawable/hourglass_icon</drawable>)。
ステップ2.1:APNsトークンをアップロードする
Brazeを使ってiOSプッシュ通知を送信する前に、Appleの開発者向けドキュメントに記載されているように、.p8 プッシュ通知ファイルをアップロードする必要があります。
- Apple開発者アカウントで、Certificates, Identifiers & Profilesにアクセスします。
- KeysでAllを選択し、ページ上部の追加ボタン(+)をクリックします。
- Key Descriptionで、署名キーの一意の名前を入力します。
- Key ServicesでApple Push Notification service (APNs)チェックボックスをオンにし、Continueをクリックします。Confirmをクリックします。
- キーIDをメモしておきます。Downloadをクリックして、キーを生成してダウンロードします。ダウンロードしたファイルは安全な場所に保存してください。このファイルは一度しかダウンロードできません。
- Brazeで、設定 > アプリ設定に移動し、Apple Push Certificateで
.p8ファイルをアップロードします。開発用または本番用のプッシュ証明書のいずれかをアップロードできます。アプリがApp Storeで公開された後にプッシュ通知をテストするには、アプリの開発バージョン用に別のワークスペースを設定することをお勧めします。 - プロンプトが表示されたら、アプリのバンドルID、キーID、チームIDを入力します。また、アプリの開発環境と本番環境のどちらに通知を送信するかを指定する必要があります。これはプロビジョニングプロファイルによって定義されます。
- 完了したら、保存を選択します。
ステップ2.2:自動プッシュを有効にする
UnityエディターでBraze > Braze Configurationの順に移動して、Braze構成設定を開きます。
Integrate Push With Brazeをチェックして、プッシュ通知用にユーザーを自動的に登録し、プッシュトークンをBrazeに渡し、プッシュ開封の分析を追跡し、デフォルトのプッシュ通知処理を利用します。
ステップ2.3:バックグラウンドプッシュを有効にする(オプション)
プッシュ通知でbackground modeを有効にする場合は、Enable Background Pushをチェックします。これにより、プッシュ通知が到着したときにシステムがアプリケーションをsuspended状態から復帰させ、アプリケーションがプッシュ通知に応答してコンテンツをダウンロードできるようになります。アンインストール追跡機能を使用するには、このオプションをチェックする必要があります。

ステップ2.4:自動登録を無効にする(オプション)
まだプッシュ通知をオプトインしていないユーザーは、アプリケーションを開くと自動的にプッシュの許可が付与されます。この機能を無効にし、手動でユーザーをプッシュ登録するには、Disable Automatic Push Registrationをチェックします。
- iOS 12以降でDisable Provisional Authorizationがチェックされていない場合、ユーザーはサイレントプッシュを受信することを暫定的に(サイレントに)許可されます。チェックした場合、ユーザーにネイティブのプッシュプロンプトが表示されます。
- 実行時にプロンプトが表示されるタイミングを正確に設定する必要がある場合は、Braze構成エディターから自動登録を無効にし、代わりに
AppboyBinding.PromptUserForPushPermissions()を使用します。

ステップ2.1:AndroidManifest.xmlを更新する
アプリにAndroidManifest.xmlがない場合は、以下をテンプレートとして使用できます。それ以外の場合、すでにAndroidManifest.xmlがある場合は、以下の不足しているセクションが既存のAndroidManifest.xmlに追加されていることを確認してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="REPLACE_WITH_YOUR_PACKAGE_NAME">
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<permission
android:name="REPLACE_WITH_YOUR_PACKAGE_NAME.permission.RECEIVE_ADM_MESSAGE"
android:protectionLevel="signature" />
<uses-permission android:name="REPLACE_WITH_YOUR_PACKAGE_NAME.permission.RECEIVE_ADM_MESSAGE" />
<uses-permission android:name="com.amazon.device.messaging.permission.RECEIVE" />
<application android:icon="@drawable/app_icon"
android:label="@string/app_name">
<!-- Calls the necessary Braze methods to ensure that analytics are collected and that push notifications are properly forwarded to the Unity application. -->
<activity android:name="com.braze.unity.BrazeUnityPlayerActivity"
android:label="@string/app_name"
android:configChanges="fontScale|keyboard|keyboardHidden|locale|mnc|mcc|navigation|orientation|screenLayout|screenSize|smallestScreenSize|uiMode|touchscreen"
android:screenOrientation="sensor">
<meta-data android:name="android.app.lib_name" android:value="unity" />
<meta-data android:name="unityplayer.ForwardNativeEventsToDalvik" android:value="true" />
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<receiver android:name="com.braze.push.BrazeAmazonDeviceMessagingReceiver" android:permission="com.amazon.device.messaging.permission.SEND">
<intent-filter>
<action android:name="com.amazon.device.messaging.intent.RECEIVE" />
<action android:name="com.amazon.device.messaging.intent.REGISTRATION" />
<category android:name="REPLACE_WITH_YOUR_PACKAGE_NAME" />
</intent-filter>
</receiver>
</application>
</manifest>
ステップ2.2:ADM APIキーを保存する
まず、アプリ用のADM APIキーを生成し、そのキーをapi_key.txtという名前のファイルに保存して、プロジェクトのAssets/ディレクトリに追加します。

api_key.txtに末尾の改行などの空白文字が含まれている場合、Amazonはキーを認識しません。
次に、mainTemplate.gradleファイルに以下を追加します。
1
2
3
4
5
6
7
task copyAmazon(type: Copy) {
def unityProjectPath = $/file:///**DIR_UNITYPROJECT**/$.replace("\\", "/")
from unityProjectPath + '/Assets/api_key.txt'
into new File(projectDir, 'src/main/assets')
}
preBuild.dependsOn(copyAmazon)
ステップ2.3:ADM Jarを追加する
必要なADM Jarファイルは、Unity JARドキュメントに従ってプロジェクト内の任意の場所に配置できます。
ステップ2.4:クライアントシークレットとクライアントIDをBrazeダッシュボードに追加する
最後に、ステップ1で取得したクライアントシークレットとクライアントIDをBrazeダッシュボードの設定の管理ページに追加する必要があります。

ステップ3:プッシュリスナーを設定する
ステップ3.1:プッシュ受信リスナーを有効にする
プッシュ受信リスナーは、ユーザーがプッシュ通知を受信したときに起動されます。Unityにプッシュペイロードを送信するには、ゲームオブジェクトの名前を設定し、Set Push Received Listenerの下でプッシュ受信リスナーのコールバックメソッドを指定します。
ステップ3.2:プッシュ開封リスナーを有効にする
プッシュ開封リスナーは、ユーザーがプッシュ通知をクリックしてアプリを起動したときに起動されます。Unityにプッシュペイロードを送信するには、ゲームオブジェクトの名前を設定し、Set Push Opened Listenerの下でプッシュ開封リスナーのコールバックメソッドを指定します。
ステップ3.3:プッシュ削除リスナーを有効にする
プッシュ削除リスナーは、ユーザーがプッシュ通知をスワイプして削除したり、無視したりしたときに起動されます。Unityにプッシュペイロードを送信するには、ゲームオブジェクトの名前を設定し、Set Push Deleted Listenerの下でプッシュ削除リスナーのコールバックメソッドを指定します。
プッシュリスナーの例
次の例では、コールバックメソッド名PushNotificationReceivedCallback、PushNotificationOpenedCallback、およびPushNotificationDeletedCallbackをそれぞれ使用して、BrazeCallbackゲームオブジェクトを実装します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
public class MainMenu : MonoBehaviour {
void PushNotificationReceivedCallback(string message) {
#if UNITY_ANDROID
Debug.Log("PushNotificationReceivedCallback message: " + message);
PushNotification pushNotification = new PushNotification(message);
Debug.Log("Push Notification received: " + pushNotification);
#elif UNITY_IOS
ApplePushNotification pushNotification = new ApplePushNotification(message);
Debug.Log("Push received Notification event: " + pushNotification);
#endif
}
void PushNotificationOpenedCallback(string message) {
#if UNITY_ANDROID
Debug.Log("PushNotificationOpenedCallback message: " + message);
PushNotification pushNotification = new PushNotification(message);
Debug.Log("Push Notification opened: " + pushNotification);
#elif UNITY_IOS
ApplePushNotification pushNotification = new ApplePushNotification(message);
Debug.Log("Push opened Notification event: " + pushNotification);
#endif
}
void PushNotificationDeletedCallback(string message) {
#if UNITY_ANDROID
Debug.Log("PushNotificationDeletedCallback message: " + message);
PushNotification pushNotification = new PushNotification(message);
Debug.Log("Push Notification dismissed: " + pushNotification);
#endif
}
}
ステップ3.1:プッシュ受信リスナーを有効にする
プッシュ受信リスナーは、ユーザーがアプリケーションをアクティブに使用しているとき(アプリがフォアグラウンドになっているときなど)にプッシュ通知を受信すると起動されます。Braze構成エディターでプッシュ受信リスナーを設定します。ゲームオブジェクトのリスナーを実行時に設定する必要がある場合は、AppboyBinding.ConfigureListener()を使用し、BrazeUnityMessageType.PUSH_RECEIVEDを指定します。

ステップ3.2:プッシュ開封リスナーを有効にする
プッシュ開封リスナーは、ユーザーがプッシュ通知をクリックしてアプリを起動したときに起動されます。Unityにプッシュペイロードを送信するには、ゲームオブジェクトの名前を設定し、Set Push Opened Listenerオプションの下でプッシュ開封リスナーのコールバックメソッドを指定します。

ゲームオブジェクトのリスナーを実行時に設定する必要がある場合は、AppboyBinding.ConfigureListener()を使用し、BrazeUnityMessageType.PUSH_OPENEDを指定します。
プッシュリスナーの例
次の例では、コールバックメソッド名PushNotificationReceivedCallbackおよびPushNotificationOpenedCallbackをそれぞれ使用して、AppboyCallbackゲームオブジェクトを実装します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
public class MainMenu : MonoBehaviour {
void PushNotificationReceivedCallback(string message) {
#if UNITY_ANDROID
Debug.Log("PushNotificationReceivedCallback message: " + message);
PushNotification pushNotification = new PushNotification(message);
Debug.Log("Push Notification received: " + pushNotification);
#elif UNITY_IOS
ApplePushNotification pushNotification = new ApplePushNotification(message);
Debug.Log("Push received Notification event: " + pushNotification);
#endif
}
void PushNotificationOpenedCallback(string message) {
#if UNITY_ANDROID
Debug.Log("PushNotificationOpenedCallback message: " + message);
PushNotification pushNotification = new PushNotification(message);
Debug.Log("Push Notification opened: " + pushNotification);
#elif UNITY_IOS
ApplePushNotification pushNotification = new ApplePushNotification(message);
Debug.Log("Push opened Notification event: " + pushNotification);
#endif
}
}
前のステップでAndroidManifest.xmlを更新した際に、以下の行を追加したことでプッシュリスナーが自動的に設定されています。そのため、追加の設定は必要ありません。
1
2
<action android:name="com.amazon.device.messaging.intent.RECEIVE" />
<action android:name="com.amazon.device.messaging.intent.REGISTRATION" />

オプション構成
アプリ内リソースへのディープリンク
Brazeはデフォルトで標準的なディープリンク(WebサイトのURL、AndroidのURIなど)を処理できますが、カスタムディープリンクを作成するには、追加のマニフェスト設定が必要です。
設定ガイダンスについては、アプリ内リソースへのディープリンクを参照してください。
Brazeプッシュ通知アイコンの追加

通知アイコンの画像をAssets/Plugins/Android/resに追加しないでください。UnityはこのパスでのAndroidリソースの提供を非推奨としており、ビルド警告やバリデーションエラーが発生する可能性があります。アイコンのDrawableはAndroid Archive(AAR)プラグインまたはAndroidライブラリプロジェクトにパッケージ化して、他のDrawableと同様にビルドされたアプリのリソースにマージされるようにしてください。
プロジェクトにプッシュアイコンを追加するには、res/drawable*(または密度別フォルダー)の下にアイコン画像ファイルを含むAARプラグインまたはAndroidライブラリを作成し、Braze > Braze Configurationで完全な@drawable/リソース名を使用して各アイコンを参照します(ステップ2.1:プッシュ設定を行うを参照)。Unityのパッケージングとインポートの手順については、Android Library Projects and Android Archive plug-insを参照してください。
小さなアイコンのアートワークルール(アルファのみ、色なし)については、Androidプッシュ通知のステップ2:小さなアイコンをデザインガイドラインに準拠させるを参照してください。
プッシュトークンコールバック
OSからBrazeデバイストークンのコピーを受け取るには、AppboyBinding.SetPushTokenReceivedFromSystemDelegate()を使用してデリゲートを設定します。
現時点では、ADMのオプション構成はありません。
前提条件
この機能を使う前に、.NET MAUI Braze SDKを統合する必要がある。
プッシュ通知の設定

.NET MAUI(旧称Xamarin)向けにプッシュ通知を統合するには、ネイティブAndroidプッシュ通知のステップを完了する必要がある。以下の手順はあくまで概要である。完全なチュートリアルについては、ネイティブ・プッシュ通知ガイドを参照のこと。
ステップ1:プロジェクトを更新する
- AndroidプロジェクトにFirebaseを追加する。
- Android プロジェクトの
build.gradleに Cloud Messaging ライブラリを追加します。1
implementation "google.firebase:firebase-messaging:+"
ステップ2:JSON認証情報を作成する
- Google Cloud で、Firebase Cloud Messaging API を有効にします。
- [サービスアカウント] > [プロジェクト] > [サービスアカウントの作成] の順に選択し、サービスアカウント名、ID、説明を入力します。完了したら、Createを選択して続ける。
- [ロール] フィールドで、ロールのリストから [Firebase Cloud Messaging API 管理者] を見つけて選択します。
- [サービスアカウント] でプロジェクトを選択し、[アクション] > [キーの管理] > [キーの追加] > [新しいキーの作成] の順に選択します。[JSON] を選択し、[作成] を選択します。
ステップ3:JSON認証情報をアップロードする
- Braze で、[設定] > [アプリの設定] を選択します。Android アプリの [プッシュ通知設定] で [Firebase] を選択し、[JSON ファイルのアップロード] を選択して、先ほど生成した認証情報をアップロードします。完了したら、[保存] を選択します。
- Firebase Consoleにアクセスして、FCMトークンの自動登録を有効にする。プロジェクトを開き、[設定] > [プロジェクト設定] の順に選択します。[Cloud Messaging] を選択し、[Firebase Cloud Messaging API (V1)] で [送信者 ID] フィールドの数字をコピーします。
- Android Studio プロジェクトで、以下を
braze.xmlに追加します。
1
2
<bool translatable="false" name="com_braze_firebase_cloud_messaging_registration_enabled">true</bool>
<string translatable="false" name="com_braze_firebase_cloud_messaging_sender_id">FIREBASE_SENDER_ID</string>

サイレントプッシュ通知を送信するたびにBrazeが不要なネットワークリクエストをトリガーするのを防ぐには、Application クラスのonCreate() メソッドで設定されている自動ネットワークリクエストをすべて削除する。詳細については、Android 開発者リファレンス:アプリケーションを参照してください。
ステップ 1: 初期設定を完了する
プッシュを使ったアプリケーションの設定や、認証情報をサーバーに保存する方法については、SWIFT の統合に関する説明を参照してください。詳細はiOS MAUIサンプル・アプリケーションを参照のこと。
ステップ2:プッシュ通知の許可をリクエストする
当社の.NET MAUI SDKは、自動プッシュ設定をサポートするようになった。Brazeインスタンス構成に以下のコードを追加して、プッシュ自動化とパーミッションを設定する:
1
2
configuration.Push.Automation = new BRZConfigurationPushAutomation(true);
configuration.Push.Automation.RequestAuthorizationAtLaunch = false;
詳細はiOS MAUIサンプル・アプリケーションを参照のこと。詳細については、Xamarin.iOS の拡張ユーザー通知に関する Xamarin ドキュメントを参照してください。