Skip to content

プッシュ通知

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

前提条件

この機能を使用する前に、Web Braze SDKを統合する必要がある。

プッシュ・プロトコル

Web プッシュ通知は、大部分の主要ブラウザーでサポートされている W3C プッシュ標準を使用します。特定のプッシュ・プロトコルの標準やブラウザのサポートに関する詳細は、アップル社や モジラ社マイクロソフト社のリソースを参照されたい。

プッシュ通知の設定

ステップ 1: サービスワーカーを設定する

プロジェクトのservice-worker.js ファイルに以下のスニペットを追加し、Web SDKの初期化時に初期化オプションを に設定する。 manageServiceWorkerExternally初期化オプションをtrue に設定する。

ステップ 2:ブラウザを登録する

ブラウザがプッシュ通知を受け取れるように、ユーザーにプッシュ権限を即座に要求するには、braze.requestPushPermission() 。プッシュが相手のブラウザでサポートされているかどうかをテストするには、まずbraze.isPushSupported() に電話する。

また、プッシュ権限を要求する前にユーザーにソフトプッシュプロンプトを送り、独自のプッシュ関連UIを表示させることもできる。

ステップ 3:skipWaiting を無効にする(オプション)。

Brazeサービスワーカーファイルは、インストール時に自動的にskipWaiting 。この機能を無効にしたい場合は、Brazeをインポートした後、サービスワーカーファイルに以下のコードを追加する:

ユーザーの配信停止

ユーザーの配信停止は、braze.unregisterPush()

代替ドメイン

Web プッシュを統合するには、ドメインがセキュアである必要があります。一般にこれは、httpslocalhost、および W3C プッシュ標準で定義されているその他の例外である必要があります。また、ドメインのルートにサービスワーカーを登録するか、少なくともそのファイルの HTTP ヘッダーを制御できる必要もあります。この記事では、代替ドメイン上で Braze Web プッシュを統合する方法について説明します。

ユースケース

W3Cプッシュ標準に概説されている基準をすべて満たすことができない場合は、この方法を使用して、代わりにWebサイトにプッシュ・プロンプト・ダイアログを追加することができる。これは、http Webサイトやブラウザ拡張機能のポップアップがプッシュプロンプトの表示を妨げている場合に、ユーザーにオプトインさせたい場合に役立つ。

考慮事項

Web上の多くの回避策がそうであるように、ブラウザは絶えず進化しており、この方法は将来実行不可能になる可能性があることを覚えておいてほしい。続行する前に、以下を確認する:

  • あなたは別のセキュアドメイン(https:// )を所有し、そのドメインにサービスワーカーを登録する権限を持つ。
  • ユーザーはWebサイトにログインし、プッシュトークンが正しいプロファイルに一致することを確認する。

代替プッシュ・ドメインの設定

次の例をわかりやすくするために、訪問者を http://insecure.com でのプッシュに登録させることを目的として、http://insecure.comhttps://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 ドメインで、現在のユーザーのプッシュ登録に関する情報を (プッシュが_実際に_登録されている) セキュアドメインに問い合わせます。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<!-- 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を参照してください。
プッシュプライマー プッシュプライマーCampaignでは、アプリのデバイスでプッシュ通知を有効にするようユーザーに促します。これは、ノーコードプッシュプライマーを使用して、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をプロジェクトに追加する

まず、FirebaseをAndroidプロジェクトに追加します。手順については、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を有効にします。

有効化されたFirebase Cloud Messaging API

ステップ4: サービスアカウントを作成する

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

プロジェクトのサービスアカウントのホームページで「サービスアカウントを作成」が強調表示されている。

サービスアカウント名、ID、説明を入力して、作成して続行を選択します。

「サービスアカウントの詳細」のフォーム。

ロールフィールドで、ロールのリストからFirebase Cloud Messaging API管理者を見つけて選択します。アクセスをより制限する場合は、cloudmessaging.messages.create権限を持つカスタムロールを作成し、代わりにリストからそれを選択します。完了したら、完了を選択します。

「このサービスアカウントにプロジェクトへのアクセスを許可する」フォームで、「Firebase Cloud Messaging API管理者」がロールとして選択されている。

ステップ5: JSON認証情報を生成する

次に、FCMサービスアカウントのJSON認証情報を生成します。Google Cloud IAM & Adminでサービスアカウントに移動し、プロジェクトを選択します。先ほど作成したFCMサービスアカウントを見つけて、 アクション > キーの管理を選択します。

プロジェクトのサービスアカウントのホームページで「アクション」メニューが開いている状態。

キーの追加 > 新しいキーを作成を選択します。

「キーを追加」メニューが開いている状態で選択されたサービスアカウント。

JSONを選択し、作成を選択します。FCMプロジェクトIDとは異なるGoogle CloudプロジェクトIDを使用してサービスアカウントを作成した場合は、JSONファイルでproject_idに割り当てられた値を手動で更新する必要があります。

キーをどこにダウンロードしたかを覚えておいてください—次のステップで必要になります。

「JSON」を選択した状態で秘密キーを作成するフォーム。

ステップ6: JSON認証情報をBrazeにアップロードする

次に、JSON認証情報をBrazeダッシュボードにアップロードします。Brazeで、 設定 > アプリ設定を選択します。

「設定」メニューがBrazeで開かれ、「アプリ設定」がハイライト表示されている。

Androidアプリのプッシュ通知の設定Firebaseを選択し、JSONファイルのアップロードを選択して、先ほど生成した認証情報をアップロードします。完了したら、保存を選択します。

プッシュプロバイダーとして「Firebase」が選択された「プッシュ通知の設定」フォーム。

ステップ7: トークンの自動登録を設定する

ユーザーがプッシュ通知をオプトインした場合、アプリはそのユーザーにプッシュ通知を送信する前に、ユーザーのデバイス上でFCMトークンを生成する必要があります。Braze SDKを使用すると、プロジェクトのBraze設定ファイルで各ユーザーのデバイスのFCMトークン自動登録を有効にできます。

まずFirebase Consoleに移動し、プロジェクトを開いて、 設定 > プロジェクト設定を選択します。

「設定」メニューが開いているFirebaseプロジェクト。

Cloud Messagingを選択し、Firebase Cloud Messaging API (V1)送信者IDフィールドの数字をコピーします。

Firebaseプロジェクトの「Cloud Messaging」ページで「送信者ID」が強調表示されている。

次に、Android Studioプロジェクトを開き、Firebase送信者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)

