コンテンツにスキップ

Content Cards

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

前提条件

Content Cardsを使用する前に、アプリにBraze Web SDKを統合する必要があります。ただし、追加の設定は不要です。独自のUIを構築する場合は、Content Cardsカスタマイズガイドを参照してください。

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

  1. Content Cardsキャンペーンを作成し、テストユーザーをターゲットに設定します。
  2. Web SDKが統合されているWebサイトにログインします。
  3. ブラウザのコンソールを開きます。Chromeの場合、ページを右クリックし、検証を選択してから、Consoleタブを選択します。
  4. コンソールで以下のコマンドを実行します:
    • 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を構築する場合は、以下のメソッドを使用します。

メソッド 説明
subscribeToContentCardsEvents 現在のユーザーのContent Cardsイベント(キャッシュのリプレイ、更新の完了、エラーなど)が発生するたびに呼び出されるコールバック関数を登録します。カスタムフィード用のカードデータを受信する主要な方法として使用します。初回セッションのイベントを受信するには、openSession()より前に呼び出す必要があります。イベントの一覧については、Content Cardsの作成を参照してください。非推奨のsubscribeToContentCardsUpdatesに代わるメソッドです。
getCachedContentCards 最新のContent Cards更新から現在利用可能なすべてのカードを返します。新しいサーバーリクエストを待たずにページ読み込み時にすぐにカードを表示する場合(アクティブなセッション中にユーザーがページに戻った場合など)に使用します。
requestContentCardsRefresh BrazeサーバーからContent Cardsの即時更新をリクエストします。デフォルトでは、カードはセッション開始時およびデフォルトフィードが再度開かれたときに更新されます。特定のユーザーアクションの後など、他のタイミングで強制的に更新する場合に使用します。レート制限にご注意ください。
logContentCardImpressions カードの配列に対してインプレッションイベントを記録します。カードがレンダリングされ、ユーザーに表示されたときに呼び出します。カスタムUIを使用する場合、デフォルトフィード以外ではインプレッションが自動的に追跡されないため、正確なキャンペーンレポートのために必要です。
logContentCardClick 単一のカードに対してクリックイベントを記録します。カスタムUI内でユーザーがカードを操作したときに呼び出します。デフォルトフィード以外ではクリックが自動的に追跡されないため、正確なキャンペーンレポートのために必要です。
handleBrazeAction カードのURLを処理し、Brazeアクション(brazeActions:// URL)や標準URLナビゲーションなど、設定されたクリック時アクションを実行します。Brazeダッシュボードで設定されたクリック時の動作が確実に実行されるように、カードのクリックハンドラー内で呼び出してください。
dismissCard プログラムによってカードを非表示にし、ユーザーのフィードから削除します。カスタムUI内でユーザーがカードを非表示にできるようにする場合に使用します。

詳細については、SDKリファレンスドキュメントを参照してください。

ベストプラクティス

メソッドを正しい順序で呼び出す

カスタムフィードの場合、Content CardsはsubscribeToContentCardsEvents()(または非推奨の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
// - Available in version 7.0.0+
braze.subscribeToContentCardsEvents((event) => {
  switch (event.type) {
    case braze.ChannelEventType.CACHE_REPLAY:
    case braze.ChannelEventType.CACHE_LOAD:
    case braze.ChannelEventType.DATA_UPDATED:
      renderCards(event.cacheSnapshot.contentCards.cards);
      break;
  }
});

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

Web SDK 7.0.0以降ではsubscribeToContentCardsEventsを使用してください。subscribeToContentCardsUpdatesは7.0.0で非推奨となった旧パターンです。

キャッシュされたカードを使用してページ読み込み間でコンテンツを維持する

非推奨のsubscribeToContentCardsUpdates()メソッドは、新しい更新があった場合(セッション開始時など)にのみコールバックを呼び出すため、ユーザーがセッション中にページを更新すると、カスタムフィードからカードが消えることがありました。subscribeToContentCardsEvents()はこの問題を回避します。購読するとすぐにキャッシュされたカードを含むCACHE_REPLAYイベントが送信されるため、カスタムフィードはすべてのページ読み込み時にローカルキャッシュからレンダリングされます。

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

// - Available in version 7.0.0+
braze.subscribeToContentCardsEvents((event) => {
  switch (event.type) {
    case braze.ChannelEventType.CACHE_REPLAY:
      // Display cached cards immediately
      renderCards(event.cacheSnapshot.contentCards.cards);
      break;
    case braze.ChannelEventType.CACHE_LOAD:
    case braze.ChannelEventType.DATA_UPDATED:
      // Display cards after the cache reloads or a refresh finishes
      renderCards(event.cacheSnapshot.contentCards.cards);
      break;
  }
});

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

Web SDK 7.0.0以降では、subscribeToContentCardsEventsがCACHE_REPLAYイベントですぐにキャッシュされたカードを配信するため、getCachedContentCards()を呼び出す必要はありません。subscribeToContentCardsUpdatesは7.0.0で非推奨となっています。

購読の外部でキャッシュされたカードが必要な場合は、getCachedContentCards()を呼び出してください。

カスタムフィードの分析をログに記録する

カスタム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フィードが有効になります。

<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フィードのWidthをカスタマイズしたい場合は、CSSファイルに以下を貼り付けます。

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に記録されない場合、よくある原因は競合です。アクションタグ(カスタムイベントや購入など)がBraze初期化タグの完了前に発火してしまうことがあります。これを修正するには、GTMでタグシーケンスを設定します。

  1. 正しく記録されていないアクションタグを開きます。
  2. 詳細設定 > タグシーケンスで、[このタグ]の前に発火するタグを選択します。
  3. セットアップタグとしてBraze初期化タグを選択します。

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

詳細ログの有効化

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

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

Web SDKログの有効化オプションがオンになっているBraze初期化タグのサマリーページ。

前提条件

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チュートリアルを参照してください。

ナビゲーション

ナビゲーションコントローラーは、ナビゲーションインターフェイスで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を呼び出します。カードデータのサブスクリプションの詳細については、分析のログを参照してください。

カードメソッド

各カードは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();

以下の追加メソッドを使用して、アプリ内にカスタム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プロパティは空であることが保証されています。

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

前提条件

Content Cardsを使用するには、Braze Swift SDKをアプリに統合してください。その後、tvOSアプリのセットアップ手順を完了します。

tvOSアプリのセットアップ

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

Brazeで、設定 > アプリ設定を選択し、アプリを追加を選択します。tvOSアプリの名前を入力し、iOS(tvOSではありません)を選択してから、アプリを追加を選択します。

tvOSアプリを登録するためにiOSプラットフォームが選択されたBrazeのアプリ追加ダイアログ

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

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

SDK統合に使用されるAPIキーが表示されたtvOSアプリのアプリ設定

ステップ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の却下を記録します。
New Stuff!