Skip to content

コンテンツカードによって促進された

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

前提条件

Content Cardsを使用するには、Braze Web SDKをアプリに統合する必要があります。ただし、追加のセットアップは必要ありません。代わりに独自のUIを構築するには、コンテンツカードカスタマイズガイドを参照してください。

標準フィード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の統合をテストできます。

  1. Content Cards Campaignを作成し、テストユーザーをターゲットにします。
  2. Web SDKが統合されているWebサイトにログインします。
  3. ブラウザーのコンソールを開きます。Chromeの場合、ページを右クリックし、検証を選択してから、Console タブを選択します。
  4. コンソールで以下のコマンドを実行します。
    • window.braze.getCachedContentCards()
    • window.braze.toggleContentCards()

カードの種類とプロパティ

Content CardsデータモデルはWeb SDKで利用でき、次のContent Cardsタイプを提供します:ImageOnlyCaptionedImageClassicCardです。各タイプはベースモデル 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フィードを使用すると、インプレッションとクリックが自動的に追跡されます。

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フィードを同時に表示する必要がある場合は、代わりに showContentCardshideContentCards を使用してください。

カスタムフィードメソッド

独自の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) を呼び出します。

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フィードを表示するカスタムHTMLタグのGoogle Tag Managerでのタグ設定

Content Cardsとそのフィードの外観をより自由にカスタマイズするために、Content CardsをネイティブWebサイトに直接統合できます。これには、標準フィードUIを使用する方法と、カスタムフィードUIを作成する方法の2つのアプローチがあります。

標準フィードUIを実装する場合、Brazeメソッドの先頭に window. を追加する必要があります。たとえば、braze.showContentCards の代わりに window.braze.showContentCards を使用します。

カスタムフィードのスタイリングについては、GTMなしでSDKを統合した場合と同じステップです。たとえば、Content Cardsフィードの幅をカスタマイズする場合は、以下をCSSファイルに貼り付けます。

1
2
3
body .ab-feed {
    width: 800px;
}

テンプレートのアップグレード

Braze Web SDKの最新バージョンにアップグレードするには、Google Tag Managerダッシュボードで次の3つのステップを実行します。

  1. タグテンプレートを更新する
    ワークスペース内のテンプレートページに移動します。更新が利用可能であることを示すアイコンが表示されます。

    更新が利用可能であることを示すテンプレートページ

    そのアイコンをクリックし、変更を確認した後、Accept Update をクリックします。

    新旧のタグテンプレートを比較した画面と「Accept Update」ボタン

  2. バージョン番号を更新する
    タグテンプレートが更新されたら、Braze初期化タグを編集し、SDKバージョンを最新の major.minor バージョンに更新します。たとえば、最新バージョンが 4.1.2 の場合、4.1 と入力します。SDKのバージョン一覧は変更ログで確認できます。

    SDKバージョンを変更するための入力フィールドを持つBraze初期化テンプレート

  3. QAおよび公開
    Google Tag Managerのデバッグツールを使用して、新しいSDKバージョンが動作していることを確認してから、タグコンテナーに更新を公開します。

トラブルシューティング

タグデバッグを有効にする

それぞれのBrazeタグテンプレートにはオプションのGTM Tag Debuggingチェックボックスがあり、WebページのJavaScriptコンソールにデバッグメッセージを記録するために使用できます。

Google Tag Managerのデバッグツール

デバッグモードに入る

Google Tag Managerの統合をデバッグするもう1つの方法は、Googleのプレビューモード機能を使用することです。

これにより、Webページのデータレイヤーからトリガーされた各Brazeタグに送信されている値を特定できるほか、トリガーされたタグとトリガーされなかったタグについても確認できます。

Braze初期化タグの概要ページには、どのタグがトリガーされたかを含むタグの概要が表示されます。

カスタムイベントのタグシーケンスを確認する

カスタムイベントやその他のアクションがBrazeに記録されない場合、よくある原因は競合です。アクションタグ(Custom EventPurchaseなど)がBraze Initializationタグの完了前に発火してしまうことがあります。これを修正するには、GTMでタグシーケンスを設定します。

  1. 正しく記録されていないアクションタグを開きます。
  2. Advanced Settings > Tag Sequencingで、A tag that fires before [this tag] を選択します。
  3. セットアップタグとしてBraze Initializationタグを選択します。