ステップ8: アプリケーションクラスの自動リクエストを削除する

サイレントプッシュ通知を送信するたびにBrazeが不要なネットワークリクエストをトリガーするのを防ぐには、ApplicationクラスのonCreate()メソッドで設定されている自動ネットワークリクエストをすべて削除してください。詳細については、Android開発者リファレンス: Applicationを参照してください。

通知を表示する

ステップ1: Braze Firebaseメッセージングサービスを登録する

新規、既存、またはBraze以外のFirebaseメッセージングサービスを作成できます。特定のニーズに最も合うものを選択してください。

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を参照してください。

Firebase Messaging Serviceがすでに登録されている場合は、RemoteMessageオブジェクトをBrazeFirebaseMessagingService.handleBrazeRemoteMessage()経由でBrazeに渡すことができます。このメソッドはRemoteMessageオブジェクトがBrazeから発信された場合にのみ通知を表示し、そうでない場合は安全に無視します。

1
2
3
4
5
6
7
8
9
10
11
12
13
public class MyFirebaseMessagingService extends FirebaseMessagingService {
  @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
class MyFirebaseMessagingService : FirebaseMessagingService() {
  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.
    }
  }
}

使用したい別のFirebase Messaging Serviceがある場合は、アプリケーションが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は小さな通知アイコンの透明領域を除くすべての部分をモノクロに変換します。

正しく表示される通知用小さなアイコンアセットを作成するには:

  • 画像から白以外のすべての色を削除します。
  • アセットの他のすべての非白色領域は透明にする必要があります。

次の図の大小アイコンは、適切にデザインされたアイコンの例です。

大きなアイコンの隅に小さなアイコンが表示され、その横に「Hey I'm on my way to the bar but..」というメッセージが表示されている

ステップ3: 通知アイコンを設定する

braze.xmlでアイコンを指定する

Brazeでは、braze.xml内でdrawableリソースを指定することで、通知アイコンを設定できます。

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>

プッシュ通知がクリックされたときにBrazeがアプリとディープリンクを自動的に開くようにするには、braze.xmlcom_braze_handle_push_deep_links_automaticallytrueに設定します。

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はペイロードがプッシュ通知かどうかを判断し、該当する場合は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ダッシュボードではプッシュ通知のCampaignやCanvasesで、通知がクリックされたときに開くディープリンクまたはWeb URLを設定できます。

