コンテンツカードによって促進された
アプリケーションで使用できるさまざまなデータモデルやカード固有のプロパティなど、Braze SDK のコンテンツカードについて説明します。
バナースタイルのメッセージにコンテンツカードを使用する?Banners-インライン、永続的なアプリ、ウェブメッセージに最適です。
このガイドでは、Braze Web SDK 4.0.0+ のコードサンプルを使用します。最新の Web SDK バージョンにアップグレードするには、SDK アップグレードガイドを参照してください。
前提条件
Content Cardsを使用するには、Braze Web SDKをアプリに統合する必要があります。ただし、追加のセットアップは必要ありません。代わりに独自のUIを構築するには、コンテンツカードカスタマイズガイドを参照してください。
一部の広告ブロッカーやブラウザーのプライバシー拡張機能は、Braze Web SDKスクリプトや関連するネットワークリクエストをブロックすることがあり、Content Cardsの読み込みが妨げられる場合があります。CDN統合方法を使用している場合は、NPM統合方法への切り替えを検討してください。この方法ではSDKライブラリをWebサイトにローカルで保存するため、広告ブロッカー関連の問題を回避できる場合があります。
標準フィードUI
付属のContent Cards UIを使用するには、Webサイト上のどこにフィードを表示するかを指定する必要があります。
この例では、Content Cardsフィードを配置する <div id="feed"></div> があります。3つのボタンを使って、フィードの非表示、表示、トグル(現在の状態に応じて非表示または表示)を切り替えます。
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
<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 |
このビューに表示されるカードのフィルターまたはソート関数。Card オブジェクトの配列で呼び出され、{pinned, date} でソートされます。このユーザーにレンダリングするソート済みの Card オブジェクトの配列を返す必要があります。省略した場合は、すべてのカードが表示されます。 |
Content Cardsの切り替えに関する詳細は、SDKリファレンスドキュメントを参照してください。
WebでのContent Cardsのテスト
ブラウザーの開発者ツールを使用して、Content Cardsの統合をテストできます。
- Content Cards Campaignを作成し、テストユーザーをターゲットにします。
- Web SDKが統合されているWebサイトにログインします。
- ブラウザーのコンソールを開きます。Chromeの場合、ページを右クリックし、検証を選択してから、Console タブを選択します。
- コンソールで以下のコマンドを実行します。
window.braze.getCachedContentCards()window.braze.toggleContentCards()
カードの種類とプロパティ
Content CardsデータモデルはWeb SDKで利用でき、次のContent Cardsタイプを提供します。ImageOnly、CaptionedImage、ClassicCardです。各タイプはベースモデル Card から共通のプロパティを継承し、以下の追加プロパティを持ちます。
Content Cardsデータを記録するには、分析の記録を参照してください。
基本カードモデル
すべての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フィードを使用すると、インプレッションとクリックが自動的に追跡されます。
Content Cardsのカスタム統合を使用している場合、コントロールカードが表示されるはずだったタイミングでインプレッションを記録する必要があります。この作業の一環として、A/B テストでインプレッションを記録する際には、必ずコントロールカードを処理するようにしてください。これらのカードは空白であり、ユーザーに表示されませんが、コントロールカードでないカードとのパフォーマンスを比較するために、インプレッションを記録する必要があります。
Content CardsがA/Bテストのコントロールグループにあるかどうかを判断するには、card.isControl プロパティ(Web SDK v4.5.0+)を確認するか、カードが ControlCard インスタンス(card instanceof braze.ControlCard)かどうかをチェックします。
カードメソッド
デフォルトフィードメソッド
Brazeのデフォルトフィード UIを使用して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を使用する場合、デフォルトフィード以外ではインプレッションが自動的に追跡されないため、正確なCampaignレポートに必要です。 |
logContentCardClick |
単一のカードに対してクリックイベントを記録します。カスタムUIでユーザーがカードを操作したときに呼び出します。デフォルトフィード以外ではクリックが自動的に追跡されないため、正確なCampaignレポートに必要です。 |
handleBrazeAction |
カードのURLを処理し、設定されたクリック時アクション(Brazeアクション(brazeActions:// URL)や標準URLナビゲーションなど)を実行します。Brazeダッシュボードで設定されたクリック時の動作が実行されるように、カードのクリックハンドラーで呼び出してください。 |
dismissCard |
プログラムでカードを却下し、ユーザーのフィードから削除します。カスタムUIでユーザーがカードを却下できるようにする場合に使用します。 |
詳細については、SDKリファレンスドキュメントを参照してください。
ベストプラクティス
メソッドを正しい順序で呼び出す
カスタムフィードの場合、subscribeToContentCardsUpdates() を openSession() の前に呼び出した場合にのみ、セッション開始時にContent Cardsが更新されます。Brazeメソッドは以下の順序で呼び出してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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() を使用してローカルキャッシュからカードを即座にレンダリングし、新しい更新のサブスクリプションと併用してください。
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
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
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)を呼び出します。 - クリック時の動作: カードに設定されたクリック時アクション(URLへのナビゲーションやカスタムイベントの記録など)を実行するために
handleBrazeAction(card.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フィードが有効になります。
1
2
3
<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に記録されない場合、よくある原因は競合です。アクションタグ(Custom EventやPurchaseなど)がBraze Initializationタグの完了前に発火してしまうことがあります。これを修正するには、GTMでタグシーケンスを設定します。
- 正しく記録されていないアクションタグを開きます。
- Advanced Settings > Tag Sequencingで、A tag that fires before [this tag] を選択します。
- セットアップタグとしてBraze Initializationタグを選択します。
これにより、アクションタグがBrazeにデータを送信する前に、SDKが完全に初期化されることが保証されます。
詳細ログの有効化
トラブルシューティング用の詳細なログをキャプチャするには、Google Tag Manager統合で詳細ログを有効にできます。これらのログは、ブラウザーの開発者ツールのConsoleタブに表示されます。
Google Tag Manager統合で、Braze初期化タグに移動し、Enable Web SDK Loggingを選択します。

前提条件
Brazeコンテンツカードを使用する前に、アプリにBraze Android SDKを統合する必要がある。ただし、追加の設定は不要だ。
Googleの断片
Android では、コンテンツカードフィードは Braze Android UI プロジェクトで使用可能なフラグメントとして実装されます。このContentCardsFragmentクラスは、コンテンツカードの内容を自動的に更新して表示し、使用状況分析をログに記録します。ユーザーのContentCards カードに表示できるカードは、Braze ダッシュボードで作成されます。
アクティビティにフラグメントを追加する方法については、Googleのフラグメントに関するドキュメントを参照せよ。
カードのタイプとプロパティ
コンテンツカードデータモデルはAndroid SDKで利用可能であり、以下の固有のコンテンツカードタイプを提供する。各タイプはベースモデルを共有している。これにより、独自のプロパティを持つことに加え、ベースモデルから共通のプロパティを継承できる。完全な参照ドキュメントについては、を参照せよcom.braze.models.cards。
基本カードモデル
ベースカードモデルは、すべてのカードの基本的な動作を規定します。
| プロパティ | 説明 |
|---|---|
getId() |
Brazeで設定されたカードのID を返します。 |
getViewed() |
カードがユーザーによって既読か未読かを反映したブール値を返す。 |
getExtras() |
このカードのキーと値の追加のマップを返します。 |
getCreated() |
カードの作成時刻をBrazeからunixタイムスタンプで返す。 |
isPinned |
カードがピン留めされているかどうかを示すブール値を返す。 |
getOpenUriInWebView() |
このカードの Uris を開くべきかどうかを示すブール値を返す。 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へのクリックを手動で記録する。 |
前提条件
コンテンツカードを使用するには、 Braze Swift SDK をアプリに統合する必要があります。ただし、追加のセットアップは必要ありません。
コントロール者コンテキストの表示
デフォルトのコンテンツカード UI は、Braze SDK の BrazeUI ライブラリーから統合できます。braze インスタンスを使用して、コンテンツカードビューコントローラーを作成します。コンテンツカードの UI ライフサイクルをインターセプトして対応するには、BrazeContentCardUIViewControllerDelegate を BrazeContentCardUI.ViewController のデリゲートとして実装します。
iOS ビューコントローラーのオプションに関する詳細については、Apple の開発者向けドキュメントを参照してください。
Swift SDKのBrazeUI ライブラリーには、navigation またはモーダル という2 つのデフォルトビューコントロールコンテキストがあります。つまり、アプリやサイトに数行のコードを追加することで、これらのコンテキストにおいてコンテンツカードを統合できます。「カスタマイズガイド」で説明されているように、どちらのビューにもカスタマイズとスタイル指定のオプションが用意されています。Braze の標準ビューコントローラーの代わりにカスタムコンテンツカードビューコントローラーを作成して、カスタマイズオプションをさらに増やすこともできます。例については、コンテンツカードの UI チュートリアルを参照してください。
カスタム UI でコントロールバリアントコンテンツカードを処理するには、Braze.ContentCard.Control を渡した後、他のコンテンツカードタイプと同様に logImpression メソッドを呼び出します。オブジェクトはコントロールインプレッションを暗黙的にログに記録して、ユーザーがいつコントロールカードを表示したかを分析に通知します。
ナビゲーション
ナビゲーションコントローラーは、ナビゲーションインターフェイス内の1つ以上の子ビューコントローラーを管理するビューコントローラーです。以下は、BrazeContentCardUI.ViewController インスタンスをナビゲーションコントローラーにプッシュする例です。
1
2
3
4
5
6
7
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)
}
1
2
3
4
5
6
- (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 インスタンスをモーダルコントローラーにプッシュする例です。
1
2
3
4
5
6
7
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)
}
1
2
3
4
5
6
- (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 ビューコントローラーの使用例については、サンプルアプリで対応するコンテンツカードの UI サンプルを確認してください。
基準カード型式
コンテンツカードデータモデルは、Braze スウィフトSDKのBrazeKit モジュールで使用できます。このモジュールには、Braze.ContentCard タイプの実装である以下のコンテンツカードタイプが含まれています。コンテンツカードのプロパティとその使用法の完全なリストについては、ContentCard class を参照してください。
- 画像のみ
- キャプション付き画像
- クラシック
- クラシック”画像
- コントロール
コンテンツカードデータモデルにアクセスするには、braze インスタンスで contentCards.cards を呼び出します。カードデータの購読の詳細については、「分析のロギング」を参照してください。
BrazeKit には、Objective-C 互換のための代替ContentCardRaw クラスが用意されています。
カードメソッド
各カードは、カードの状態を管理するためのさまざまなメソッドを含む Context オブジェクトを使用して初期化されます。特定のカードオブジェクトの対応する状態プロパティを変更する場合は、これらのメソッドを呼び出します。
| 方法 | 説明 |
|---|---|
card.context?.logImpression() |
コンテンツカードのインプレッションイベントを記録する。 |
card.context?.logClick() |
コンテンツカードのクリックイベントを記録する。 |
card.context?.processClickAction() |
指定された ClickAction の入力を処理します。 |
card.context?.logDismissed() |
コンテンツカードを閉じたイベントをロギングします。 |
card.context?.logError() |
コンテンツカードに関するエラーを記録する。 |
card.context?.loadImage() |
指定されたコンテンツカードの画像をURLから読み込む。コンテンツカードに画像がない場合、このメソッドはゼロになる。 |
詳細については、Context クラスのドキュメントを参照してください。
前提条件
この機能を使う前に、Cordova Braze SDKを統合する必要がある。
カードフィード
Braze SDK にはデフォルトのカードフィードが含まれています。デフォルトのカードフィードを表示するには、launchContentCards() メソッドを使用します。このメソッドは、ユーザーのコンテンツカードの分析トラッキング、却下、レンダリングをすべて行います。
コンテンツカード
以下の追加メソッドを使用して、アプリ内にカスタムコンテンツカードフィードを構築できます。
| 方法 | 説明 | |
|---|---|---|
requestContentCardsRefresh() |
Braze SDKサーバーから最新のコンテンツカードを要求するためのバックグラウンドリクエストを送信する。 | |
getContentCardsFromServer(successCallback, errorCallback) |
Braze SDKからコンテンツカードを取得する。これにより、サーバーから最新のコンテンツカードが要求され、完了時にカードのリストが返されます。 | |
getContentCardsFromCache(successCallback, errorCallback) |
Braze SDKからコンテンツカードを取得する。これは、前回の更新時に更新されたローカルキャッシュから最新のカードリストを返す。 | |
logContentCardClicked(cardId) |
指定されたコンテンツカードIDのクリックを記録する。 | |
logContentCardImpression(cardId) |
与えられたコンテンツカードIDのインプレッションを記録する。 | |
logContentCardDismissed(cardId) |
指定されたコンテンツカード ID が閉じられたことを記録します。 |
Flutterのコンテンツカードについて
Braze SDK には、コンテンツカードを使い始めるためのデフォルトのカードフィードが含まれています。カードフィードを表示するには、braze.launchContentCards() メソッドを使用できます。Braze SDK に含まれるデフォルトのカードフィードは、ユーザーのコンテンツカードの分析トラッキング、却下、レンダリングをすべて処理します。
前提条件
この機能を使う前に、Flutter Braze SDKを統合する必要がある。
カードメソッド
プラグインパブリックインターフェイスで使用可能な以下のメソッドを使用して、アプリ内にカスタムコンテンツカードフィードを構築できます。
| 方法 | 説明 |
|---|---|
braze.requestContentCardsRefresh() |
Braze SDK サーバーから最新のコンテンツカードをリクエストします。 |
braze.logContentCardClicked(contentCard) |
指定されたコンテンツカードオブジェクトのクリックを記録します。 |
braze.logContentCardImpression(contentCard) |
指定されたコンテンツカードオブジェクトのインプレッションを記録します。 |
braze.logContentCardDismissed(contentCard) |
指定されたコンテンツカードオブジェクトの却下を記録します。 |
コンテンツカードデータの受信
Flutter アプリでコンテンツカードデータを受信するために、BrazePlugin は Dart ストリームを使用したコンテンツカードデータの送信をサポートしています。
BrazeContentCard オブジェクトは、description、title、image、url、extras などを含む、ネイティブモデルオブジェクトで使用可能なフィールドのサブセットをサポートしています。
Dart レイヤーでコンテンツカードデータをリッスンする
Dart レイヤーでコンテンツカードデータを受信するには、以下のコードを使用して StreamSubscription を作成し、braze.subscribeToContentCards() を呼び出します。不要になったストリームサブスクリプションは忘れずに cancel() してください。
1
2
3
4
5
6
7
8
9
// 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 マップに追加します。
1
BrazePlugin braze = new BrazePlugin(customConfigs: {replayCallbacksConfigKey: true});
React Nativeコンテンツカードについて
Braze SDK には、コンテンツカードを使い始めるためのデフォルトのカードフィードが含まれています。カードフィードを表示するには、Braze.launchContentCards() メソッドを使用できます。Braze SDK に含まれるデフォルトのカードフィードは、ユーザーのコンテンツカードの分析トラッキング、却下、レンダリングをすべて処理します。
前提条件
この機能を使う前に、React Native Braze SDKを統合する必要がある。
カードの方法
独自の UI を構築するには、利用可能なカードのリストを取得し、カードの更新をリッスンすることができます。
1
2
3
4
5
6
7
8
9
10
11
// 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 カードも含まれる。カードはユーザーに表示されないが、追跡されなければならない。
以下の追加メソッドを使用して、アプリ内にカスタムコンテンツカードフィードを構築できます。
| 方法 | 説明 |
|---|---|
launchContentCards() |
コンテンツカードUI要素を起動する。 |
requestContentCardsRefresh() |
Braze SDKサーバーから最新のコンテンツカードを要求する。結果として得られるカードのリストは、以前に登録されたコンテンツカードイベントの各リスナーに渡されます。 |
getContentCards() |
Braze SDKからコンテンツカードを取得する。これは、サーバーからのカードの最新のリストで解決されるプロミスを返します。 |
getCachedContentCards() |
キャッシュから最新のコンテンツカードの配列を返す。 |
logContentCardClicked(cardId) |
指定されたコンテンツカードIDのクリックを記録する。この方法は、分析でのみ使用されます。クリックアクションを実行するには、さらに processContentCardClickAction(cardId) を呼び出します。 |
logContentCardImpression(cardId) |
与えられたコンテンツカードIDのインプレッションを記録する。 |
logContentCardDismissed(cardId) |
指定されたコンテンツカード ID が閉じられたことを記録します。 |
processContentCardClickAction(cardId) |
特定のカードのアクションを実行する。 |
カードの種類とプロパティ
コンテンツカードデータモデルはReact Native SDKで利用可能で、以下のコンテンツカードカードタイプを提供する:画像のみ、キャプション付き画像、クラシック。また、特別なコントロールカードタイプもあり、これは指定されたカードのコントロールグループに属するユーザーに返される。各タイプは、独自のプロパティに加えて、ベースモデルから共通のプロパティを継承する。
ベースカードモデル
ベースカードモデルは、すべてのカードの基本的な動作を規定します。
| プロパティ | 説明 |
|---|---|
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 |
コンテンツカードの種類、IMAGE_ONLY |
image |
カードの画像のURL。 |
imageAspectRatio |
カード画像のアスペクト比。これは、画像の読み込みが完了する前にヒントとして利用するためです。特定の状況ではプロパティが提供されない場合があることに注意してください。 |
画像のみのカードの完全なリファレンスについては、[Android] および [iOS] のドキュメントを参照してください。
キャプション付き画像
キャプション付き画像カードはクリック可能なフルサイズの画像で、説明文が添えられています。
| プロパティ | 説明 |
|---|---|
type |
コンテンツカードの種類、CAPTIONED |
image |
カードの画像のURL。 |
imageAspectRatio |
カード画像のアスペクト比。これは、画像の読み込みが完了する前にヒントとして利用するためです。特定の状況ではプロパティが提供されない場合があることに注意してください。 |
title |
カードのタイトルテキスト。 |
cardDescription |
カードの説明テキスト。 |
domain |
(オプ シ ョ ナル) プ ロパテ ィ URL の リ ン ク テキス ト 、 た と えば"braze.com/resources/" 。カードの UI に表示され、カードをクリックした時の動作/方向を示すことができます。 |
キャプション付き画像カードの完全なリファレンスについては、Android および iOS のドキュメントを参照してください。
クラシック
クラシックカードには、タイトル、説明、およびオプションの画像がテキストの左側に表示されます。
| プロパティ | 説明 |
|---|---|
type |
コンテンツカードの種類、CLASSIC |
image |
(オプション)カードの画像のURL。 |
title |
カードのタイトルテキスト。 |
cardDescription |
カードの説明テキスト。 |
domain |
(オプ シ ョ ナル) プ ロパテ ィ URL の リ ン ク テキス ト 、 た と えば"braze.com/resources/" 。カードの UI に表示され、カードをクリックした時の動作/方向を示すことができます。 |
クラシック (テキストアナウンス) コンテンツカードの完全なリファレンスについては、Android および iOS のドキュメントを参照してください。クラシックな画像(短いニュース)カードについては、Androidと iOSのドキュメントを参照のこと。
コントロール
コントロールカードには、基本プロパティがすべて含まれていますが、いくつかの重要な違いがあります。最も重要な点:
isControlプロパティはtrueであることが保証されている。extrasプロパティは空であることが保証されます。
コントロールカードの完全なリファレンスについては、[Android] および [iOS] のドキュメントを参照してください。
前提条件
コンテンツカードを使用する前に、Braze Swift SDKをアプリに統合する必要がある。その後、tvOSアプリの設定ステップを完了させる必要がある。
コンテンツカードは Swift SDK を使用するヘッドレス UI でサポートされているため、独自のカスタムUI を実装する必要があります。これには tvOS のデフォルト UI やビューは含まれません。
tvOSアプリを設定する
ステップ1:新しいiOSアプリを作成する
Braze で、[設定] > [アプリの設定] を選択し、[アプリの追加] を選択します。tvOS アプリの名前を入力し、tvOS ではなく、iOS を選択し、アプリの追加を選択します。

tvOSチェックボックスを選択した場合、コンテンツカードをtvOS用にカスタマイズすることはできない。
ステップ2:アプリのAPIキーを取得する
アプリの設定で、新しいtvOSアプリを選択し、アプリのAPIキーをメモする。このキーを使って Xcode でアプリを設定します。

ステップ 3:BrazeKitを統合する
アプリの API キーを使用して、Xcode で Braze Swift SDK を tvOS プロジェクトに統合します。Braze Swift SDK から BrazeKit を統合するだけでよいです。
ステップ 4:カスタムUIを作成する
BrazeはtvOS上のコンテンツカードのデフォルトUIを提供していないため、自分でカスタマイズする必要がある。完全なチュートリアルについては、ステップ・バイ・ステップのチュートリアルを参照のこと:コンテンツカードをtvOS用にカスタマイズする。サンプルプロジェクトについては、Braze Swift SDKのサンプルを参照してください。
前提条件
この機能を使用する前に、Unity Braze SDKを統合する必要がある。
コンテンツカードをネイティブに表示する
次の呼び出しを使用して、コンテンツカードのデフォルトユーザーインターフェイスを表示できます。
1
Appboy.AppboyBinding.DisplayContentCards();
Unityでコンテンツカードデータを受信する
Unity ゲームオブジェクトを登録して、コンテンツカードの受信について通知を受けることができます。Brazeコンフィギュレーションエディタから設定のゲームオブジェクトリスナを使用することをお勧めします。
ゲームオブジェクトのリスナーを実行時に設定する必要がある場合は、AppboyBinding.ConfigureListener() を使用し、BrazeUnityMessageType.CONTENT_CARDS_UPDATED を指定します。
さらに、AppboyBinding.RequestContentCardsRefresh() を呼び出して、iOS 上のゲームオブジェクトリスナーでデータの受信を開始する必要があります。
コンテンツカードの解析
Content Cards ゲームオブジェクトコールバックで受信した受信string メッセージは、事前に提供されているContentCard モデルオブジェクトに構文解析すると便利です。
コンテンツカードの解析にはJSON解析が必要で、詳細は以下の例を参照のこと:
コンテンツカードのコールバックの例
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
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.");
}
}
コンテンツカードの更新
Braze からコンテンツカードを更新するには、次のいずれかのメソッドを呼び出します。
1
2
3
4
// results in a network request to Braze
AppboyBinding.RequestContentCardsRefresh()
AppboyBinding.RequestContentCardsRefreshFromCache()
分析
Braze によって直接表示されないコンテンツカードについては、クリックとインプレッションを手動でログに記録する必要があります。
Content カード でLogClick() およびLogImpression() を使用して、特定のカードs のクリックとインプレッションを記録します。
.NET MAUI コンテンツカードについて
Braze .NET MAUI(旧称Xamarin)SDKには、コンテンツカードの利用を開始するためのデフォルトのカードフィードが含まれている。Braze SDKに含まれるデフォルトのカードフィードは、ユーザーのコンテンツカードのすべてのアナリティクスのトラッキング、却下、レンダリングを処理する。
前提条件
この機能を使う前に、.NET MAUI Braze SDKを統合する必要がある。
カードのタイプとプロパティ
Braze .NET MAUI SDKには、共通のベースモデルを持つ3種類のユニークなコンテンツカードがある:バナー、キャプション付き画像, クラシック。各タイプはベースモデルから共通のプロパティを継承し、次の追加プロパティを持ちます。
基本カードモデル
| プロパティ | 説明 |
|---|---|
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 に表示され、カードをクリックした時の動作/方向を示すことができます。 |
クラシック (テキストアナウンス) コンテンツカードの完全なリファレンスについては、Android および iOS のドキュメントを参照してください。クラシック画像 (ショートニュース) カードの完全なリファレンスについては、Android および iOS のドキュメントを参照してください。
カードメソッド
以下の追加メソッドを使用して、アプリ内にカスタムコンテンツカードフィードを構築できます。
| 方法 | 説明 |
|---|---|
requestContentCardsRefresh() |
Braze SDKサーバーから最新のコンテンツカードを要求する。 |
getContentCards() |
Braze SDKからコンテンツカードを取得する。これでサーバーから最新のカードリストが返される。 |
logContentCardClicked(cardId) |
指定されたコンテンツカードIDのクリックを記録する。この方法は、分析でのみ使用されます。 |
logContentCardImpression(cardId) |
与えられたコンテンツカードIDのインプレッションを記録する。 |
logContentCardDismissed(cardId) |
指定されたコンテンツカード ID が閉じられたことを記録します。 |