これにより、アクションタグがBrazeにデータを送信する前に、SDKが完全に初期化されることが保証されます。

詳細ログの有効化

トラブルシューティング用の詳細なログをキャプチャするには、Google Tag Manager統合で詳細ログを有効にできます。これらのログは、ブラウザーの開発者ツールConsoleタブに表示されます。

Google Tag Manager統合で、Braze初期化タグに移動し、Enable Web SDK Loggingを選択します。

Braze初期化タグの概要ページで、Web SDKログを有効にするオプションがオンになっています。

前提条件

Brazeのコンテンツカードを使用する前に、アプリにBraze Android SDKを統合する必要があります。ただし、追加のセットアップは不要です。

Googleフラグメント

Androidでは、Content Cardsフィードは Braze Android UIプロジェクトで使用可能なフラグメントとして実装されます。ContentCardsFragmentクラスは、Content Cardsの内容を自動的に更新して表示し、使用状況の分析をログに記録します。ユーザーのContentCardsに表示できるカードは、Brazeダッシュボードで作成されます。

アクティビティにフラグメントを追加する方法については、Googleのフラグメントに関するドキュメントを参照してください。

カードのタイプとプロパティ

Content Cardsデータモデルは Android SDKで利用可能であり、以下の固有のコンテンツカードタイプを提供します。各タイプはベースモデルを共有しており、独自のプロパティを持つことに加え、ベースモデルから共通のプロパティを継承できます。完全な参照ドキュメントについては、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に記録します。

前提条件

コンテンツカードを使用するには、Braze Swift SDK をアプリに統合する必要があります。ただし、追加のセットアップは必要ありません。

ビューコントローラーコンテキスト

デフォルトのコンテンツカードUIは、Braze SDKのBrazeUIライブラリーから統合できます。brazeインスタンスを使用して、コンテンツカードビューコントローラーを作成します。コンテンツカードUIのライフサイクルをインターセプトして対応するには、BrazeContentCardUIViewControllerDelegateBrazeContentCardUI.ViewControllerのデリゲートとして実装します。

Swift SDKのBrazeUIライブラリーには、ナビゲーションまたはモーダルという2つのデフォルトビューコントローラーコンテキストがあります。つまり、アプリやサイトに数行のコードを追加することで、これらのコンテキストにおいてコンテンツカードを統合できます。カスタマイズガイドで説明されているように、どちらのビューにもカスタマイズとスタイル指定のオプションが用意されています。Brazeの標準ビューコントローラーの代わりにカスタムコンテンツカードビューコントローラーを作成して、カスタマイズオプションをさらに増やすこともできます。例については、コンテンツカードUIチュートリアルを参照してください。

ナビゲーション

ナビゲーションコントローラーは、ナビゲーションインターフェイス内の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];
}

モーダル

モーダルプレゼンテーションを使用して、ユーザーに重要情報の入力を求める場合などに、アプリのワークフローを一時的に中断させることができます。このモデルビューでは、上部にナビゲーションバーがあり、バーの横にDoneボタンがあります。以下は、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 Swift SDKのBrazeKitモジュールで使用できます。このモジュールには、Braze.ContentCardタイプの実装である以下のコンテンツカードタイプが含まれています。コンテンツカードのプロパティとその使用法の完全なリストについては、ContentCardクラスを参照してください。

  • 画像のみ
  • キャプション付き画像
  • クラシック
  • クラシック画像
  • コントロール

コンテンツカードデータモデルにアクセスするには、brazeインスタンスでcontentCards.cardsを呼び出します。カードデータのサブスクライブの詳細については、分析のロギングを参照してください。

カードメソッド

各カードは、カードの状態を管理するためのさまざまなメソッドを含むContextオブジェクトを使用して初期化されます。特定のカードオブジェクトの対応する状態プロパティを変更する場合は、これらのメソッドを呼び出します。