Brazeダッシュボードの「クリック時の動作」設定で、ドロップダウンから「アプリケーションへのディープリンク」を選択している状態。

バックスタック動作のカスタマイズ

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プッシュオブジェクトパラメータを使用してAPIキャンペーンを更新し、notification_channelフィールドを含めます。このフィールドが指定されていない場合、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ダッシュボードのCampaignsページにアクセスし、プッシュ通知Campaignを作成します。Android Pushを選択し、メッセージをデザインします。次に、作成画面で目のアイコンをクリックしてテスト送信者を取得します。現在のユーザーのユーザーIDまたはメールアドレスを入力し、Send Testをクリックします。デバイスにプッシュが表示されます。

Brazeダッシュボード内のプッシュ通知Campaignの「テスト」タブ。

プッシュ表示に関する問題については、トラブルシューティングガイドを参照してください。

分析のテスト

この時点で、プッシュ通知の開封に関する分析ログも記録されているはずです。届いた通知をクリックすると、Campaign結果ページの直接開封数の値が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コンソール > APIとサービス > Firebase Cloud Messaging API > クォータとシステム制限に移動するか、FCM APIクォータのページにアクセスしてください。

ベストプラクティス

これらのエラー発生量を低く抑えるために、以下のベストプラクティスを推奨します。

FCMにレート制限の引き上げをリクエストする

FCMのレート制限の引き上げをリクエストするには、Firebaseサポートに直接連絡するか、以下の手順を実行します。

  1. FCM APIのクォータページに移動します。
  2. 1分あたりのリクエスト送信クォータを確認します。
  3. クォータの編集を選択します。
  4. 新しい値を入力し、リクエストを送信します。

ワークスペースのレート制限を適用する

Androidプッシュ通知にワークスペースのレート制限を適用できます。これにより、送信メッセージの配信レートを調整できます。詳細については、ワークスペースのメッセージングレート制限を参照してください。

レート制限

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

プッシュ通知の設定

ステップ1: APNsトークンをアップロードする

Brazeを使ってiOSプッシュ通知を送信する前に、Appleの開発者向けドキュメントに記載されているように、.p8 プッシュ通知ファイルをアップロードする必要がある:

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

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

Xcodeで、メインアプリターゲットのSigning & Capabilitiesセクションに移動し、プッシュ通知機能を追加します。

Xcodeプロジェクト内の「Signing & Capabilities」セクション。

ステップ3: プッシュ処理を設定する

Swift SDKを使って、Brazeから受信したリモート通知の処理を自動化できます。これがプッシュ通知を扱う最も簡単な方法であり、推奨される処理方法です。

ステップ3.1: プッシュプロパティでオートメーションを有効にする

自動プッシュ統合を有効にするには、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に次のことが指示されます。

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

ステップ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を参照してください。

ステップ3.1: APNsでプッシュ通知に登録する

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

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

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

1
2
3
4
5
6
7
8
9
10
11
application.registerForRemoteNotifications()
let center = UNUserNotificationCenter.current()
center.setNotificationCategories(Braze.Notifications.categories)
center.delegate = self
var options: UNAuthorizationOptions = [.alert, .sound, .badge]
if #available(iOS 12.0, *) {
  options = UNAuthorizationOptions(rawValue: options.rawValue | UNAuthorizationOptions.provisional.rawValue)
}
center.requestAuthorization(options: options) { granted, error in
  print("Notification authorization, granted: \(granted), error: \(String(describing: error))")
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
[application registerForRemoteNotifications];
UNUserNotificationCenter *center = UNUserNotificationCenter.currentNotificationCenter;
[center setNotificationCategories:BRZNotifications.categories];
center.delegate = self;
UNAuthorizationOptions options = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
if (@available(iOS 12.0, *)) {
  options = options | UNAuthorizationOptionProvisional;
}
[center requestAuthorizationWithOptions:options
                      completionHandler:^(BOOL granted, NSError *_Nullable error) {
                        NSLog(@"Notification authorization, granted: %d, "
                              @"error: %@)",
                              granted, error);
}];

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

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

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

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

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

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

ステップ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)'")
}
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);
}];

フォアグラウンド通知の処理

デフォルトでは、アプリがフォアグラウンドにあるときにプッシュ通知が届いても、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リポジトリ内のプッシュ通知手動統合サンプルを参照してください。

プッシュプライマー

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

ダイナミックAPNsゲートウェイ管理

