コンテンツにスキップ

詳細ログの読み取り

このページでは、Braze SDKからの詳細ログ出力を解釈する方法について説明します。各メッセージングチャネルについて、確認すべき主要なログエントリ、その意味、および注意すべき一般的な問題を紹介します。

始める前に、詳細ログの有効化が完了していることと、お使いのプラットフォームでログを収集する方法を把握していることを確認してください。

セッション

セッションはBraze分析とメッセージ配信の基盤です。アプリ内メッセージやContent Cardsなど、多くのメッセージング機能は、有効なセッションが開始されてから動作します。セッションが正しく記録されていない場合は、まずこの問題を調査してください。セッショントラッキングの有効化について詳しくは、「ステップ5: ユーザーセッショントラッキングを有効にする」を参照してください。

主要なログエントリ

セッション開始:

Started user session (id: <SESSION_ID>)

セッション終了:

Ended user session (id: <SESSION_ID>, duration: <DURATION>s)
Logged event:
- userId: <USER_ID>
- sessionId: <SESSION_ID>
- data: sessionEnd(duration: <DURATION>)

セッション開始:

次のエントリを探してください:

New session created with ID: <SESSION_ID>
Session start event for new session received
Completed the openSession call
Opened session with activity: <ACTIVITY_NAME>

設定済みのBrazeエンドポイント(例: sdk.iad-01.braze.com)へのネットワークリクエストをフィルタリングして、セッション開始(ss)イベントを確認します。

セッション終了:

Closed session with activity: <ACTIVITY_NAME>
Closed session with session ID: <SESSION_ID>
Requesting data flush on internal session close flush timer.

確認事項

  • アプリ起動時にセッション開始ログが表示されることを確認してください。
  • セッション開始が表示されない場合は、SDKが正しく初期化されていること、および openSession(Android)が呼び出されていることを確認してください。
  • Androidでは、Brazeエンドポイントへのネットワークリクエストが送信されていることを確認してください。表示されない場合は、APIキーとエンドポイントの設定を確認してください。

プッシュ通知

プッシュ通知ログは、デバイストークンが登録されているか、通知が配信されているか、クリックイベントがトラッキングされているかを確認するのに役立ちます。

トークン登録

セッションが開始されると、SDKはデバイスのプッシュトークンをBrazeに登録します。

Updated push notification authorization:
- authorization: authorized

Received remote notifications device token: <PUSH_TOKEN>

設定済みのBrazeエンドポイント(例: sdk.iad-01.braze.com)へのリクエストをフィルターし、リクエストボディの属性で push_token を探します。

"attributes": [
  {
    "push_token": "<PUSH_TOKEN>",
    "user_id": "<USER_ID>"
  }
]

デバイス情報に以下が含まれていることも確認します。

"device": {
  "ios_push_auth": "authorized",
  "remote_notification_enabled": 1
}

FCM登録ログを探します。

Registering for Firebase Cloud Messaging token using sender id: <SENDER_ID>

以下を確認します。

  • com_braze_firebase_cloud_messaging_registration_enabled が true であること。
  • FCMの送信者IDがFirebaseプロジェクトと一致していること。

よくあるエラーは SENDER_ID_MISMATCH です。これは、設定された送信者IDがFirebaseプロジェクトと一致していないことを意味します。

確認すべきポイント

  • push_token がリクエストボディに含まれていない場合、トークンが取得されていません。アプリの設定でプッシュのセットアップを確認してください。
  • ios_push_auth が denied または provisional と表示される場合、ユーザーは完全なプッシュ許可を付与していません。
  • Androidで SENDER_ID_MISMATCH が表示される場合は、FCMの送信者IDをFirebaseプロジェクトに合わせて更新してください。

プッシュの配信とクリック

プッシュ通知がタップされると、SDKは処理イベントとクリックイベントを記録します。

Processing push notification:
- date: <TIMESTAMP>
- silent: false
- userInfo: {
  "ab": { ... },
  "ab_uri": "<DEEP_LINK_OR_URL>",
  "aps": {
    "alert": {
      "body": "<MESSAGE_BODY>",
      "title": "<MESSAGE_TITLE>"
    }
  }
}

続いてクリックイベントが記録されます。

