Web SDK リポジトリガイド
Braze Web SDKについて
Braze Web SDKを使用すると、BrazeのカスタマーエンゲージメントプラットフォームをWebアプリケーションに直接統合できます。TypeScriptで構築され、モダンなWeb開発向けに設計されたこのSDKは、ユーザー管理、メッセージング、分析、フィーチャーフラグのための包括的なツールを提供します。
できること
- ユーザー管理:Webアプリケーション全体でユーザーのアイデンティティ、属性、行動をトラッキングおよび管理します
- アプリ内メッセージ:ユーザーがサイトをアクティブに使用している間に、ターゲティングされたメッセージや通知を表示します
- Content Cards:リアルタイムで更新されるパーソナライズされたコンテンツフィードやプロモーションカードを表示します
- バナー:サイト内の特定のプレースメントにバナーメッセージを表示します
- プッシュ通知:ユーザーがサイトにいないときでもWebプッシュ通知を送信してエンゲージメントを促進します
- フィーチャーフラグ:サーバーサイドのフィーチャーフラグ管理で機能のロールアウトやABテストをコントロールします
- 分析:カスタムイベント、ユーザーインタラクション、コンバージョン指標をトラッキングします
- セッション管理:ユーザーセッションとエンゲージメントパターンを監視します
シングルページアプリケーション、eコマースサイト、コンテンツプラットフォームのいずれを構築する場合でも、Braze Web SDKはパーソナライズされた魅力的なユーザー体験を創出し、成長とリテンションを促進するために必要なツールを提供します。
前提条件
Braze Web SDKを統合する前に、以下が必要です。
- Brazeアカウント: APIアクセスが可能なBrazeアカウント
- APIキー: BrazeダッシュボードからのアプリのAPIキー
- SDKエンドポイント: BrazeのSDKエンドポイントURL(例:
sdk.iad-01.braze.com)
認証情報の取得
- APIキー: Brazeダッシュボードの設定 > APIキーにあります
- SDKエンドポイント: 設定 > SDK認証 > エンドポイントにあります
- Service Worker: プッシュ通知に必要です(プッシュ通知セクションを参照)
インストール
npm install --save @braze/web-sdk
# or, using yarn:
# yarn add @braze/web-sdk
クイックスタート
以下のスニペットは、Braze Web SDKを初期化するために必要な最小限の設定を示しています。
import * as braze from "@braze/web-sdk";
// Initialize the SDK
braze.initialize('YOUR-API-KEY-HERE', {
baseUrl: "YOUR-SDK-ENDPOINT-HERE",
});
braze.changeUser('Jane Doe');
設定リファレンス
初期化オプション
initialize関数は、以下のプロパティを持つオプションオブジェクトを受け取ります。
| オプション | 型 | デフォルト | 説明 |
|---|---|---|---|
baseUrl |
string |
必須 | このオプションは、Braze Web SDKがインテグレーションに適切なエンドポイントを使用するように設定するために必要です。例:braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'sdk.iad-03.braze.com' }) |
enableLogging |
boolean |
false |
デフォルトでログを有効にするには true に設定します。これにより Braze が JavaScript コンソールにログを出力するようになり、すべてのユーザーに表示されます。本番環境にページをリリースする前に、このオプションを削除するか、setLogger で別のロガーを指定することをお勧めします。 |
allowUserSuppliedJavascript |
boolean |
false |
デフォルトでは、Braze Web SDKはユーザー提供の JavaScript クリックアクション、または HTML アプリ内メッセージおよびバナーを許可しません。これらは Braze ダッシュボードユーザーがサイト上で JavaScript を実行できるようにするためです。Braze ダッシュボードユーザーが悪意のない JavaScript クリックアクションを記述することを信頼する場合は、このプロパティを true に設定してください。 |
doNotLoadFontAwesome |
boolean |
false |
Braze はアプリ内メッセージのアイコンに Font Awesome を使用します。デフォルトでは、Braze は FontAwesome CDN から FontAwesome 4.7.0 を自動的に読み込みます。この動作を無効にするには(例:サイトでカスタマイズされたバージョンの FontAwesome を使用している場合)、このオプションを true に設定します。この場合、FontAwesome がサイトに読み込まれていることを確認する責任があります。そうしないとアプリ内メッセージが正しく表示されない可能性があります。 |
inAppMessageZIndex |
number |
999999 |
デフォルトでは、Braze SDKはIn-App Messagesを z-index 999999 で表示します。このデフォルトを上書きするには、このオプションに値を指定します。 |
sessionTimeoutInSeconds |
number |
30 |
デフォルトでは、セッションは30秒間操作がないとタイムアウトします。このデフォルトを上書きするには、このオプションに値を指定します。 |
deviceId |
string |
自動生成 | デフォルトでは、Braze はランダムな GUID をデバイス ID として割り当てます。このデフォルトを上書きして独自の値を指定するには、この設定オプションに値を指定します。 |
appVersion |
string |
undefined |
このオプションに値を指定すると、Braze に送信されるユーザーイベントが指定されたバージョンに関連付けられ、ユーザーセグメンテーションに使用できます。 |
appVersionNumber |
string |
undefined |
ユーザーセグメンテーションに使用できる数値のアプリバージョン値です。この値は「1.2.3.4」のように4つのフィールドで送信する必要があり、そうでない場合は無視されます。注:appVersion も設定する必要があり、同じ値またはこのバージョンの一意の名前を指定します。 |
contentSecurityNonce |
string |
undefined |
このオプションに値を指定すると、Braze SDKは SDKが作成するすべての <script> および <style> 要素に nonce を追加します。これにより、Braze SDKをWebサイトのコンテンツセキュリティポリシーと連携させることができます。この nonce の設定に加えて、FontAwesome の読み込みを許可する必要がある場合があります。コンテンツセキュリティポリシーの許可リストに use.fontawesome.com を追加するか、doNotLoadFontAwesome オプションを使用して手動で読み込むことで対応できます。 |
noCookies |
boolean |
false |
デフォルトでは、Braze Web SDKは Cookie を使用します。Cookie の使用を無効にするには、このオプションを true に設定します。Cookie を無効にすると、セッション間でユーザーの ID を記憶する SDKの機能に影響を与える可能性があることに注意してください。 |
allowCrawlerActivity |
boolean |
false |
デフォルトでは、Braze Web SDKはユーザーエージェント文字列に基づいて、Google などの既知のスパイダーや Web クローラーからのアクティビティを無視します。これにより、データポイントが節約され、分析がより正確になり、ページランクが向上する可能性があります。ただし、これらのクローラーのアクティビティを Braze に記録したい場合は、このオプションを true に設定できます。 |
disablePushTokenMaintenance |
boolean |
false |
デフォルトでは、すでに Web プッシュ許可を付与しているユーザー(requestPushPermission や以前のプッシュプロバイダー経由など)は、配信到達性を確保するために新しいセッションで自動的にプッシュトークンを Braze バックエンドと同期します。この動作を無効にするには、このオプションを true に設定します。 |
enableSdkAuthentication |
boolean |
false |
SDK認証機能を有効にするには true に設定します。SDK認証の詳細については、製品ドキュメントを参照してください。 |
manageServiceWorkerExternally |
boolean |
false |
デフォルトでは、Braze Web SDKはプッシュ通知用に独自のサービスワーカーを管理します。アプリケーションで既にサービスワーカーを管理しており、Braze サービスワーカーの機能を組み込みたい場合は、このオプションを true に設定し、サービスワーカーファイルに Braze サービスワーカーのコードを含めてください。 |
minimumIntervalBetweenTriggerActionsInSeconds |
number |
30 |
デフォルトでは、トリガーアクション(アプリ内メッセージの表示など)はユーザーあたり30秒に1回だけ実行できます。このデフォルトを上書きするには、このオプションに値を指定します。 |
serviceWorkerLocation |
string |
undefined |
デフォルトでは、Braze Web SDKはドメインのルートでサービスワーカーファイルを探します。このデフォルトを上書きしてサービスワーカーファイルのカスタムロケーションを指定するには、このオプションに値を指定します。 |
safariWebsitePushId |
string |
undefined |
Safari プッシュ通知に必要です。この値は Apple Developer アカウントで確認できます。Safari プッシュ通知の設定について詳しくは、製品ドキュメントを参照してください。 |
localization |
string |
undefined |
このオプションに値を指定すると、Braze SDKはアプリ内メッセージとContent Cardsをそのロケールで表示しようとします。 |
openInAppMessagesInNewTab |
boolean |
false |
デフォルトでは、アプリ内メッセージのリンクは同じタブで開きます。新しいタブで開くようにするには、このオプションを true に設定します。 |
openCardsInNewTab |
boolean |
false |
デフォルトでは、Content Cardsのリンクは同じタブで開きます。新しいタブで開くようにするには、このオプションを true に設定します。 |
requireExplicitInAppMessageDismissal |
boolean |
false |
デフォルトでは、アプリ内メッセージはメッセージの外側をクリックするか Escape キーを押すことで閉じることができます。ユーザーが明示的に閉じるボタンまたはアクションボタンをクリックしてメッセージを閉じることを必須にするには、このオプションを true に設定します。 |
devicePropertyAllowlist |
string[] |
undefined |
デフォルトでは、Braze SDKは DeviceProperties のすべてのデバイスプロパティを自動的に検出・収集します。この動作を上書きするには、DeviceProperties の配列を指定します。Braze サーバーへのすべてのプロパティ送信を無効にするには、空の配列を指定します。一部のプロパティがないと、すべての機能が正常に動作しない場合があることに注意してください。たとえば、タイムゾーンがないと、ローカルタイムゾーン配信が機能しません。 |
serviceWorkerScope |
string |
undefined |
デフォルトでは、Braze Web SDKはサービスワーカーをデフォルトのスコープ(サービスワーカーのディレクトリ)で登録します。このデフォルトを上書きしてサービスワーカーのカスタムスコープを指定するには、このオプションに値を指定します。 |
コア機能
初期化とセットアップ
基本的な初期化
import * as braze from "@braze/web-sdk";
// Initialize the SDK
braze.initialize('YOUR-API-KEY-HERE', {
baseUrl: 'YOUR-SDK-ENDPOINT-HERE',
enableLogging: true // Remove in production
});
// Start a session
braze.openSession();
高度な初期化オプション
import * as braze from "@braze/web-sdk";
braze.initialize('YOUR-API-KEY-HERE', {
baseUrl: 'YOUR-SDK-ENDPOINT-HERE',
enableLogging: true,
allowUserSuppliedJavascript: true,
doNotLoadFontAwesome: false,
inAppMessageZIndex: 999999,
sessionTimeoutInSeconds: 30,
deviceId: 'custom-device-id',
appVersion: '1.0.0',
contentSecurityNonce: 'your-nonce-here'
});
ユーザー管理
ユーザーの変更
import { changeUser } from "@braze/web-sdk";
// Change to a new user
changeUser('user-123');
ユーザー属性の設定
import { getUser } from "@braze/web-sdk";
const user = getUser();
if (user) {
user.setEmail('user@example.com');
user.setFirstName('John');
user.setLastName('Doe');
user.setCustomUserAttribute('subscription_tier', 'premium');
user.setCustomUserAttribute('last_login', new Date());
}
ユーザーのロケーション設定
import { getUser } from "@braze/web-sdk";
const user = getUser();
if (user) {
user.setCountry('US');
user.setHomeCity('San Francisco');
user.setLanguage('en');
user.setCustomLocationAttribute('latitude', 37.7749);
user.setCustomLocationAttribute('longitude', -122.4194);
}
ユーザーエイリアスと購読グループ
import { getUser } from "@braze/web-sdk";
const user = getUser();
if (user) {
// Add alias
user.addAlias('external_id', '12345');
// Add to subscription group
user.addToSubscriptionGroup('newsletter_subscribers');
// Remove from subscription group
user.removeFromSubscriptionGroup('old_subscribers');
}
ユーザーのログアウト
import { wipeData } from "@braze/web-sdk";
// There is no explicit method to logout. To "forget" the current users entirely, use wipeData().
// This is a complete data wipe (use with caution, this wipes things such as device ID)
wipeData();
アプリ内メッセージ
自動表示
import { automaticallyShowInAppMessages } from "@braze/web-sdk";
// Automatically show in-app messages
automaticallyShowInAppMessages();
手動表示
import { subscribeToInAppMessage, showInAppMessage } from "@braze/web-sdk";
// Subscribe to in-app messages
subscribeToInAppMessage((inAppMessage) => {
// Show the message
showInAppMessage(inAppMessage);
});
カスタムアプリ内メッセージハンドリング
import { subscribeToInAppMessage, showInAppMessage } from "@braze/web-sdk";
subscribeToInAppMessage((inAppMessage) => {
// Custom logic before showing
if (inAppMessage.getExtras()['priority'] === 'high') {
showInAppMessage(inAppMessage);
}
});
アプリ内メッセージのインタラクションを記録する
import {
logInAppMessageClick,
logInAppMessageImpression,
logInAppMessageButtonClick
} from "@braze/web-sdk";
// Log when user sees the message
logInAppMessageImpression(inAppMessage);
// Log when user clicks the message
logInAppMessageClick(inAppMessage);
// Log when user clicks a button in the message
logInAppMessageButtonClick(inAppMessage, button);
カスタムHTMLアプリ内メッセージ
import { subscribeToInAppMessage, logInAppMessageImpression, logInAppMessageClick } from "@braze/web-sdk";
// Don't call automaticallyShowInAppMessages() when using custom rendering
// braze.automaticallyShowInAppMessages(); // Comment this out
subscribeToInAppMessage((inAppMessage) => {
// Extract message data
const messageData = {
title: inAppMessage.getMessage(),
body: inAppMessage.getBody(),
imageUrl: inAppMessage.getImageUrl(),
buttons: inAppMessage.getButtons(),
deepLink: inAppMessage.getExtras()['deep_link_url']
};
// Define your own HTML structure, using messageData
const customHTML = ` <!-- Add your custom styling and structure -->`;
/* Render the In-App Message here */
// Here we naively log an impression once the message is rendered.
// Be precise about exactly when you want to log an impression (ie. only the first time it enters the view port).
logInAppMessageImpression(inAppMessage);
});
// Handle button clicks and deep linking
const handleButtonClick = (button, inAppMessage) => {
logInAppMessageClick(inAppMessage);
// Handle additional click actions (ie. deep linking)
};
Content Cards
Content Cardsの表示
import { showContentCards } from "@braze/web-sdk";
// Show content cards in default location
showContentCards();
// Show in specific container
const container = document.getElementById('content-cards-container');
showContentCards(container);
Content Cardsの更新を購読する
import { subscribeToContentCardsUpdates } from "@braze/web-sdk";
subscribeToContentCardsUpdates((cards) => {
console.log('Content cards updated:', cards);
// Display cards or update UI
});
Content Cardsのインタラクションを記録する
import {
logContentCardClick,
logContentCardImpressions,
logCardDismissal
} from "@braze/web-sdk";
// Log card impressions
logContentCardImpressions(cards);
// Log card clicks
logContentCardClick(card);
// Log card dismissals
logCardDismissal(card);
Content Cardsのフィルタリング
import { showContentCards } from "@braze/web-sdk";
// Show only pinned cards
// You can also provide a parent element instead of null
showContentCards(null, (cards) => {
return cards.filter(card => card.getIsPinned());
});
Content Cardsの更新をリクエストする
import { requestContentCardsRefresh } from "@braze/web-sdk";
requestContentCardsRefresh(
() => console.log('Content cards refreshed'),
() => console.log('Failed to refresh content cards')
);
カスタム Content Cards
import { subscribeToContentCardsUpdates, logContentCardClick, logContentCardImpressions, requestContentCardsRefresh } from "@braze/web-sdk";
// State for impression de-duping
const loggedImpressions = new Set();
const idToCard = new Map();
subscribeToContentCardsUpdates((cards) => {
// Build cards one by one
cards.getCards().forEach(card => {
// Skip control cards
if (card.getIsControl()) return;
// Extract card data
const cardData = {
id: card.getId(),
title: card.getTitle(),
description: card.getDescription(),
imageUrl: card.getImageUrl(),
url: card.getUrl(),
extras: card.getExtras()
};
// Define your own HTML structure, using cardData
const customHTML = ` <!-- Add your custom styling and structure -->`;
/* Render each card here */
// Basic observer for impression logging.
// Be precise about exactly when you want to log an impression (ie. only the first time it enters the view port).
const observer = new IntersectionObserver((entries) => {
entries.forEach(entry => {
if (entry.isIntersecting) {
logContentCardImpressions([card]);
}
});
});
// Observe card element when rendered
// observer.observe(cardElement);
});
});
// Handle card clicks
const handleCardClick = (card) => {
logContentCardClick(card);
// Handle additional click actions (ie. navigation)
};
プッシュ通知
プッシュ許可のリクエスト
import { requestPushPermission } from "@braze/web-sdk";
requestPushPermission(
() => console.log('Push permission granted'),
() => console.log('Push permission denied')
);
プッシュサポートの確認
import { isPushSupported, isPushPermissionGranted } from "@braze/web-sdk";
if (isPushSupported()) {
if (isPushPermissionGranted()) {
console.log('Push notifications are enabled');
} else {
console.log('Push permission not granted');
}
}
プッシュの登録解除
import { unregisterPush } from "@braze/web-sdk";
unregisterPush(
() => console.log('Successfully unregistered'),
() => console.log('Failed to unregister')
);
フィーチャーフラグ
フィーチャーフラグの取得
import { getFeatureFlag } from "@braze/web-sdk";
const featureFlag = getFeatureFlag('new_checkout_flow');
if (featureFlag) {
const isEnabled = featureFlag.getBooleanProperty('enabled', false);
const rolloutPercentage = featureFlag.getNumberProperty('rollout_percentage', 0);
if (isEnabled) {
// Enable new checkout flow
}
}
フィーチャーフラグの更新を購読する
import { subscribeToFeatureFlagsUpdates } from "@braze/web-sdk";
subscribeToFeatureFlagsUpdates((featureFlags) => {
featureFlags.forEach(flag => {
console.log(`Feature flag ${flag.getId()}: ${flag.getBooleanProperty('enabled')}`);
});
});
フィーチャーフラグのインプレッションを記録する
import { logFeatureFlagImpression } from "@braze/web-sdk";
const featureFlag = getFeatureFlag('new_feature');
if (featureFlag) {
logFeatureFlagImpression(featureFlag);
}
フィーチャーフラグの更新をリクエストする
import { refreshFeatureFlags } from "@braze/web-sdk";
refreshFeatureFlags(
() => console.log('Feature flags refreshed'),
() => console.log('Failed to refresh feature flags')
);
バナー
バナーの取得と表示
import { getBanner, insertBanner } from "@braze/web-sdk";
const banner = getBanner('homepage_banner');
if (banner) {
// Insert banner into specific element
const container = document.getElementById('banner-container');
insertBanner(banner, container);
}
バナーの更新を購読する
import { insertBanner, subscribeToBannersUpdates } from "@braze/web-sdk";
subscribeToBannersUpdates((banners) => {
Object.entries(banners).forEach(([placementId, banner]) => {
if (banner) {
console.log(`Banner for ${placementId}:`, banner);
// Insert banner into specific element
const container = document.getElementById(`banner-container-${placementId}`);
insertBanner(banner, container);
}
});
});
カスタムUIでバナーを閉じる
import { dismissBanner, getBanner, subscribeToBannersUpdates } from "@braze/web-sdk";
subscribeToBannersUpdates((banners) => {
const banner = getBanner("homepage_banner");
const container = document.getElementById("custom-banner-container");
if (!container) {
return;
}
if (!banner) {
container.replaceChildren();
return;
}
banner.subscribeToDismissedEvent(() => {
console.log("Dismissed banner:", banner);
});
const closeButton = document.createElement("button");
closeButton.textContent = "Close";
closeButton.addEventListener("click", () => {
dismissBanner(banner);
});
// Render your custom UI here and include the close button.
});
dismissBanner(banner) を呼び出すと、SDKはバナーの非表示状態を処理し、アクティブなバナー更新からそのバナーを削除し、バナーの非表示イベント購読者に通知し、非表示状態をBrazeに同期します。カスタムUIでは、dismissBanner をローカルUIの変更のみ、またはアナリティクスのログ記録メソッドのみとして扱うのではなく、subscribeToBannersUpdates を使用して非表示にされたバナーの削除に対応する必要があります。
バナーの更新をリクエストする
import { requestBannersRefresh } from "@braze/web-sdk";
requestBannersRefresh(
["placement_1", "placement_2"],
() => console.log('Banners refreshed'),
() => console.log('Failed to refresh banners')
);
分析とイベント
カスタムイベントを記録する
import { logCustomEvent } from "@braze/web-sdk";
// Simple event
logCustomEvent('button_clicked');
// Event with properties
logCustomEvent('purchase', {
product_id: '123',
price: 29.99,
currency: 'USD'
});
購入を記録する
import { logPurchase } from "@braze/web-sdk";
logPurchase('product-123', 29.99, 'USD', 1, {
category: 'electronics',
brand: 'Apple'
});
データフラッシュのリクエスト
import { requestImmediateDataFlush } from "@braze/web-sdk";
// Force immediate data send
requestImmediateDataFlush();
セッション管理
セッションを開始する
import { openSession } from "@braze/web-sdk";
// Start a new session
openSession();
SDKのステータスを確認する
import { isInitialized, isDisabled } from "@braze/web-sdk";
if (isInitialized()) {
console.log('SDK is initialized');
if (isDisabled()) {
console.log('SDK is disabled');
}
}
SDKの有効化/無効化
import { enableSDK, disableSDK } from "@braze/web-sdk";
// Disable SDK
disableSDK();
// Re-enable SDK
enableSDK();
データ管理
データの消去
import { wipeData } from "@braze/web-sdk";
// Remove all locally stored data
wipeData();
SDKの破棄
import { destroy } from "@braze/web-sdk";
// Clean up SDK resources
destroy();
デバイスIDの取得
import { getDeviceId } from "@braze/web-sdk";
const deviceId = getDeviceId();
console.log('Device ID:', deviceId);
SDK認証
import { setSdkAuthenticationSignature } from "@braze/web-sdk";
// Set authentication signature
setSdkAuthenticationSignature('your-signature-here');
認証エラーを購読する
import { subscribeToSdkAuthenticationFailures } from "@braze/web-sdk";
subscribeToSdkAuthenticationFailures((error) => {
console.log('Authentication failed:', error);
// Provide new signature
setSdkAuthenticationSignature('new-signature');
});
統合パターン
SSR フレームワーク
Next.js などのサーバーサイドレンダリング(SSR)フレームワークを使用している場合、SDKはブラウザ環境で実行されることを前提としているため、エラーが発生することがあります。これらの問題は、SDKを動的にインポートすることで解決できます。
必要なSDKの部分を別ファイルにエクスポートし、そのファイルをコンポーネントに動的にインポートすることで、ツリーシェイキングのメリットを維持できます。
// MyComponent/braze-exports.js
// export the parts of the SDK you need here
export { initialize, openSession } from "@braze/web-sdk";
// MyComponent/MyComponent.js
// import the functions you need from the braze exports file
useEffect(() => {
import("./braze-exports.js").then(({ initialize, openSession }) => {
initialize("YOUR-API-KEY-HERE", {
baseUrl: "YOUR-SDK-ENDPOINT",
enableLogging: true,
});
openSession();
});
}, []);
または、webpack を使用してアプリをバンドルしている場合は、マジックコメントを利用して、必要なSDKの部分のみを動的にインポートできます。
// MyComponent.js
useEffect(() => {
import(
/* webpackExports: ["initialize", "openSession"] */
"@braze/web-sdk"
).then(({ initialize, openSession }) => {
initialize("YOUR-API-KEY-HERE", {
baseUrl: "YOUR-SDK-ENDPOINT",
enableLogging: true,
});
openSession();
});
}, []);
Vite
Vite を使用していて、循環依存関係に関する警告や Uncaught TypeError: Class extends value undefined is not a constructor or null が表示される場合は、Braze SDKを依存関係の検出から除外する必要があるかもしれません。
export default {
optimizeDeps: {
exclude: ['@braze/web-sdk']
}
}
Jest フレームワーク
Jest を使用する場合、SyntaxError: Unexpected token 'export' に似たエラーが表示されることがあります。これを修正するには、package.json の設定を調整して Braze SDKを無視するようにします。
{
"jest": {
"transformIgnorePatterns": [
"/node_modules/(?!@braze)"
]
}
}
非同期モジュール定義 (AMD)
AMDサポートの無効化
サイトで RequireJS やその他のAMDモジュールローダーを使用しているが、CDN経由でBraze Web SDKを読み込みたい場合は、AMDサポートを含まないバージョンのライブラリを読み込むことができます。このバージョンのライブラリは、次のCDNロケーションから読み込めます: https://js.appboycdn.com/web-sdk/6.3/braze.no-amd.min.js
モジュールローダー
RequireJS やその他のAMDモジュールローダーを使用する場合は、ライブラリのコピーをセルフホスティングし、他のリソースと同様に参照することをお勧めします。
require(['path/to/braze.min.js'], function(braze) {
braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT' });
braze.automaticallyShowInAppMessages();
braze.openSession();
});
Accelerated Mobile Pages (AMP)
AMP統合には、以下の手順が必要です。
- AMP Webプッシュスクリプトのインクルード: head に async スクリプトタグを追加します
- 購読ウィジェットの追加: ユーザーが購読/購読解除できるウィジェットを追加します
- ヘルパーファイルの追加:
helper-iframe.htmlとpermission-dialog.htmlをインクルードします - サービスワーカーの作成: Braze サービスワーカーファイルを追加します
- AMP Webプッシュ要素の設定: APIキーとベースURLをクエリパラメーターとして
amp-web-push要素を追加します
AMP統合の詳細な手順については、Braze 開発者ガイドを参照してください。
Electron
Electron はWebプッシュ通知を公式にはサポートしていません(この GitHub issue を参照してください)。Brazeではテストされていませんが、試すことができる他のオープンソースの回避策があります。
CDN統合
- スクリプトの読み込み: スクリプトタグの後に初期化コードを配置するか、スクリプトタグの
onloadイベントハンドラーを使用して、スクリプトタグの読み込み後に初期化します - グローバルアクセス: CDN経由で読み込んだ場合、SDKは
window.brazeとして利用できます
サービスワーカー(プッシュ通知)
- 必須: プッシュ通知を動作させるには、Braze サービスワーカーをインクルードする必要があります
- デフォルトの登録: デフォルトでは、Braze Web SDKは
requestPushPermission()が呼び出されたとき、およびプッシュ許可を既に付与しているユーザーの新しいセッション開始時に、サービスワーカーを自動的に登録・管理します。ただし、Braze サービスワーカーコードを含むサービスワーカーファイルを、期待される場所にホストする必要があります。 - 独自のサービスワーカーの管理: アプリケーションで既にサービスワーカーを管理している場合は、初期化オプション
manageServiceWorkerExternallyをtrueに設定し、サービスワーカーファイルに Braze サービスワーカーコードを追加して、navigator.serviceWorker.register()を使用して自分で登録します - プッシュ許可: ユーザーの操作(ボタンクリックなど)に応じて
braze.requestPushPermission()を呼び出します。ブラウザの許可をリクエストする前に、ソフトプッシュプロンプト(カスタムUI)を使用してください
タグマネージャー
Tealium iQ
Tealium iQ は基本的なターンキーの Braze 統合を提供します。統合を設定するには、Tealium タグ管理インターフェイスで Braze を検索し、ダッシュボードからWeb SDK APIキーを入力します。詳細や高度な Tealium の設定サポートについては、統合ドキュメントを確認するか、Tealium のアカウントマネージャーにお問い合わせください。
Google Tag Manager
Web SDKは、Google Tag Manager コンテナ内のカスタムHTMLタグから初期化および呼び出しが可能です。GTM経由でBrazeにイベントを送信する例については、Google Tag Manager サンプルアプリを参照するか、詳細については統合ドキュメントをご確認ください。
その他のタグマネージャー
カスタムHTMLタグ内での統合手順に従うことで、Brazeは他のタグ管理ソリューションとも互換性がある場合があります。これらのソリューションの評価にサポートが必要な場合は、Brazeの担当者にお問い合わせください。
ライブラリ
以下の表は、利用可能なBraze Web SDKディストリビューションを説明しています。
| 名前 | 説明 | npm | CDN URL |
|---|---|---|---|
| Full | UIを含む完全なSDK。npm版を使用する場合、JavaScriptバンドラーがUIコードを含む未使用のコードを削除します。 | @braze/web-sdk |
https://js.appboycdn.com/web-sdk/6.13/braze.min.js |
| Core | UIを含まないSDK。このバージョンのSDKを使用する場合、In-App MessagesとContent Cardsに独自のUIを実装してください。ほとんどの統合にはFull版を使用してください。CSSを通じてカスタマイズ可能なUI要素が提供されます。 | N/A | https://js.appboycdn.com/web-sdk/6.13/braze.core.min.js |
| No-AMD | AMDサポートを含まない完全なSDK。サイトでRequireJSやその他のAMDモジュールローダーを使用しているが、CDN経由でSDKを読み込みたい場合に便利です。 | N/A | https://js.appboycdn.com/web-sdk/6.13/braze.no-amd.min.js |
サポートされているブラウザ
- モダンなChromiumベースのブラウザ(Chrome、Edge、Opera)
- Firefox
- Safari
デバッグとトラブルシューティング
初期化関数にオプション enableLogging: true を渡す(braze.initialize('YOUR-API-KEY-HERE', { baseUrl: 'YOUR-SDK-ENDPOINT', enableLogging: true });)と、BrazeがJavaScriptコンソールにログを出力するようになります。これは開発時に役立ちますが、すべてのユーザーに表示されるため、本番環境にページをリリースする前にこのオプションを削除するか、代替のロガーを設定してください。
Font Awesome
Brazeはアプリ内メッセージのアイコンにFont Awesome 4.7.0を使用しています。Font Awesomeの読み込みを無効にするには、doNotLoadFontAwesome初期化オプションを使用してください。利用可能なアイコンを確認するには、チートシートをご覧ください。
その他のリソース
お問い合わせ
ご質問がある場合は、Brazeテクニカルサポートまでお問い合わせください。
リポジトリの詳細やサンプルプロジェクトについては、https://github.com/braze-inc/braze-web-sdkをご覧ください。