ダイナミックApple Push Notification service (APNs) ゲートウェイ管理は、適切なAPNs環境を自動的に検出することで、iOSプッシュ通知の信頼性と効率性を高めます。以前は、プッシュ通知用にAPNs環境(開発環境または本番環境)を手動で選択する必要があり、ゲートウェイ設定の誤りや配信失敗、BadDeviceToken エラーが発生することがありました。

ダイナミックAPNsゲートウェイ管理により、以下のメリットがあります。

  • 信頼性の向上: 通知は常に正しいAPNs環境に配信されるため、配信失敗が減少します。
  • 設定の簡素化: APNsゲートウェイの設定を手動で管理する必要がなくなります。
  • エラー耐性: 無効または欠落したゲートウェイ値は適切に処理され、サービスが中断されることはありません。

前提条件

BrazeはiOS向けプッシュ通知のダイナミックAPNsゲートウェイ管理をサポートしています。以下のSDKバージョン要件を満たす必要があります。

仕組み

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テレビ用プッシュ通知について

Android TV プッシュ統合は、ネイティブ機能ではありませんが、Braze Android SDK と Firebase Cloud Messaging を利用して Android TV のプッシュトークンを登録することで使用可能になります。ただし、通知ペイロードを受信した後にそれを表示する UI を構築する必要があります。

前提条件

この機能を使用するには、次の手順を実行する必要があります。

プッシュ通知のセットアップ

Androidテレビのプッシュ通知を設定するには:

  1. アプリでカスタムビューを作成して、通知を表示します。
  2. カスタム通知ファクトリーを作成します。これにより、デフォルトの SDK 動作がオーバーライドされ、通知を手動で表示できるようになります。null を返すことで SDK の処理が妨げられ、通知を表示するためにカスタムコードが必要になります。これらの手順が完了したら、Android TV へのプッシュの送信を開始できます。

  3. (オプション)クリック分析を効果的に追跡するには、クリック分析 “トラッキングを設定します。これを行うには、Braze プッシュ通知の開封および受信インテントをリッスンするプッシュコールバックを作成します。

Androidテレビプッシュ通知のテスト

プッシュ実装が成功したかどうかをテストするには、通常 Android デバイスで行うように、Braze ダッシュボードから通知を送信します。

  • アプリケーションが閉じている場合:プッシュメッセージでは、画面にトースト通知が表示されます。
  • アプリケーションが開いている場合:独自にホストしている UI でメッセージを表示できます。Android Mobile SDK のアプリ内メッセージの UI スタイルに従うことをお勧めします。

ベストプラクティス

Braze を使用するマーケター s の場合、Android TV へのキャンペーンの起動は、携帯アプリs をAndroidするプッシュの起動と同じです。これらのデバイスのみをターゲットにするには、セグメンテーションで Android TV アプリを選択することをお勧めします。

FCM によって返される、配信およびクリックされた応答は、モバイル Android デバイスと同じ規則に従います。そのため、エラーがあれば、メッセージアクティビティログに表示されます。

前提条件

この機能を使う前に、Cordova Braze SDKを統合する必要がある。 SDKを統合すると、基本的なプッシュ通知機能はデフォルトでイネーブルメントされる。リッチプッシュ通知とプッシュストーリーを使用するには、それぞれ個別に設定する必要がある。iOSのプッシュ通知を利用するには、有効なプッシュ証明書もアップロードする必要がある。

プッシュディープリンクのイネーブルメント

デフォルトでは、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プッシュ通知統合ガイドの以下のステップを参照してください。

  1. Firebaseをプロジェクトに追加します
  2. Cloud Messagingを依存関係に追加します
  3. サービスアカウントを作成します
  4. JSON認証情報を生成します
  5. JSON認証情報をBrazeにアップロードします

ステップ 1.2: Google Sender IDを取得する

まずFirebase Consoleに移動し、プロジェクトを開いて、 Settings > Project settingsを選択します。

「Settings」メニューが開かれたFirebaseプロジェクト。

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

Firebaseプロジェクトの「Cloud Messaging」ページで「Sender ID」がハイライトされている。

ステップ 1.3: braze.xmlを更新する

braze.xmlファイルに以下を追加します。FIREBASE_SENDER_IDを、先ほどコピーした送信者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プッシュ通知サービス(APNs)証明書を生成し、Brazeダッシュボードにアップロードします。詳細な手順については、APNs証明書のアップロードを参照してください。

ステップ 1.2: アプリにプッシュ通知サポートを追加する

ネイティブiOS統合ガイドの手順に従います。