Logged event:
- userId: <USER_ID>
- sessionId: <SESSION_ID>
- data: pushClick(campaignId: ...)

プッシュにディープリンクが含まれている場合は、以下も表示されます。

Opening '<URL>':
- channel: notification
- useWebView: false
- isUniversalLink: false
BrazeFirebaseMessagingService: Got Remote Message from FCM

続いてプッシュペイロードと表示ログが記録されます。ディープリンクについては、Deep Link Delegateまたは UriAction エントリを確認してください。

確認すべきポイント

  • プッシュペイロードに期待される title、body、およびディープリンク(ab_uri)が含まれていることを確認します。
  • タップ後に pushClick イベントが記録されていることを確認します。
  • クリックイベントが記録されていない場合は、アプリのデリゲートまたは通知ハンドラーがプッシュイベントをBraze SDKに正しく転送しているか確認してください。

アプリ内メッセージ

アプリ内メッセージのログでは、サーバーからの配信、イベントに基づくトリガー、表示、インプレッションの記録、クリックのトラッキングなど、ライフサイクル全体を確認できます。

メッセージの配信

ユーザーがセッションを開始し、アプリ内メッセージの対象となった場合、SDKはサーバーからメッセージペイロードを受信します。

アプリ内メッセージデータを含む、設定済みのBrazeエンドポイント(例:sdk.iad-01.braze.com)からのレスポンスをフィルタリングします。

レスポンスボディには、以下のようなメッセージペイロードが含まれます。

"templated_message": {
  "data": {
    "message": "...",
    "type": "HTML",
    "message_close": "SWIPE",
    "trigger_id": "<TRIGGER_ID>"
  },
  "type": "inapp"
}

トリガーイベントの一致ログを確認します。

Triggering action: <CAMPAIGN_BSON_ID>

これにより、アプリ内メッセージがトリガーイベントに一致したことが確認できます。

メッセージの表示とインプレッション

In-app message ready for display:
- triggerId: (campaignId: <CAMPAIGN_ID>, ...)
- extras: { ... }

続いてインプレッションログが記録されます。

Logged event:
- userId: <USER_ID>
- sessionId: <SESSION_ID>
- data: inAppMessageImpression(triggerIds: [...])
handleExistingInAppMessagesInStackWithDelegate:: Displaying in-app message

クリックとボタンイベント

ユーザーがボタンをタップするか、メッセージを閉じた場合:

Logged event:
- userId: <USER_ID>
- sessionId: <SESSION_ID>
- data: inAppMessageButtonClick(triggerIds: [...], buttonId: "<BUTTON_ID>")

一致するトリガーメッセージが他にない場合は、以下も表示されます。

No matching trigger for event.

これは、そのイベントに対して追加のアプリ内メッセージが設定されていない場合の正常な動作です。

設定済みのBrazeエンドポイント(例:sdk.iad-01.braze.com)へのリクエストをフィルタリングし、リクエストボディにsbc(ボタンクリック)またはsi(インプレッション)という名前のイベントがあるか確認します。

確認事項

  • アプリ内メッセージが表示されない場合は、先にセッション開始が記録されていることを確認してください。
  • 設定済みのBrazeエンドポイントからのレスポンスをフィルタリングして、メッセージペイロードが配信されたことを確認してください。
  • インプレッションが記録されない場合は、ログ記録を抑制するカスタムinAppMessageDisplayデリゲートを実装していないか確認してください。
  • 「No matching trigger for event」と表示される場合、これは正常であり、そのイベントに対して追加のアプリ内メッセージが設定されていないことを示しています。

Content Cards

Content Cardsのログは、カードがデバイスに同期され、ユーザーに表示され、インタラクション(インプレッション、クリック、非表示操作)がトラッキングされていることを確認するのに役立ちます。

カード同期

Content Cardsはセッション開始時と手動更新が要求された時に同期されます。セッションが記録されていない場合、Content Cardsは表示されません。

設定済みのBrazeエンドポイント(例:sdk.iad-01.braze.com)からの応答で、カードデータを含むものをフィルターしてください。

レスポンス本体にはカードデータが含まれており、以下のような内容です:

"cards": [
  {
    "id": "<CARD_ID>",
    "tt": "<CARD_TITLE>",
    "ds": "<CARD_DESCRIPTION>",
    "tp": "short_news",
    "v": 0,
    "cl": 0,
    "p": 1
  }
]

