Content Cards
アプリケーションで使用できるさまざまなデータモデルやカード固有のプロパティなど、Braze SDKのContent Cardsについて説明します。


このガイドでは、Braze Web SDK 4.0.0+ のコードサンプルを使用します。最新の Web SDK バージョンにアップグレードするには、SDK アップグレードガイドを参照してください。
前提条件
Content Cardsを使用する前に、アプリにBraze Web SDKを統合する必要があります。ただし、追加の設定は不要です。独自のUIを構築する場合は、Content Cardsカスタマイズガイドを参照してください。

一部の広告ブロッカーやブラウザーのプライバシー拡張機能は、Braze Web SDKスクリプトや関連するネットワークリクエストをブロックする場合があり、Content Cardsの読み込みが妨げられることがあります。CDN統合方式を使用している場合は、NPM統合方式への切り替えを検討してください。この方式では、SDKライブラリがWebサイトにローカルで保存されるため、広告ブロッカーに関連する問題の一部を回避できます。
標準フィードUI
組み込みのContent Cards UIを使用するには、Webサイト上でフィードを表示する場所を指定する必要があります。
この例では、Content Cardsフィードを配置する<div id="feed"></div>を用意しています。フィードの非表示、表示、トグル(現在の状態に基づいて非表示または表示を切り替える)を行う3つのボタンを使用します。
<button id="toggle" type="button">Toggle Cards Feed</button>
<button id="hide" type="button">Hide Cards Feed</button>
<button id="show" type="button">Show Cards Feed</button>
<nav>
<h1>Your Personalized Feed</h1>
<div id="feed"></div>
</nav>
<script>
const toggle = document.getElementById("toggle");
const hide = document.getElementById("hide");
const show = document.getElementById("show");
const feed = document.getElementById("feed");
toggle.onclick = function(){
braze.toggleContentCards(feed);
}
hide.onclick = function(){
braze.hideContentCards();
}
show.onclick = function(){
braze.showContentCards(feed);
}
</script>
toggleContentCards(parentNode, filterFunction)メソッドおよびshowContentCards(parentNode, filterFunction)メソッドを使用する際、引数が指定されていない場合、すべてのContent Cardsがページ上の固定位置のサイドバーに表示されます。それ以外の場合、フィードは指定されたparentNodeオプションに配置されます。
| パラメーター | 説明 |
|---|---|
parentNode |
Content CardsをレンダリングするHTMLノード。親ノードにすでにBraze Content Cardsビューが直接の子要素として含まれている場合、既存のContent Cardsは置き換えられます。例えば、document.querySelector(".my-container")を渡す必要があります。 |
filterFunction |
このビューに表示されるカードのフィルターまたはソート関数。{pinned, date}でソートされたCardオブジェクトの配列で呼び出されます。このユーザーに対してレンダリングするソート済みCardオブジェクトの配列を返すことが期待されます。省略すると、すべてのカードが表示されます。 |
Content Cardsの切り替えについて詳しくは、SDKリファレンスドキュメントを参照してください。
WebでのContent Cardsのテスト
ブラウザの開発者ツールを使用して、Content Cardsの統合をテストできます。
- Content Cardsキャンペーンを作成し、テストユーザーをターゲットにします。
- Web SDKが統合されているWebサイトにログインします。
- ブラウザのコンソールを開きます。Chromeの場合、ページを右クリックし、検証 を選択してから、Console タブを選択します。
- コンソールで以下のコマンドを実行します。
window.braze.getCachedContentCards()window.braze.toggleContentCards()
カードの種類とプロパティ
Content Cardsのデータモデルは Web SDKで利用可能であり、以下のContent Cardsの種類を提供しています:ImageOnly、CaptionedImage、ClassicCard。各タイプはベースモデルCardから共通のプロパティを継承し、以下の追加プロパティを持ちます。