ステップ 2: プッシュ通知イベントをリッスンする(オプション)

Brazeが検出して処理したプッシュ通知イベントをリッスンするには、subscribeToPushNotificationEvents()を呼び出し、実行する引数を渡します。

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();
プッシュ通知イベントフィールド

プッシュ通知フィールドの完全なリストについては、以下の表を参照してください。

フィールド名 タイプ 説明
payloadType 文字列 通知ペイロードのタイプを指定します。Braze Flutter SDKから送信される2つの値は、push_openedpush_receivedです。iOSではpush_openedイベントのみがサポートされています。
url 文字列 通知によって開かれたURLを指定します。
useWebview ブール値 trueの場合、URLはアプリ内のモーダルウェブビューで開かれます。falseの場合、URLはデバイスのブラウザーで開かれます。
title 文字列 通知のタイトルを表します。
body 文字列 通知の本文またはコンテンツテキストを表します。
summaryText 文字列 通知の要約テキストを表します。これはiOSではsubtitleからマッピングされます。
badgeCount 数値 通知のバッジカウントを表します。
timestamp 数値 ペイロードがアプリケーションによって受信された時刻を表します。
isSilent ブール値 trueの場合、ペイロードはサイレントに受信されます。Androidのサイレントプッシュ通知の送信の詳細については、Androidでのサイレントプッシュ通知を参照してください。iOSのサイレントプッシュ通知の送信の詳細については、iOSでのサイレントプッシュ通知を参照してください。
isBrazeInternal ブール値 フィーチャーフラグの同期やアンインストール追跡などの内部SDK機能に対して通知ペイロードが送信された場合、これはtrueになります。ペイロードはユーザーに対してサイレントに受信されます。
imageUrl 文字列 通知画像に関連するURLを指定します。
brazeProperties オブジェクト Campaignに関連するBrazeプロパティ(キーと値のペア)を表します。
ios オブジェクト iOS固有のフィールドを表します。
android オブジェクト Android固有のフィールドを表します。

ステップ 3: プッシュ通知の表示をテストする

ネイティブレイヤーでプッシュ通知を設定した後、統合をテストするには:

  1. Flutterアプリケーションでアクティブユーザーを設定します。これを行うには、braze.changeUser('your-user-id')を呼び出してプラグインを初期化します。
  2. Campaignsに移動し、新しいプッシュ通知Campaignを作成します。テストしたいプラットフォームを選択します。
  3. テスト通知を作成し、Testタブに移動します。テストユーザーと同じuser-idを追加し、Send Testをクリックします。
  4. まもなくデバイスに通知が届くはずです。通知が表示されない場合は、通知センターで確認するか、設定を更新する必要がある場合があります。

前提条件

この機能を使用する前に、Android Braze SDKを統合する必要がある。

プッシュ通知の設定

Huawei 製の新しいスマートフォンには、プッシュ配信に使用されるサービス、Huawei Mobile Services (HMS) が、Google の Firebase Cloud Messaging (FCM) の代わりに搭載されています。

ステップ 1: Huawei 開発者アカウントに登録する

始める前に、Huawei 開発者アカウントへの登録と設定が必要です。Huawei アカウントで、[My Projects] > [Project Settings] > [App Information] に移動し、App IDApp secret を書き留めます。

ステップ 2:Braze ダッシュボードで新しい Huawei アプリを作成する

Braze ダッシュボードで、[設定] ナビゲーションの下にある [アプリ設定] に移動します。

[+ アプリ] をクリックし、名前 (My Huawei App など) を入力し、プラットフォームとして Android を選択します。

新しい Braze アプリを作成したら、プッシュ通知設定を見つけて、プッシュプロバイダーとして Huawei を選択します。次に、Huawei Client SecretHuawei 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:テストプッシュを送信する

[Test] タブで、changeUser(USER_ID_STRING) method を使ってアプリに設定したユーザーIDを入力し、[Send Test] をクリックしてテストプッシュを送信する。

キャンペーン作成コンポーザーのテストタブを見ると、ユーザー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を選択します。

「Settings」メニューが開いているFirebaseプロジェクト。

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

Firebaseプロジェクトの「Cloud Messaging」ページで「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 を使用します。

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_openedpush_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 オブジェクト Campaignに関連するBrazeプロパティ(キーと値のペア)を表します。
ios オブジェクト iOS固有のフィールドを表します。
android オブジェクト Android固有のフィールドを表します。