主要なフィールド:

  • v(閲覧済み):0 = 未閲覧、1 = 閲覧済み
  • cl(クリック済み):0 = 未クリック、1 = クリック済み
  • p(固定済み):0 = 固定されていない、1 = 固定されている
  • tp(タイプ):short_news、captioned_image、classicなど
Requesting content cards sync.

続いて、設定済みのBrazeエンドポイント(例:sdk.iad-01.braze.com)へのPOSTリクエストが送信されます。このリクエストにはユーザー情報とデバイス情報が含まれます。

インプレッション、クリック、非表示

インプレッション:

Logged event:
- userId: <USER_ID>
- sessionId: <SESSION_ID>
- data: contentCardImpression(cardIds: [...])

クリック:

Logged event:
- userId: <USER_ID>
- sessionId: <SESSION_ID>
- data: contentCardClick(cardIds: [...])

カードにURLがある場合、以下も表示されます:

Opening '<URL>':
- channel: contentCard
- useWebView: true

非表示:

Logged event:
- userId: <USER_ID>
- sessionId: <SESSION_ID>
- data: contentCardDismissed(cardIds: [...])

設定済みのBrazeエンドポイント(例:sdk.iad-01.braze.com)へのリクエストをフィルターし、リクエスト本体内のイベント名を確認してください:

  • cci — Content Cardsのインプレッション
  • ccc — Content Cardsのクリック
  • ccd — Content Cardsの非表示

確認すべき事項

  • カードが表示されない:セッション開始が記録されていることを確認してください。Content Cardsは同期するためにアクティブなセッションが必要です。
  • 新規ユーザーにカードが表示されない:新規ユーザーは初回セッションではContent Cardsが表示されない場合があります。次のセッションまでお待ちください。これは想定される動作です。
  • カードがサイズ制限を超えている:2KBを超えるContent Cardsは表示されず、メッセージは中断されます。
  • キャンペーンを停止した後もカードが残る:キャンペーンを停止した後に同期が完了したことを確認してください。同期が成功すると、Content Cardsはデバイスから削除されます。キャンペーンを停止する際は、ユーザーフィードからアクティブなカードを削除するオプションが選択されていることを確認してください。

ディープリンクのログは、プッシュ通知、アプリ内メッセージ、Content Cardsにわたって表示されます。ログの構造は、ソースチャネルに関係なく一貫しています。

SDKがディープリンクを処理する際のログ:

Opening '<DEEP_LINK_URL>':
- channel: <SOURCE_CHANNEL>
- useWebView: false
- isUniversalLink: false
- extras: { ... }

<SOURCE_CHANNEL> は notification、inAppMessage、contentCard のいずれかです。

ディープリンクについては、Logcatで Deep Link Delegate または UriAction のエントリを探してください。ディープリンクの解決を個別にテストするには、以下のコマンドを実行します:

adb shell am start -W -a android.intent.action.VIEW -d "<YOUR_DEEP_LINK>" "<YOUR_PACKAGE_NAME>"

これにより、Braze SDKの外部でディープリンクが正しく解決されるかどうかを確認できます。

確認すべきポイント

  • ディープリンクURLがキャンペーンで設定した内容と一致していることを確認します。
  • ディープリンクが1つのチャネル(例: プッシュ)では動作するが、別のチャネル(例: Content Cards)では動作しない場合、ディープリンクの処理実装がすべてのチャネルをサポートしているか確認してください。
  • iOSでは、ユニバーサルリンクには追加の処理が必要です。Brazeチャネルからユニバーサルリンクが機能しない場合、アプリがURL処理のために BrazeDelegate プロトコルを実装しているか確認してください。
  • Androidでは、カスタムハンドラーを使用している場合、自動ディープリンク処理が無効になっているか確認してください。そうしないと、デフォルトのハンドラーが実装と競合する可能性があります。

ユーザー識別

ユーザーが external_id で識別されると、SDKはユーザー変更イベントをログに記録します。

changeUser called with: <EXTERNAL_ID>