ベースカードモデル
すべてのContent Cardsには、以下の共通プロパティがあります:
| プロパティ | 説明 |
|---|---|
expiresAt |
カードの有効期限のUNIXタイムスタンプ。 |
extras |
(オプション)値が文字列の文字列オブジェクトとしてフォーマットされたキーと値のペアデータ。 |
id |
(オプション)カードのID。分析目的でイベントとともにBrazeに報告されます。 |
pinned |
このプロパティは、カードがダッシュボードで「ピン留め」として設定されたかどうかを反映します。 |
updated |
このカードが最後に変更されたUNIXタイムスタンプ。 |
viewed |
このプロパティは、ユーザーがカードを閲覧したかどうかを反映します。 |
isControl |
このプロパティは、カードがA/Bテスト内の「コントロール」グループである場合にtrueになります。 |
画像のみ
ImageOnlyカードは、クリック可能なフルサイズの画像です。
| プロパティ | 説明 |
|---|---|
aspectRatio |
カードの画像のアスペクト比。画像の読み込みが完了する前のヒントとして機能します。特定の状況ではこのプロパティが提供されない場合があります。 |
categories |
このプロパティは、カスタム実装での整理用途のみです。これらのカテゴリはダッシュボードのコンポーザーで設定できます。 |
clicked |
このプロパティは、このデバイスでこのカードがクリックされたことがあるかどうかを示します。 |
created |
BrazeからのカードのUNIX作成タイムスタンプ。 |
dismissed |
このプロパティは、このカードが非表示にされたかどうかを示します。 |
dismissible |
このプロパティは、ユーザーがカードを非表示にして表示から削除できるかどうかを反映します。 |
imageUrl |
カードの画像のURL。 |
linkText |
URLの表示テキスト。 |
url |
カードがクリックされた後に開かれるURL。 |
キャプション付き画像
CaptionedImageカードは、説明テキスト付きのクリック可能なフルサイズの画像です。
| プロパティ | 説明 |
|---|---|
aspectRatio |
カードの画像のアスペクト比。画像の読み込みが完了する前のヒントとして機能します。特定の状況ではこのプロパティが提供されない場合があります。 |
categories |
このプロパティは、カスタム実装での整理用途のみです。これらのカテゴリはダッシュボードのコンポーザーで設定できます。 |
clicked |
このプロパティは、このデバイスでこのカードがクリックされたことがあるかどうかを示します。 |
created |
BrazeからのカードのUNIX作成タイムスタンプ。 |
dismissed |
このプロパティは、このカードが非表示にされたかどうかを示します。 |
dismissible |
このプロパティは、ユーザーがカードを非表示にして表示から削除できるかどうかを反映します。 |
imageUrl |
カードの画像のURL。 |
linkText |
URLの表示テキスト。 |
title |
このカードのタイトルテキスト。 |
url |
カードがクリックされた後に開かれるURL。 |
クラシック
ClassicCardモデルは、テキストなしの画像、または画像付きのテキストを含むことができます。
| プロパティ | 説明 |
|---|---|
aspectRatio |
カードの画像のアスペクト比。画像の読み込みが完了する前のヒントとして機能します。特定の状況ではこのプロパティが提供されない場合があります。 |
categories |
このプロパティは、カスタム実装での整理用途のみです。これらのカテゴリはダッシュボードのコンポーザーで設定できます。 |
clicked |
このプロパティは、このデバイスでこのカードがクリックされたことがあるかどうかを示します。 |
created |
BrazeからのカードのUNIX作成タイムスタンプ。 |
description |
このカードの本文テキスト。 |
dismissed |
このプロパティは、このカードが非表示にされたかどうかを示します。 |
dismissible |
このプロパティは、ユーザーがカードを非表示にして表示から削除できるかどうかを反映します。 |
imageUrl |
カードの画像のURL。 |
linkText |
URLの表示テキスト。 |
title |
このカードのタイトルテキスト。 |
url |
カードがクリックされた後に開かれるURL。 |
画像フォーマット
Content Cardsの画像(GIFを含む)は、標準のHTML <img> タグを使用してレンダリングされます。GIFのサポートはユーザーのブラウザーの機能に依存し、Web SDKの最小バージョンは必要ありません。すべてのモダンブラウザーはGIF再生をネイティブでサポートしています。
コントロールグループ
デフォルトのContent Cardsフィードを使用している場合、インプレッションとクリックは自動的に追跡されます。
Content Cardsのカスタム統合を使用している場合、コントロールカードが表示されたであろうタイミングでインプレッションを記録する必要があります。この取り組みの一環として、A/Bテストでインプレッションを記録する際にコントロールカードを処理するようにしてください。これらのカードは空白であり、ユーザーには表示されませんが、コントロール以外のカードとのパフォーマンスを比較するためにインプレッションを記録する必要があります。
Content CardsがA/Bテストのコントロールグループに属しているかどうかを判断するには、card.isControlプロパティ(Web SDK v4.5.0以降)を確認するか、カードがControlCardインスタンスであるかどうかを確認します(card instanceof braze.ControlCard)。
カードメソッド
デフォルトフィードメソッド
Brazeのデフォルトフィードを使用してContent Cardsを表示する場合は、以下のメソッドを使用します。
| メソッド | 説明 |
|---|---|
showContentCards |
デフォルトのContent Cardsフィードを表示します。指定されたparentNode HTML要素にカードをレンダリングします。要素が指定されていない場合は、固定位置のサイドバーとして表示されます。オプションのfilterFunctionを受け取り、表示前にカードのソートやフィルタリングを行えます。 |
hideContentCards |
デフォルトのContent Cardsフィードが現在表示されている場合、非表示にします。 |
toggleContentCards |
デフォルトのContent Cardsフィードが非表示の場合は表示し、表示されている場合は非表示にします。複数のContent Cardsフィードを同時に表示する必要がある場合は、代わりにshowContentCardsとhideContentCardsを使用してください。 |
カスタムフィードメソッド
独自のContent Cards UIを構築する場合は、以下のメソッドを使用します。
| メソッド | 説明 |
|---|---|
subscribeToContentCardsUpdates |
現在のユーザーのContent Cardsが更新されるたびに(セッション開始時など)呼び出されるコールバック関数を登録します。カスタムフィードのカードデータを受け取る主要な方法として使用してください。初回セッションの更新を受け取るには、openSession()の前に呼び出す必要があります。 |
getCachedContentCards |
最新のContent Cards更新から現在利用可能なすべてのカードを返します。新しいサーバーリクエストを待たずにページ読み込み時にカードを即座に表示する場合(アクティブなセッション中にユーザーがページに戻った場合など)に使用します。 |
requestContentCardsRefresh |
BrazeサーバーからのContent Cardsの即時更新をリクエストします。デフォルトでは、カードはセッション開始時およびデフォルトフィードが再度開かれた際に更新されます。特定のユーザーアクション後など、それ以外のタイミングで強制的に更新する場合に使用します。レート制限にご注意ください。 |
logContentCardImpressions |
カードの配列に対するインプレッションイベントを記録します。カードがレンダリングされてユーザーに表示された際に呼び出してください。カスタムUIを使用する場合、デフォルトフィード以外ではインプレッションが自動的に追跡されないため、正確なキャンペーンレポートに必要です。 |
logContentCardClick |
単一カードのクリックイベントを記録します。カスタムUI内でユーザーがカードを操作した際に呼び出してください。デフォルトフィード以外ではクリックが自動的に追跡されないため、正確なキャンペーンレポートに必要です。 |
handleBrazeAction |
カードのURLを処理し、Brazeアクション(brazeActions:// URL)や標準のURLナビゲーションを含む、設定済みのクリック時アクションを実行します。Brazeダッシュボードで設定されたクリック時の動作が確実に実行されるよう、カードのクリックハンドラー内で呼び出してください。 |
dismissCard |
カードをプログラムで非表示にし、ユーザーのフィードから削除します。カスタムUI内でユーザーがカードを非表示にできるようにする場合に使用します。 |
詳細については、SDKリファレンスドキュメントを参照してください。
ベストプラクティス
正しい順序でメソッドを呼び出す
カスタムフィードの場合、Content CardsはsubscribeToContentCardsUpdates()がopenSession()の前に呼び出された場合にのみ、セッション開始時にリフレッシュされます。Brazeのメソッドは以下の順序で呼び出してください:
import * as braze from "@braze/web-sdk";
// Step 1: Initialize the SDK
braze.initialize("YOUR-API-KEY", { baseUrl: "YOUR-SDK-ENDPOINT" });
// Step 2: Subscribe to card updates
braze.subscribeToContentCardsUpdates((updates) => {
const cards = updates.cards;
renderCards(cards);
});
// Step 3: Identify the user
braze.changeUser("USER_ID");
// Step 4: Start the session
braze.openSession();
キャッシュされたカードを使用してページ読み込み間でコンテンツを保持する
subscribeToContentCardsUpdates()は新しい更新がある場合(セッション開始時など)にのみコールバックを実行するため、ユーザーがセッション中にページをリフレッシュするとカスタムフィードからカードが消えることがあります。これを防ぐには、getCachedContentCards()を使用してローカルキャッシュからカードを即座にレンダリングし、新しい更新のサブスクリプションと併用してください:
import * as braze from "@braze/web-sdk";
function renderCards(cards) {
const container = document.getElementById("content-cards");
container.textContent = "";
const displayedCards = [];
cards.forEach(card => {
if (card instanceof braze.ClassicCard || card instanceof braze.CaptionedImage) {
const cardElement = document.createElement("div");
const h3 = document.createElement("h3");
h3.textContent = card.title || "";
cardElement.appendChild(h3);
const p = document.createElement("p");
p.textContent = card.description || "";
cardElement.appendChild(p);
if (card.imageUrl) {
const img = document.createElement("img");
img.src = card.imageUrl;
img.alt = card.title || "";
cardElement.appendChild(img);
}
if (card.url) {
cardElement.addEventListener("click", () => {
braze.logContentCardClick(card);
braze.handleBrazeAction(card.url);
});
}
container.appendChild(cardElement);
displayedCards.push(card);
}
});
if (displayedCards.length > 0) {
braze.logContentCardImpressions(displayedCards);
}
}
// Display cached cards immediately
const cached = braze.getCachedContentCards();
if (cached && cached.cards.length > 0) {
renderCards(cached.cards);
}
// Subscribe to future updates
braze.subscribeToContentCardsUpdates((updates) => {
renderCards(updates.cards);
});
カスタムフィードの分析をログに記録する
カスタムUIを使用している場合、インプレッション、クリック、非表示は自動的にトラッキングされません。各イベントを手動でログに記録する必要があります:
- インプレッション: カードがユーザーに表示されたときに、カードオブジェクトの配列を使用して
logContentCardImpressions([card1, card2, ...])を呼び出します。 - クリック: ユーザーがカードを操作したときに
logContentCardClick(card)を呼び出します。 - クリック時の動作:
handleBrazeAction(card.url)を呼び出して、カードに設定されたクリック時のアクション(URLへの遷移やカスタムイベントのログ記録など)を実行します。

logContentCardClick()に渡す引数は、元のBraze Cardオブジェクトである必要があります。カードデータを変換または再構築した場合(シリアライズやデシリアライズなど)、クリックはログに記録されず、「card must be a Card object.」というエラーが表示されます。
Google Tag Managerの使用
Google Tag Managerは、Braze CDN(Web SDKのバージョン)をWebサイトのコードに直接インジェクトすることで機能します。つまり、Content Cardsの実装を除き、Google Tag Managerなしで SDKを統合した場合と同様に、すべてのSDKメソッドが利用可能です。
Content Cardsの設定
Content Cardsフィードの標準統合には、Google Tag ManagerのカスタムHTMLタグを使用できます。カスタムHTMLタグに以下を追加すると、標準のContent Cardsフィードが有効になります。
<script>
window.braze.showContentCards();
</script>

Content Cardsとそのフィードの外観をより自由にカスタマイズするために、Content CardsをネイティブWebサイトに直接統合できます。この方法には、標準フィードUIを使用する方法とカスタムフィードUIを作成する方法の2つのアプローチがあります。
テンプレートのアップグレード
Braze Web SDKの最新バージョンにアップグレードするには、Google Tag Managerダッシュボードで以下の3つのステップを実行します。
- タグテンプレートの更新
ワークスペース内のテンプレートページに移動します。更新が利用可能であることを示すアイコンが表示されます。
そのアイコンをクリックし、変更内容を確認した後、Accept Updateをクリックします。
- バージョン番号の更新
タグテンプレートが更新されたら、Braze初期化タグを編集し、SDKバージョンを最新のmajor.minorバージョンに更新します。例えば、最新バージョンが4.1.2の場合、4.1と入力します。SDKバージョンの一覧は変更履歴で確認できます。
- QAと公開
タグコンテナの更新を公開する前に、Google Tag Managerのデバッグツールを使用して新しいSDKバージョンが正しく動作していることを確認します。
トラブルシューティング
タグデバッグの有効化
各Brazeタグテンプレートには、オプションのGTM Tag Debuggingチェックボックスがあり、Webページの JavaScriptコンソールにデバッグメッセージを記録するために使用できます。

デバッグモードへの切り替え
Google Tag Managerの統合をデバッグするもう1つの方法は、Googleのプレビューモード機能を使用することです。
これにより、Webページのデータレイヤーからトリガーされた各Brazeタグにどのような値が送信されているかを特定でき、どのタグがトリガーされた(またはされなかった)かも確認できます。

カスタムイベントのタグシーケンスの確認
カスタムイベントやその他のアクションがBrazeに記録されない場合、よくある原因は競合です。カスタムイベントや購入などのアクションタグが、Braze初期化タグの完了前に発火してしまうことがあります。これを修正するには、GTMでタグシーケンスを設定します。
- 正しく記録されていないアクションタグを開きます。
- 詳細設定 > タグシーケンスで、[このタグ]の前に発火するタグを選択します。
- セットアップタグとしてBraze初期化タグを選択します。
これにより、アクションタグがBrazeにデータを送信する前に、SDKが完全に初期化されます。
詳細ログの有効化
トラブルシューティング用の詳細なログをキャプチャするには、Google Tag Managerの統合で詳細ログを有効にできます。これらのログは、ブラウザの開発者ツールのコンソールタブに表示されます。
Google Tag Managerの統合で、Braze初期化タグに移動し、Enable Web SDK Loggingを選択します。

前提条件
BrazeのContent Cardsを使用するには、Braze Android SDKをアプリに統合する必要があります。ただし、追加のセットアップは不要です。
Googleフラグメント
Androidでは、Content CardsフィードはBraze Android UIプロジェクトで利用可能なフラグメントとして実装されています。ContentCardsFragmentクラスは、Content Cardsのコンテンツを自動的に更新・表示し、使用状況の分析をログに記録します。ユーザーのContentCardsに表示されるカードは、Brazeダッシュボードで作成されます。
アクティビティにフラグメントを追加する方法については、Googleのフラグメントドキュメントを参照してください。
カードのタイプとプロパティ
Content CardsのデータモデルはAndroid SDKで利用可能で、以下の固有のContent Cardsタイプを提供します。各タイプはベースモデルを共有しており、ベースモデルから共通のプロパティを継承するとともに、独自のプロパティも持っています。完全なリファレンスドキュメントについては、com.braze.models.cardsを参照してください。
ベースカードモデル
ベースカードモデルは、すべてのカードの基本的な動作を提供します。
| プロパティ | 説明 |
|---|---|
getId() |
Brazeによって設定されたカードのIDを返します。 |
getViewed() |
カードがユーザーによって既読か未読かを示すブール値を返します。 |
getExtras() |
このカードのキーと値のエクストラのマップを返します。 |
getCreated() |
Brazeからのカード作成時刻のUNIXタイムスタンプを返します。 |
isPinned |
カードがピン留めされているかどうかを示すブール値を返します。 |
getOpenUriInWebView() |
このカードのURIをBraze WebViewで開くかどうかを示す ブール値を返します。 |
getExpiredAt() |
カードの有効期限を取得します。 |
isRemoved() |
エンドユーザーがこのカードを非表示にしたかどうかを示すブール値を返します。 |
isDismissibleByUser() |
ユーザーがカードを非表示にできるかどうかを示すブール値を返します。 |
isClicked() |
このカードのクリック状態を示すブール値を返します。 |
isDismissed |
カードが非表示にされたかどうかを示すブール値を返します。カードを非表示としてマークするにはtrueに設定します。すでに非表示としてマークされているカードは、再度非表示としてマークすることはできません。 |
isControl() |
このカードがコントロールカードであり、レンダリングすべきでない場合にブール値を返します。 |
画像のみ
画像のみカードは、クリック可能なフルサイズの画像です。
| プロパティ | 説明 |
|---|---|
getImageUrl() |
カードの画像のURLを返します。 |
getUrl() |
カードがクリックされた後に開かれるURLを返します。HTTP(s) URLまたはプロトコルURLの場合があります。 |
getDomain() |
プロパティURLのリンクテキストを返します。 |
キャプション付き画像
キャプション付き画像カードは、説明テキストが付いたクリック可能なフルサイズの画像です。
| プロパティ | 説明 |
|---|---|
getImageUrl() |
カードの画像のURLを返します。 |
getTitle() |
カードのタイトルテキストを返します。 |
getDescription() |
カードの本文テキストを返します。 |
getUrl() |
カードがクリックされた後に開かれるURLを返します。HTTP(s) URLまたはプロトコルURLの場合があります。 |
getDomain() |
プロパティURLのリンクテキストを返します。 |
クラシック
画像が含まれていないクラシックカードは、テキストアナウンスメントカードになります。画像が含まれている場合は、ショートニュースカードになります。
| プロパティ | 説明 |
|---|---|
getTitle() |
カードのタイトルテキストを返します。 |
getDescription() |
カードの本文テキストを返します。 |
getUrl() |
カードがクリックされた後に開かれるURLを返します。HTTP(s) URLまたはプロトコルURLの場合があります。 |
getDomain() |
プロパティURLのリンクテキストを返します。 |
getImageUrl() |
カードの画像のURLを返します。クラシックショートニュースカードにのみ適用されます。 |
isDismissed |
カードが非表示にされたかどうかを示すブール値を返します。カードを非表示としてマークするにはtrueに設定します。すでに非表示としてマークされているカードは、再度非表示としてマークすることはできません。 |
カードメソッド
すべてのCardデータモデルオブジェクトは、ユーザーイベントをBrazeサーバーにログ記録するための以下の分析メソッドを提供します。
| メソッド | 説明 |
|---|---|
logImpression() |
特定のカードのインプレッションをBrazeに手動でログ記録します。 |
logClick() |
特定のカードのクリックをBrazeに手動でログ記録します。 |
前提条件
Content Cardsを使用する前に、Braze Swift SDKをアプリに統合する必要があります。ただし、追加の設定は不要です。
ビューコントローラーコンテキスト
デフォルトのContent Cards UIは、Braze SDKのBrazeUIライブラリから統合できます。brazeインスタンスを使用してContent Cardsビューコントローラーを作成します。Content Card UIのライフサイクルをインターセプトして対応する場合は、BrazeContentCardUIViewControllerDelegateをBrazeContentCardUI.ViewControllerのデリゲートとして実装してください。

Swift SDKのBrazeUIライブラリには、ナビゲーションとモーダルの2つのデフォルトビューコントローラーコンテキストが用意されています。つまり、アプリやサイトに数行のコードを追加するだけで、これらのコンテキストにContent Cardsを統合できます。どちらのビューも、カスタマイズガイドに記載されているカスタマイズおよびスタイリングオプションを利用できます。さらに高度なカスタマイズが必要な場合は、標準のBrazeビューコントローラーの代わりにカスタムContent Cardsビューコントローラーを作成することもできます—例についてはContent Cards UIチュートリアルを参照してください。

カスタムUIでコントロールバリアントのContent Cardsを処理するには、Braze.ContentCard.Controlオブジェクトを渡し、他のContent Cardsタイプと同様にlogImpressionメソッドを呼び出します。このオブジェクトはコントロールインプレッションを暗黙的にログに記録し、ユーザーがコントロールカードを表示したタイミングを分析に通知します。
ナビゲーション
ナビゲーションコントローラーは、ナビゲーションインターフェイスで1つ以上の子ビューコントローラーを管理するビューコントローラーです。以下は、BrazeContentCardUI.ViewControllerインスタンスをナビゲーションコントローラーにプッシュする例です。
func pushViewController() {
guard let braze = AppDelegate.braze else { return }
let contentCardsController = BrazeContentCardUI.ViewController(braze: braze)
// Implement and set `BrazeContentCardUIViewControllerDelegate` if you wish to intercept click actions.
contentCardsController.delegate = self
self.navigationController?.pushViewController(contentCardsController, animated: true)
}
- (void)pushViewController {
BRZContentCardUIViewController *contentCardsController = [[BRZContentCardUIViewController alloc] initWithBraze:self.braze];
// Implement and set `BrazeContentCardUIViewControllerDelegate` if you wish to intercept click actions.
[contentCardsController setDelegate:self];
[self.navigationController pushViewController:contentCardsController animated:YES];
}
モーダル
モーダルプレゼンテーションを使用して、重要な情報の入力をユーザーに求めるなど、アプリのワークフローに一時的な中断を作成します。このモデルビューには、上部にナビゲーションバーがあり、バーの横に完了ボタンがあります。以下は、BrazeContentCard.ViewControllerインスタンスをモーダルコントローラーにプッシュする例です。
func presentModalViewController() {
guard let braze = AppDelegate.braze else { return }
let contentCardsModal = BrazeContentCardUI.ModalViewController(braze: braze)
// Implement and set `BrazeContentCardUIViewControllerDelegate` if you wish to intercept click actions.
contentCardsModal.viewController.delegate = self
self.navigationController?.present(contentCardsModal, animated: true, completion: nil)
}
- (void)presentModalViewController {
BRZContentCardUIModalViewController *contentCardsModal = [[BRZContentCardUIModalViewController alloc] initWithBraze:AppDelegate.braze];
// Implement and set `BrazeContentCardUIViewControllerDelegate` if you wish to intercept click actions.
[contentCardsModal.viewController setDelegate:self];
[self.navigationController presentViewController:contentCardsModal animated:YES completion:nil];
}
BrazeUIビューコントローラーの使用例については、サンプルアプリの対応するContent Cards UIサンプルを確認してください。
ベースカードモデル
Content Cardsのデータモデルは、Braze Swift SDKのBrazeKitモジュールで利用できます。このモジュールには、Braze.ContentCard型の実装である以下のContent Cardsタイプが含まれています。Content Cardsのプロパティとその使用方法の完全なリストについては、ContentCardクラスを参照してください。
- 画像のみ
- キャプション付き画像
- クラシック
- クラシック画像
- コントロール
Content Cardsのデータモデルにアクセスするには、brazeインスタンスでcontentCards.cardsを呼び出します。カードデータのサブスクリプションの詳細については、分析のログを参照してください。

contentCards.cards、contentCards.unviewedCards、またはcontentCards.lastUpdateを読み込むと、SDKが初期化後の操作を完了するまで呼び出しスレッドがブロックされます。メインスレッドやレイテンシーが重要なコンテキストでは、代わりにノンブロッキングのgetCachedContentCards(_:)、getUnviewedCards(_:)、またはgetLastUpdate(_:)を使用してください。

カードメソッド
各カードはContextオブジェクトで初期化されます。このオブジェクトには、カードの状態を管理するためのさまざまなメソッドが含まれています。特定のカードオブジェクトの対応する状態プロパティを変更する場合に、これらのメソッドを呼び出します。
| メソッド | 説明 |
|---|---|
card.context?.logImpression() |
Content Cardsのインプレッションイベントを記録します。 |
card.context?.logClick() |
Content Cardsのクリックイベントを記録します。 |
card.context?.processClickAction() |
指定されたClickAction入力を処理します。 |
card.context?.logDismissed() |
Content Cardsの非表示イベントを記録します。 |
card.context?.logError() |
Content Cardsに関連するエラーを記録します。 |
card.context?.loadImage() |
指定されたContent Cards画像をURLから読み込みます。Content Cardsに画像がない場合、このメソッドはnilになることがあります。 |
詳細については、Contextクラスのドキュメントを参照してください。
前提条件
この機能を使用する前に、Cordova Braze SDKを統合する必要があります。
カードフィード
Braze SDKにはデフォルトのカードフィードが含まれています。デフォルトのカードフィードを表示するには、launchContentCards() メソッドを使用します。このメソッドは、ユーザーのContent Cardsの分析トラッキング、非表示、レンダリングをすべて処理します。
Content Cards
以下の追加メソッドを使用して、アプリ内にカスタムContent Cardsフィードを構築できます。
| 方法 | 説明 |
|---|---|
requestContentCardsRefresh() |
Braze SDKサーバーから最新のContent Cardsをリクエストするバックグラウンドリクエストを送信します。 |
getContentCardsFromServer(successCallback, errorCallback) |
Braze SDKからContent Cardsを取得します。サーバーから最新のContent Cardsをリクエストし、完了時にカードのリストを返します。 |
getContentCardsFromCache(successCallback, errorCallback) |
Braze SDKからContent Cardsを取得します。前回の更新時に更新されたローカルキャッシュから最新のカードリストを返します。 |
logContentCardClicked(cardId) |
指定されたコンテンツカードIDのクリックを記録します。 |
logContentCardImpression(cardId) |
指定されたコンテンツカードIDのインプレッションを記録します。 |
logContentCardDismissed(cardId) |
指定されたコンテンツカードIDの非表示を記録します。 |
Flutterのコンテンツカードについて
Braze SDKには、コンテンツカードを使い始めるためのデフォルトのカードフィードが含まれています。カードフィードを表示するには、braze.launchContentCards()メソッドを使用できます。Braze SDKに含まれるデフォルトのカードフィードは、ユーザーのContent Cardsの分析トラッキング、却下、レンダリングをすべて処理します。
前提条件
この機能を使用する前に、Flutter Braze SDKの統合を完了する必要があります。
カードメソッド
プラグインパブリックインターフェイスで使用可能な以下のメソッドを使用して、アプリ内にカスタムContent Cardsフィードを構築できます。
| メソッド | 説明 |
|---|---|
braze.requestContentCardsRefresh() |
Braze SDKサーバーから最新のContent Cardsをリクエストします。 |
braze.logContentCardClicked(contentCard) |
指定されたContent Cardsオブジェクトのクリックを記録します。 |
braze.logContentCardImpression(contentCard) |
指定されたContent Cardsオブジェクトのインプレッションを記録します。 |
braze.logContentCardDismissed(contentCard) |
指定されたContent Cardsオブジェクトの却下を記録します。 |
コンテンツカードデータの受信
Flutterアプリでコンテンツカードデータを受信するために、BrazePluginはDart Streamsを使用したコンテンツカードデータの送信をサポートしています。
BrazeContentCard オブジェクトは、description、title、image、url、extrasなどを含む、ネイティブモデルオブジェクトで使用可能なフィールドのサブセットをサポートしています。
Dartレイヤーでコンテンツカードデータをリッスンする
Dartレイヤーでコンテンツカードデータを受信するには、以下のコードを使用してStreamSubscriptionを作成し、braze.subscribeToContentCards()を呼び出します。不要になったストリームサブスクリプションは忘れずにcancel()してください。
// Create stream subscription
StreamSubscription contentCardsStreamSubscription;
contentCardsStreamSubscription = braze.subscribeToContentCards((List<BrazeContentCard> contentCards) {
// Handle Content Cards
}
// Cancel stream subscription
contentCardsStreamSubscription.cancel();
例については、Braze Flutter SDKサンプルアプリケーションのmain.dartを参照してください。
ネイティブiOSレイヤーからコンテンツカードデータを転送する
コンテンツカードデータはAndroidとiOSの両方のネイティブレイヤーから自動的に転送されます。追加のセットアップは必要ありません。
Flutter SDK 17.1.0以前を使用している場合、iOSネイティブレイヤーからのコンテンツカードデータ転送には手動セットアップが必要です。アプリケーションには、BrazePlugin.processContentCards(contentCards)を呼び出すcontentCards.subscribeToUpdatesコールバックが含まれている可能性があります。Flutter SDK 18.0.0に移行するには、BrazePlugin.processContentCards(_:)の呼び出しを削除してください。データ転送は自動的に処理されるようになりました。
例については、Braze Flutter SDKサンプルアプリケーションのAppDelegate.swiftを参照してください。
コンテンツカードのコールバックを再生する
コールバックが利用可能になる前にトリガーされたコンテンツカードを保存し、設定後に再生するには、BrazePluginの初期化時に次のエントリをcustomConfigsマップに追加します。
BrazePlugin braze = new BrazePlugin(customConfigs: {replayCallbacksConfigKey: true});
React NativeのContent Cardsについて
Braze SDKには、Content Cardsを使い始めるためのデフォルトのカードフィードが含まれています。カードフィードを表示するには、Braze.launchContentCards()メソッドを使用できます。Braze SDKに含まれるデフォルトのカードフィードは、ユーザーのContent Cardsの分析トラッキング、非表示、レンダリングをすべて処理します。
この機能を使う前に、React Native Braze SDKを統合する必要があります。
カードのメソッド
独自のUIを構築するには、利用可能なカードのリストを取得し、カードの更新をリッスンできます。
// Set initial cards
const [cards, setCards] = useState([]);
// Listen for updates as a result of card refreshes, such as:
// a new session, a manual refresh with `requestContentCardsRefresh()`, or after the timeout period
Braze.addListener(Braze.Events.CONTENT_CARDS_UPDATED, async (update) => {
setCards(update.cards);
});
// Manually trigger a refresh of cards
Braze.requestContentCardsRefresh();

カードを表示する独自のUIを構築する場合、それらのカードの分析を受け取るためにlogContentCardImpressionを呼び出す必要があります。これにはcontrolカードも含まれます。コントロールカードはユーザーに表示されませんが、トラッキングする必要があります。
以下の追加メソッドを使用して、アプリ内にカスタムContent Cardsフィードを構築できます。
| メソッド | 説明 |
|---|---|
launchContentCards() |
Content CardsのUI要素を起動します。 |
requestContentCardsRefresh() |
Braze SDKサーバーから最新のContent Cardsをリクエストします。結果として得られるカードのリストは、以前に登録されたコンテンツカードイベントの各リスナーに渡されます。 |
getCachedContentCards() |
キャッシュから最新のContent Cards配列を返します。 |
logContentCardClicked(cardId) |
指定されたContent カード IDのクリックを記録します。このメソッドは分析専用です。クリックアクションを実行するには、追加でprocessContentCardClickAction(cardId)を呼び出してください。 |
logContentCardImpression(cardId) |
指定されたContent カード IDのインプレッションを記録します。 |
logContentCardDismissed(cardId) |
指定されたContent カード IDの非表示を記録します。 |
processContentCardClickAction(cardId) |
特定のカードのアクションを実行します。 |
カードのタイプとプロパティ
Content CardsデータモデルはReact Native SDKで利用可能で、以下のContent Cardsカードタイプを提供します:画像のみ、キャプション付き画像、クラシック。また、特別なコントロールカードタイプもあり、指定されたカードのコントロールグループに属するユーザーに返されます。各タイプは、独自のプロパティに加えて、ベースモデルから共通のプロパティを継承します。
ベースカードモデル
ベースカードモデルは、すべてのカードの基本的な動作を提供します。
| プロパティ | 説明 |
|---|---|
id |
Brazeによって設定されたカードのIDです。 |
created |
Brazeからのカード作成時刻のUNIXタイムスタンプです。 |
expiresAt |
カードの有効期限を示すUNIXタイムスタンプです。値が0より小さい場合は、カードの有効期限がないことを意味します。 |
viewed |
カードがユーザーによって既読か未読かを示します。これは分析のログを記録しません。 |
clicked |
カードがユーザーによってクリックされたかどうかを示します。 |
pinned |
カードが固定されているかどうかを示します。 |
dismissed |
ユーザーがこのカードを非表示にしたかどうかを示します。すでに非表示にされたカードに非表示マークを付けても何も起こりません。 |
dismissible |
ユーザーがカードを非表示にできるかどうかを示します。 |
url |
(オプション)カードクリックアクションに関連付けられたURL文字列です。 |
openURLInWebView |
このカードのURLをBraze WebViewで開くかどうかを示します。 |
isControl |
このカードがコントロールカードかどうかを示します。コントロールカードはユーザーに表示しないでください。 |
extras |
このカードのキーバリューエクストラのマップです。 |
ベースカードの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。
画像のみ
画像のみのカードはクリック可能なフルサイズの画像です。
| プロパティ | 説明 |
|---|---|
type |
Content Cardsの種類、IMAGE_ONLYです。 |
image |
カードの画像のURLです。 |
imageAspectRatio |
カード画像のアスペクト比です。画像の読み込みが完了する前のヒントとして利用するためのものです。特定の状況ではプロパティが提供されない場合があることに注意してください。 |
画像のみのカードの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。
キャプション付き画像
キャプション付き画像カードはクリック可能なフルサイズの画像で、説明文が添えられています。
| プロパティ | 説明 |
|---|---|
type |
Content Cardsの種類、CAPTIONEDです。 |
image |
カードの画像のURLです。 |
imageAspectRatio |
カード画像のアスペクト比です。画像の読み込みが完了する前のヒントとして利用するためのものです。特定の状況ではプロパティが提供されない場合があることに注意してください。 |
title |
カードのタイトルテキストです。 |
cardDescription |
カードの説明テキストです。 |
domain |
(オプション)プロパティURLのリンクテキストです(例:"braze.com/resources/")。カードのUIに表示され、カードをクリックした際のアクションや方向を示すことができます。 |
キャプション付き画像カードの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。
クラシック
クラシックカードには、タイトル、説明、およびオプションの画像がテキストの前に表示されます。
| プロパティ | 説明 |
|---|---|
type |
Content Cardsの種類、CLASSICです。 |
image |
(オプション)カードの画像のURLです。 |
title |
カードのタイトルテキストです。 |
cardDescription |
カードの説明テキストです。 |
domain |
(オプション)プロパティURLのリンクテキストです(例:"braze.com/resources/")。カードのUIに表示され、カードをクリックした際のアクションや方向を示すことができます。 |
クラシック(テキストアナウンス)Content Cardsの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。クラシック画像(ショートニュース)カードについては、AndroidおよびiOSのドキュメントを参照してください。
コントロール
コントロールカードにはベースプロパティがすべて含まれていますが、いくつかの重要な違いがあります。最も重要な点は以下のとおりです。
isControlプロパティはtrueであることが保証されています。extrasプロパティは空であることが保証されています。
前提条件
Content Cardsを使用するには、Braze Swift SDKをアプリに統合してください。その後、tvOSアプリのセットアップ手順を完了します。

Content CardsはSwift SDKを使用したヘッドレスUIでサポートされており、tvOS用のデフォルトUIやビューは含まれていないため、独自のカスタムUIを実装してください。
tvOSアプリのセットアップ
ステップ1:新しいiOSアプリを作成する
Brazeで、設定 > アプリ設定を選択し、アプリを追加を選択します。tvOSアプリの名前を入力し、iOS(tvOSではありません)を選択してから、アプリを追加を選択します。


tvOSチェックボックスを選択すると、tvOS用のContent Cardsをカスタマイズできなくなります。
ステップ2:アプリのAPIキーを取得する
アプリ設定で、新しいtvOSアプリを選択し、アプリのAPIキーをメモします。このキーを使用して、Xcodeでアプリを設定します。

ステップ3:BrazeKitを統合する
アプリのAPIキーを使用して、Braze Swift SDKをXcodeのtvOSプロジェクトに統合します。Braze Swift SDKからBrazeKitのみを統合する必要があります。
ステップ4:カスタムUIを作成する
BrazeはtvOS上のContent Cards用のデフォルトUIを提供していないため、自分でカスタマイズしてください。詳細なウォークスルーについては、ステップバイステップのチュートリアル「tvOS用Content Cardsのカスタマイズ」を参照してください。サンプルプロジェクトについては、Braze Swift SDKサンプルを参照してください。
前提条件
この機能を使用する前に、Unity Braze SDKを統合する必要があります。
Content Cardsをネイティブに表示する
次の呼び出しを使用して、Content CardsのデフォルトUIを表示できます。
Appboy.AppboyBinding.DisplayContentCards();
UnityでContent Cardsデータを受信する
Unityゲームオブジェクトを登録して、受信するContent Cardsの通知を受け取ることができます。Brazeコンフィギュレーションエディタからゲームオブジェクトリスナーを設定することをお勧めします。
ゲームオブジェクトリスナーを実行時に設定する必要がある場合は、AppboyBinding.ConfigureListener()を使用し、BrazeUnityMessageType.CONTENT_CARDS_UPDATEDを指定します。
なお、iOSではゲームオブジェクトリスナーでデータの受信を開始するために、AppboyBinding.RequestContentCardsRefresh()の呼び出しも必要です。
Content Cardsの解析
Content Cardsゲームオブジェクトコールバックで受信したstringメッセージは、あらかじめ用意されているContentCardモデルオブジェクトに解析すると便利です。
Content Cardsの解析にはJSON解析が必要です。詳細は以下の例を参照してください。
Content Cardsコールバックの例
void ExampleCallback(string message) {
try {
JSONClass json = (JSONClass)JSON.Parse(message);
// Content Card data is contained in the `mContentCards` field of the top level object.
if (json["mContentCards"] != null) {
JSONArray jsonArray = (JSONArray)JSON.Parse(json["mContentCards"].ToString());
Debug.Log(String.Format("Parsed content cards array with {0} cards", jsonArray.Count));
// Iterate over the card array to parse individual cards.
for (int i = 0; i < jsonArray.Count; i++) {
JSONClass cardJson = jsonArray[i].AsObject;
try {
ContentCard card = new ContentCard(cardJson);
Debug.Log(String.Format("Created card object for card: {0}", card));
// Example of logging Content Card analytics on the ContentCard object
card.LogImpression();
card.LogClick();
} catch {
Debug.Log(String.Format("Unable to create and log analytics for card {0}", cardJson));
}
}
}
} catch {
throw new ArgumentException("Could not parse content card JSON message.");
}
}
Content Cardsの更新
BrazeからContent Cardsを更新するには、次のいずれかのメソッドを呼び出します。
// results in a network request to Braze
AppboyBinding.RequestContentCardsRefresh()
AppboyBinding.RequestContentCardsRefreshFromCache()
分析
Brazeによって直接表示されないContent Cardsについては、クリックとインプレッションを手動でログに記録する必要があります。
ContentCardのLogClick()およびLogImpression()を使用して、特定のカードのクリックとインプレッションを記録します。
.NET MAUI Content Cardsについて
Braze .NET MAUI(旧称Xamarin)SDKには、Content Cardsの利用を開始するためのデフォルトのカードフィードが含まれています。Braze SDKに含まれるデフォルトのカードフィードは、ユーザーのContent Cardsのすべての分析トラッキング、却下、レンダリングを処理します。
前提条件
この機能を使用する前に、.NET MAUI Braze SDKの統合を完了する必要があります。
カードのタイプとプロパティ
Braze .NET MAUI SDKには、共通のベースモデルを持つ3種類のユニークなContent Cardsカードタイプがあります:バナー、キャプション付き画像、クラシック。各タイプはベースモデルから共通のプロパティを継承し、以下の追加プロパティを持ちます。
基本カードモデル
| プロパティ | 説明 |
|---|---|
idString |
Brazeによって設定されたカードのID。 |
created |
Brazeからのカード作成時間のUNIXタイムスタンプ。 |
expiresAt |
カードの有効期限を示すUNIXタイムスタンプ。値が0より小さい場合は、カードの有効期限がないことを意味します。 |
viewed |
カードがユーザーによって既読か未読か。これは分析のログを記録しません。 |
clicked |
カードがユーザーによってクリックされたかどうか。 |
pinned |
カードが固定されているかどうか。 |
dismissed |
ユーザーがこのカードを却下したかどうか。すでに却下されたカードに却下マークを付けても何も起こりません。 |
dismissible |
ユーザーがカードを却下できるかどうか。 |
urlString |
(オプション)カードクリックアクションに関連付けられたURL文字列。 |
openUrlInWebView |
このカードのURLをBraze WebViewで開くかどうか。 |
isControlCard |
このカードがコントロールカードかどうか。コントロールカードはユーザーに表示しないでください。 |
extras |
このカードのキーバリューエクストラのマップ。 |
isTest |
このカードがテストカードかどうか。 |
ベースカードの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。
バナー
バナーカードはクリック可能なフルサイズの画像です。
| プロパティ | 説明 |
|---|---|
image |
カードの画像のURL。 |
imageAspectRatio |
カード画像のアスペクト比。画像の読み込みが完了する前のヒントとして利用されます。特定の状況ではこのプロパティが提供されない場合があることに注意してください。 |
バナーカードの完全なリファレンスについては、AndroidおよびiOSのドキュメント(現在は「画像のみ」に名称変更)を参照してください。
キャプション付き画像
キャプション付き画像カードはクリック可能なフルサイズの画像で、説明テキストが添えられています。
| プロパティ | 説明 |
|---|---|
image |
カードの画像のURL。 |
imageAspectRatio |
カード画像のアスペクト比。画像の読み込みが完了する前のヒントとして利用されます。特定の状況ではこのプロパティが提供されない場合があることに注意してください。 |
title |
カードのタイトルテキスト。 |
cardDescription |
カードの説明テキスト。 |
domain |
(オプション)プロパティURLのリンクテキスト(例:"braze.com/resources/")。カードのUIに表示され、カードをクリックした際のアクション/方向を示すことができます。 |
キャプション付き画像カードの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。
クラシック
クラシックカードには、タイトル、説明、およびテキストの前にオプションの画像が表示されます。
| プロパティ | 説明 |
|---|---|
image |
(オプション)カードの画像のURL。 |
title |
カードのタイトルテキスト。 |
cardDescription |
カードの説明テキスト。 |
domain |
(オプション)プロパティURLのリンクテキスト(例:"braze.com/resources/")。カードのUIに表示され、カードをクリックした際のアクション/方向を示すことができます。 |
クラシック(テキストアナウンス)Content Cardsの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。クラシック画像(ショートニュース)カードの完全なリファレンスについては、AndroidおよびiOSのドキュメントを参照してください。
カードメソッド
以下の追加メソッドを使用して、アプリ内にカスタムContent Cardsフィードを構築できます。
| メソッド | 説明 |
|---|---|
requestContentCardsRefresh() |
Braze SDKサーバーから最新のContent Cardsをリクエストします。 |
getContentCards() |
Braze SDKからContent Cardsを取得します。サーバーからの最新のカードリストが返されます。 |
logContentCardClicked(cardId) |
指定されたContent カード IDのクリックを記録します。このメソッドは分析のみに使用されます。 |
logContentCardImpression(cardId) |
指定されたContent カード IDのインプレッションを記録します。 |
logContentCardDismissed(cardId) |
指定されたContent カード IDの却下を記録します。 |