ステップ3:ディープリンクを有効にする(オプション)

Reactコンポーネント内でプッシュ通知がクリックされた際にBrazeがディープリンクを処理できるようにするには、まずReact Native Linkingライブラリーで説明されているステップを実装するか、任意のソリューションで実装してください。次に、以下の追加ステップに従ってください。

ディープリンクの詳細については、FAQの記事を参照してください。

Braze Expoプラグインを使用している場合、app.jsonandroidHandlePushDeepLinksAutomaticallytrue に設定することで、プッシュ通知のディープリンクを自動的に処理できます。

代わりにディープリンクを手動で処理するには、ネイティブAndroidのドキュメントを参照してください:ディープリンクを追加する

ステップ3.1:アプリ起動時にプッシュ通知のペイロードを保存する

メインアクティビティの onCreate() メソッドに populateInitialPushPayloadFromIntent を追加します。React Nativeが初期化される前にこれを呼び出して、初期のIntentデータをキャプチャする必要があります。以下に例を示します。

1
2
3
4
override fun onCreate(savedInstanceState: Bundle?) {
  BrazeReactUtils.populateInitialPushPayloadFromIntent(intent)
  super.onCreate(savedInstanceState)
}

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 });
  }
});

これには、カスタムURLスキームの登録と AppDelegate でのURLハンドラーの実装が含まれます。完全なセットアップ手順については、ネイティブiOSドキュメントのディープリンクの処理を参照してください。

ステップ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 });
  }
});

ユニバーサルリンクのサポートを有効にするには、指定された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;
}

統合の例については、こちらのサンプルアプリを参照してください。

ステップ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);
  }
});

ベアワークフロー統合については、代わりにネイティブのiOSおよびAndroidのアプローチに従ってください。

ステップ5:テストのプッシュ通知を送信する

この時点で、デバイスに通知を送信できるはずです。次のステップに従って、プッシュ統合をテストしてください。

  1. React Nativeアプリケーションで Braze.changeUserId('your-user-id') メソッドを呼び出して、アクティブユーザーを設定します。
  2. Campaignsに移動し、新しいプッシュ通知Campaignを作成します。テストしたいプラットフォームを選択します。
  3. テスト通知を作成し、Testタブに移動します。テストユーザーと同じ user-id を追加し、Send Testをクリックします。まもなくデバイスに通知が届くはずです。

Brazeのプッシュ通知Campaignでは、自分のユーザー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でコード署名を管理するためにプロジェクトがどのように構成されているかによって、このステップにアプローチする方法は複数あります。

一つの方法は、Expoのアプリ拡張ドキュメントに従って、app.json ファイルで appExtensions 設定を使用することです。あるいは、Expoのローカル認証情報ドキュメントに従って、credentials.json ファイルで multitarget 設定を行うこともできます。

トラブルシューティング

以下は、Braze React Native SDKおよびExpoプラグインとのプッシュ通知統合における一般的なトラブルシューティングステップです。

プッシュ通知が機能しなくなった

Expoプラグイン経由のプッシュ通知が機能しなくなった場合:

  1. Braze SDKがまだセッションを追跡しているか確認してください。
  2. SDKが明示的または暗黙的な wipeData 呼び出しによって無効化されていないことを確認してください。
  3. Expoや関連ライブラリーの最近のアップグレードを確認してください。Brazeの設定と競合する可能性があります。
  4. 最近追加されたプロジェクトの依存関係を確認し、それらが既存のプッシュ通知デリゲートメソッドを手動で上書きしていないかチェックしてください。

デバイストークンがBrazeに登録されない

デバイストークンがBrazeに登録されない場合、まずプッシュ通知が機能しなくなったを確認してください。

問題が解決しない場合、別の依存関係がBrazeのプッシュ通知設定に干渉している可能性があります。その依存関係を削除するか、代わりに手動で Braze.registerPushToken を呼び出すことを試してください。

移行後にプッシュ通知からのディープリンクが開かなくなった場合は、以下を確認してください:

  1. アップグレードしたアプリでReact Native Linkingの設定がまだ有効であることを確認してください。
  2. iOSネイティブ統合の場合、populateInitialPayloadFromLaunchOptionsBraze.getInitialPushPayload を実装していることを確認してください。これにより、アプリが終了状態から起動された際に、初期プッシュペイロードを取得し、その url をディープリンクハンドラーに渡すことができます。
  3. Braze Expoプラグインを使用している場合、androidHandlePushDeepLinksAutomatically が実装に合わせて正しく設定されていることを確認してください。
  4. 最近追加された依存関係が通知処理やアプリデリゲートの動作を上書きしていないか確認してください。