メソッド 説明
card.context?.logImpression() コンテンツカードのインプレッションイベントを記録します。
card.context?.logClick() コンテンツカードのクリックイベントを記録します。
card.context?.processClickAction() 指定されたClickActionの入力を処理します。
card.context?.logDismissed() コンテンツカードの非表示イベントを記録します。
card.context?.logError() コンテンツカードに関連するエラーを記録します。
card.context?.loadImage() 指定されたコンテンツカードの画像をURLから読み込みます。コンテンツカードに画像がない場合、このメソッドは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に含まれるデフォルトのカードフィードは、ユーザーのコンテンツカードの分析トラッキング、却下、レンダリングをすべて処理します。

前提条件

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

カードメソッド

プラグインパブリックインターフェイスで使用可能な以下のメソッドを使用して、アプリ内にカスタムContent Cardsフィードを構築できます。

メソッド 説明
braze.requestContentCardsRefresh() Braze SDKサーバーから最新のContent Cardsをリクエストします。
braze.logContentCardClicked(contentCard) 指定されたコンテンツカードオブジェクトのクリックを記録します。
braze.logContentCardImpression(contentCard) 指定されたコンテンツカードオブジェクトのインプレッションを記録します。
braze.logContentCardDismissed(contentCard) 指定されたコンテンツカードオブジェクトの却下を記録します。

コンテンツカードデータの受信

Flutterアプリでコンテンツカードデータを受信するために、BrazePluginDart Streamsを使用したコンテンツカードデータの送信をサポートしています。

BrazeContentCard オブジェクトは、descriptiontitleimageurlextrasなどを含む、ネイティブモデルオブジェクトで使用可能なフィールドのサブセットをサポートしています。

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 Content Cardsについて

Braze SDKには、Content Cardsを使い始めるためのデフォルトのカードフィードが含まれています。カードフィードを表示するには、Braze.launchContentCards() メソッドを使用できます。Braze SDKに含まれるデフォルトのカードフィードは、ユーザーのContent Cardsの分析トラッキング、非表示、レンダリングをすべて処理します。

前提条件

この機能を使う前に、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();

以下の追加メソッドを使用して、アプリ内にカスタムContent Cardsフィードを構築できます。

メソッド 説明
launchContentCards() Content CardsのUI要素を起動します。
requestContentCardsRefresh() Braze SDKサーバーから最新のContent Cardsをリクエストします。結果として得られるカードのリストは、以前に登録されたコンテンツカードイベントの各リスナーに渡されます。
getContentCards() Braze SDKからContent Cardsを取得します。サーバーからの最新のカードリストで解決されるPromiseを返します。
getCachedContentCards() キャッシュから最新のContent Cards配列を返します。
logContentCardClicked(cardId) 指定されたContent Card IDのクリックを記録します。このメソッドは分析専用です。クリックアクションを実行するには、追加で processContentCardClickAction(cardId) を呼び出してください。
logContentCardImpression(cardId) 指定されたContent Card IDのインプレッションを記録します。
logContentCardDismissed(cardId) 指定されたContent Card 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 プロパティは空であることが保証されています。

コントロールカードの完全なリファレンスについては、Android および iOS のドキュメントを参照してください。

前提条件

コンテンツカードを使用する前に、Braze Swift SDKをアプリに統合する必要がある。その後、tvOSアプリの設定ステップを完了させる必要がある。

tvOSアプリを設定する

ステップ1:新しいiOSアプリを作成する

Braze で、[設定] > [アプリの設定] を選択し、[アプリの追加] を選択します。tvOS アプリの名前を入力し、tvOS ではなくiOS を選択し、アプリの追加を選択します。

ALT_TEXT.

ステップ2:アプリのAPIキーを取得する

アプリの設定で、新しいtvOSアプリを選択し、アプリのAPIキーをメモする。このキーを使って Xcode でアプリを設定します。

ALT_TEXT

ステップ 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には、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 Card IDのクリックを記録します。このメソッドは分析のみに使用されます。
logContentCardImpression(cardId) 指定されたContent Card IDのインプレッションを記録します。
logContentCardDismissed(cardId) 指定されたContent Card IDの却下を記録します。
New Stuff!