コンテンツにスキップ

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タイプを提供します: 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の画像(GIFを含む)は、標準のHTML <img> タグを使用してレンダリングされます。GIFのサポートはユーザーのブラウザ機能に依存し、Web SDKの最小バージョンは必要ありません。すべてのモダンブラウザはGIF再生をネイティブにサポートしています。

コントロールグループ

デフォルトのContent Cardsフィードを使用している場合、インプレッションとクリックは自動的に追跡されます。

Content Cardsのカスタム統合を使用している場合、コントロールカードが表示されたであろうタイミングでインプレッションを記録する必要があります。この際、A/Bテストでインプレッションを記録する場合はコントロールカードを必ず処理するようにしてください。これらのカードは空白であり、ユーザーには表示されませんが、コントロールカード以外のカードとのパフォーマンスを比較するために、インプレッションを記録する必要があります。

Content Cardが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を使用する場合、デフォルトフィード外ではインプレッションが自動的に追跡されないため、正確なキャンペーンレポートに必要です。
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)を呼び出します。
  • クリック時の動作: カードに設定されたクリック時のアクション(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.showContentCardswindow.braze.showContentCardsにする必要があります。

カスタムフィードのスタイリングについては、GTMなしでSDKを統合した場合と同じ手順です。たとえば、Content Cardsフィードの幅をカスタマイズしたい場合は、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にログ記録されない場合、よくある原因は、アクションタグ(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を選択します。

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に手動でログ記録します。

前提条件

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

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

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

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

モーダル

モーダルプレゼンテーションを使用して、ユーザーに重要情報の入力を求める場合などに、アプリのワークフローを一時的に中断させることができます。このモデルビューでは、上部にナビゲーションバーがあり、バーの横にDoneボタンがあります。以下は、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ビューコントローラーの使用例については、サンプルアプリで対応するコンテンツカード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に含まれるデフォルトのカードフィードは、ユーザーの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アプリでコンテンツカードデータを受信するために、BrazePluginDart Streamsを使用したコンテンツカードデータの送信をサポートしています。

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

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アプリの名前を入力し、iOStvOSではありません)を選択してから、アプリを追加を選択します。

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については、クリックとインプレッションを手動でログに記録する必要があります。

ContentCardLogClick()および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!