これらの確認を完了しても問題が解決しない場合は、サポートチケットを開いて、SDKログと再現手順を添付してください。

前提条件

この機能を使用する前に、Web Braze SDKを統合する必要がある。 Web SDK用のプッシュ通知設定する必要がある。iOSおよびiPadOSユーザーにプッシュ通知を送信できるのは、Safari v16.4以降を使用している場合に限られることに注意せよ。

モバイル向けSafariプッシュ通知の設定

ステップ 1: マニフェスト・ファイルを作成する

ウェブ・アプリケーション・マニフェストは、ユーザーのホーム画面にインストールされたときに、ウェブサイトがどのように表示されるかを制御するJSONファイルである。

例えば、App Switcherが使用する背景のテーマカラーやアイコン、ネイティブアプリのようにフルスクリーンでレンダリングするかどうか、アプリをランドスケープモードで開くかポートレートモードで開くかなどを設定できる。

ウェブサイトのルート・ディレクトリに、以下の必須フィールドを含む新しい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",
  }]
}

サポートされるフィールドの全リストはこちらで見ることができる。

ウェブサイトの<head> 要素に、マニフェストファイルがホストされている場所を指す次の<link> タグを追加する。

1
<link rel="manifest" href="/manifest.json" />

ステップ3:サービスワーカーを追加する

Web プッシュ統合ガイドで説明されているように、Web サイトには Braze service-worker ライブラリをインポートするサービスワーカーファイルが必要です。

ステップ4: ホーム画面に追加する

主要なブラウザ(Safari、Chrome、FireFox、Edgeなど)は、いずれも最新版でWeb プッシュ通知をサポートしている。iOSまたはiPadOSでプッシュ通知の権限を求めるには、ユーザーが「共有」>「ホーム画面に追加」を選択して、あなたのWeb サイトをホーム画面に追加する必要がある。ホーム画面に追加機能は、ユーザーがあなたの Web サイトをブックマークできるようにする。これにより、あなたのアイコンがユーザーの貴重なホーム画面スペースに追加されるのだ。

ウェブサイトをブックマークし、ホーム画面に保存するオプションを表示するiPhone

ステップ5:ネイティブのプッシュプロンプトを表示する

アプリがホーム画面に追加された後、ユーザーがアクション(ボタンをクリックするなど)を行った際にプッシュ通知の権限をリクエストできるようになる。これを行うには、requestPushPermission メソッドを使用するか、コードなしのプッシュプライマーのアプリ内メッセージを使用します。

通知を「許可する」か「許可しない」かを尋ねるプッシュ・プロンプトが表示される。

以下はその例です。

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 の設定ドキュメントに従ってください。

ステップ 1.2: Firebaseの認証情報を設定する

Firebase サーバーキーと送信者 ID を Braze ダッシュボードに入力する必要があります。これを行うには、Firebase Developers Console にログインし、Firebase プロジェクトを選択します。次に、Settings の下にある Cloud Messaging を選択し、サーバーキーと送信者 ID をコピーします。

Brazeのアプリ設定ページの設定の管理で Android アプリを選択します。次に、Firebase Cloud Messaging Server Key フィールドに Firebase サーバーキーを入力し、Firebase Cloud Messaging Sender ID フィールドに Firebase 送信者 ID を入力します。

ステップ 1.1: 統合方法を確認する

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

それ以外の場合は、次のステップに進みます。

ステップ 1.1: ADMを有効にする

  1. まだアカウントを作成していない場合は、Amazon Apps & Games Developer Portal でアカウントを作成します。
  2. OAuth 認証情報(クライアント ID とクライアントシークレット)と ADM API キーを取得します。
  3. 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)。

ステップ 2.1: APNsトークンをアップロードする

Brazeを使ってiOSプッシュ通知を送信する前に、Appleの開発者向けドキュメントに記載されているように、.p8 プッシュ通知ファイルをアップロードする必要がある:

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

ステップ 2.2: 自動プッシュを有効にする

Unity エディターで Braze > Braze Configuration の順に移動して、Braze 構成設定を開きます。

Integrate Push With Braze をチェックして、プッシュ通知用にユーザーを自動的に登録し、プッシュトークンをBrazeに渡し、プッシュ開封の分析を追跡し、デフォルトのプッシュ通知処理を利用します。