知っておくべき重要なこと:

  • ユーザーがログインしたらすぐに changeUser を呼び出してください。早ければ早いほど良いです。
  • ユーザーがログアウトした場合、changeUser を呼び出して匿名ユーザーに戻す方法はありません。
  • 匿名ユーザーを望まない場合は、セッション開始時またはアプリ起動時に changeUser を呼び出してください。

設定済みのBrazeエンドポイント(例: sdk.iad-01.braze.com)へのリクエストをフィルターし、リクエストボディでユーザー識別情報を確認します:

"user_id": "<EXTERNAL_ID>"

ネットワークリクエスト

詳細ログには、SDKとBrazeサーバー間の通信に関するHTTPリクエストおよびレスポンスの完全な詳細が含まれています。これらは接続の問題を診断する際に役立ちます。

リクエスト構造

設定済みのBrazeエンドポイント(例: sdk.iad-01.braze.com)へのリクエストをフィルタリングします。リクエスト構造には以下が含まれます:

[http] request POST: <YOUR_BRAZE_ENDPOINT>
- Headers:
  - Content-Type: application/json
  - X-Braze-Api-Key: <REDACTED>
  - X-Braze-Req-Attempt: 1
  - X-Braze-Req-Tokens-Remaining: <COUNT>
- Body: { ... }
Making request(id = <REQUEST_ID>) to <YOUR_BRAZE_ENDPOINT>

確認すべきポイント

  • APIキー: XBraze-ApiKey がワークスペースのAPIキーと一致していることを確認します。
  • エンドポイント: リクエストURLが設定済みのSDKエンドポイントと一致していることを確認します。
  • リトライ回数: XBraze-Req-Attempt が1より大きい場合、SDKが失敗したリクエストをリトライしていることを示しており、接続の問題がある可能性があります。
  • レート制限: XBraze-Req-Tokens-Remaining は残りのリクエストトークン数を示します。カウントが少ない場合、SDKがレート制限に近づいている可能性があります。
  • リクエストの欠落: Androidでは、セッション開始後にBrazeエンドポイントへのリクエストが表示されない場合、APIキーとエンドポイントの設定を確認してください。

一般的なイベントの略称

詳細ログペイロードでは、Brazeは省略されたイベント名を使用します。以下はそのリファレンスです。

略称 イベント
ss セッション開始
se セッション終了
si アプリ内メッセージのインプレッション
sbc アプリ内メッセージのボタンクリック
cci Content Cardsのインプレッション
ccc Content Cardsのクリック
ccd Content Cardsの却下
lr 位置情報の記録

トラブルシューティング

Android SDK 13.1.0~15.x でジオフェンスがトリガーされない

Braze Android SDK 13.1.0から15.x には、ジオフェンス更新イベントの記録が停止する可能性のあるリグレッションがありました。Android 10以前を実行しているデバイスでは、セッション開始時の位置情報更新も失敗する場合がありました。Android SDK 16.0.0以降にアップグレードしてください。SDKの設定については、ジオフェンスを参照してください。

ユーザーのプロファイルにセッションが0件と記録されるのはどのような場合ですか?

REST API(/users/track)またはCSVインポートで、最初のセッションや最後のセッションフィールドを含めずにユーザーをインポートした場合、ユーザープロファイルにセッションが0件と表示されることがあります。セッションは、ユーザーがSDKを通じてアプリを操作したときに記録されます。詳細については、ユーザープロファイルのセッションが0件を参照してください。

SDKとREST APIを同時に使用した場合のユーザーデータの不一致

SDKとREST APIを同時に使用すると、競合によりデータの不一致が発生する可能性があります。changeUser()を呼び出した後、重要なREST API呼び出しを行う前にSDKが保留中のデータをフラッシュできるようにし、時間に敏感な更新のバッチ処理を避け、SDKとAPIリクエストの間に短い遅延を追加することを検討してください。changeUser()の動作については、changeUser() の仕組みを参照してください。

データがBrazeに到達しない

データがBrazeに到達しない場合は、ファイアウォールがBraze APIエンドポイントおよびCDNプロバイダーへのアウトバウンドトラフィックを許可していることを確認してください。問題が発生している間にMTRテストを実行し、Fastly Debugを使用してください。許可リストへの登録と接続のトラブルシューティングについては、APIネットワーク接続の問題を参照してください。

New Stuff!