ステップ 2.3: バックグラウンドプッシュを有効にする(オプション)

プッシュ通知で background mode を有効にする場合は、Enable Background Push をチェックします。これにより、プッシュ通知が到着したときにシステムがアプリケーションを suspended 状態から復帰させ、アプリケーションがプッシュ通知に応答してコンテンツをダウンロードできるようになります。アンインストール追跡機能を使用するには、このオプションをチェックする必要があります。

Unity エディターにBrazeの設定オプションが表示されています。このエディターでは、「Automate Unity iOS integration」、「Integrate push with braze」、および「Enable background push」が有効になっています。

ステップ 2.4: 自動登録を無効にする(オプション)

まだプッシュ通知をオプトインしていないユーザーは、アプリケーションを開くと自動的にプッシュの許可が付与されます。この機能を無効にし、手動でユーザーをプッシュ登録するには、Disable Automatic Push Registration をチェックします。

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

Unity エディターにBrazeの設定オプションが表示されています。このエディターでは、「Automate Unity iOS integration」、「Integrate push with braze」、および「Disable automatic push registration」が有効になっています。

ステップ 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/ ディレクトリに追加します。

次に、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 の下でプッシュ削除リスナーのコールバックメソッドを指定します。

プッシュリスナーの例

次の例では、コールバックメソッド名 PushNotificationReceivedCallbackPushNotificationOpenedCallback、および PushNotificationDeletedCallback をそれぞれ使用して、BrazeCallback ゲームオブジェクトを実装します。

この実装例の図は、前のセクションで述べたBrazeの構成オプションと、C#のコードスニペットを示しています。

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 を指定します。

Unity エディターにBrazeの設定オプションが表示されています。このエディターでは、「Set Push Received Listener」オプションが展開され、「Game Object Name」(AppBoyCallback) と「Callback Method Name」(PushNotificationReceivedCallback) が指定されています。

ステップ 3.2: プッシュ開封リスナーを有効にする

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

Unity エディターにBrazeの設定オプションが表示されています。このエディターでは、「Set Push Opened Listener」オプションが展開され、「Game Object Name」(AppBoyCallback) と「Callback Method Name」(PushNotificationOpenedCallback) が指定されています。

ゲームオブジェクトのリスナーを実行時に設定する必要がある場合は、AppboyBinding.ConfigureListener() を使用し、BrazeUnityMessageType.PUSH_OPENED を指定します。

プッシュリスナーの例

次の例では、コールバックメソッド名 PushNotificationReceivedCallback および PushNotificationOpenedCallback をそれぞれ使用して、AppboyCallback ゲームオブジェクトを実装します。

この実装例の図は、前のセクションで述べたBrazeの構成オプションと、C#のコードスニペットを示しています。

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プッシュ通知アイコンの追加

プロジェクトにプッシュアイコンを追加するには、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:プロジェクトを更新する

  1. AndroidプロジェクトにFirebaseを追加する。
  2. Android プロジェクトの build.gradle に Cloud Messaging ライブラリを追加します。
    1
    
      implementation "google.firebase:firebase-messaging:+"
    

ステップ2:JSON認証情報を作成する

  1. Google Cloud で、Firebase Cloud Messaging API を有効にします。
  2. [サービスアカウント] > [プロジェクト] > [サービスアカウントの作成] の順に選択し、サービスアカウント名、ID、説明を入力します。完了したら、Createを選択して続ける
  3. [ロール] フィールドで、ロールのリストから [Firebase Cloud Messaging API 管理者] を見つけて選択します。
  4. [サービスアカウント] でプロジェクトを選択し、[アクション] > [キーの管理] > [キーの追加] > [新しいキーの作成] の順に選択します。[JSON] を選択し、[作成] を選択します。

ステップ3:JSON認証情報をアップロードする

  1. Braze で、[設定] > [アプリの設定] を選択します。Android アプリの [プッシュ通知設定] で [Firebase] を選択し、[JSON ファイルのアップロード] を選択して、先ほど生成した認証情報をアップロードします。完了したら、[保存] を選択します。
  2. Firebase Consoleにアクセスして、FCMトークンの自動登録を有効にする。プロジェクトを開き、[設定] > [プロジェクト設定] の順に選択します。[Cloud Messaging] を選択し、[Firebase Cloud Messaging API (V1)] で [送信者 ID] フィールドの数字をコピーします。
  3. 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>

ステップ 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 ドキュメントを参照してください。

New Stuff!