Cordova SDK+ 統合ガイド
このページでは、Rokt Ecommerce Cordova SDK+の実装方法について説明します。SDK+は、設定された画面でユーザーとトランザクションデータをRoktに渡し、Roktが確認画面などで関連するエクスペリエンスを表示できるようにします。
上記のTargetおよびLanguageセレクターを使用して、デプロイメントプラットフォームと従うべきネイティブコード例を選択してください。
1. Add the Rokt SDK+ to Your Cordova App#
SDK+とRoktキットプラグインをインストールします:
cordova plugin add @mparticle/cordova-sdk
cordova plugin add @mparticle/cordova-rokt-kit
2. Initialize the Rokt SDK+#
各プラットフォームの関連するネイティブエントリーポイントに次の初期化スニペットを挿入します。SDK+は、他のSDK+ API呼び出しの前に初期化する必要があります。your-keyとyour-secretを、Roktチームから提供されたキーとシークレットに置き換えてください。
例アプリで完全な例を見つけることができます。
初期化スニペットを挿入すると、次のカスタマイズ可能なフィールドが表示されます:
1Entering your Rokt key and secret#
your-keyとyour-secretを、Roktアカウントマネージャーから提供された値に設定します。(iOSはoptionsWithKey:secret:を使用します。Androidは.credentials(...)を使用します。)
2Setting your data environment#
テスト中はSDK+環境を開発に設定してデータを開発環境にルーティングし、本番環境に設定してライブ顧客活動を本番に送信します。(iOS: MPEnvironmentDevelopment / MPEnvironmentProduction。Android: MParticle.Environment.Development / MParticle.Environment.Production。)
3Identifying your user and setting attributes#
identifyRequestに、ユーザーの生のハッシュされていないメールを渡します。ハッシュされたメールやその他の識別子については、サポートされているユーザー識別子を参照してください。識別された後、成功コールバックを介して追加のユーザー属性を設定します(iOS: onIdentifyComplete。Android: リクエストをオプションビルダーに接続し、.identify(identifyRequest)を使用して成功リスナーを使用します — パターンについてはステップ3: ユーザーの識別を参照してください)。
初期化スニペットには常にidentifyRequestを含めてください。初期化時にユーザーのメールがない場合は、メールの割り当て(iOS)または.email(...)呼び出し(Android)を省略してください — SDK+はそれでも初期化され、後で3. ユーザーの識別を介してユーザーを識別できます。エラーハンドリングを参照して、識別失敗をどのように処理するかを確認してください — エラーハンドリングがない場合、大規模なデータの一貫性の問題が発生する可能性があります。
#import "AppDelegate.h"
#import "MainViewController.h"
#import "mParticle.h"
@implementation AppDelegate
- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
MParticleOptions *mParticleOptions = [MParticleOptions optionsWithKey:@"your-key"
secret:@"your-secret"];
// Specify the data environment:
// Set it to MPEnvironmentDevelopment if you are still testing your integration.
// Set it to MPEnvironmentProduction if your integration is ready for production data.
// The default is MPEnvironmentAutoDetect which attempts to detect the environment automatically.
mParticleOptions.environment = MPEnvironmentDevelopment;
// Identify the current user:
// If you do not have the user's email address, you can pass in a null value
MPIdentityApiRequest *request = [MPIdentityApiRequest requestWithEmptyUser];
// Preferred: pass the customer's raw, unhashed email address in 'email'.
// If you can only provide a SHA-256-hashed email, set it in 'other' instead of email — do not pass both.
request.email = @"j.smith@example.com";
// [request setIdentity:@"sha256 hashed email goes here" identityType:MPIdentityOther]; // only if raw email unavailable
mParticleOptions.identifyRequest = request;
mParticleOptions.onIdentifyComplete = ^(MPIdentityApiResult * _Nullable apiResult, NSError * _Nullable error) {
if (apiResult) {
// If the user is identified, set additional user attributes
[apiResult.user setUserAttribute:@"example attribute key" value:@"example attribute value"];
}
};
[[MParticle sharedInstance] startWithOptions:mParticleOptions];
self.viewController = [[MainViewController alloc] init];
return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
@end
3. Identify the User#
SDK+初期化スクリプトは、スクリプトのidentifyRequestオブジェクトに提供された識別子を使用して現在のユーザーを識別します。SDKの初期化後、ユーザーがログイン、ログアウト、または他の識別子を提供するたびに(例:チェックアウト時)、以下に説明する適切な方法を使用してユーザーの識別を同期させる必要があります。
サポートされているユーザー識別子サポートされているユーザー識別子 への直接リンク
サポートされているユーザー識別子を表示
| フィールド | タイプ | 説明 |
|---|---|---|
email | string | 顧客の生のハッシュ化されていないメールアドレスを渡します。 |
mobile | string | 顧客の電話番号をE.164形式で渡します。 |
customerid | string | 内部の顧客/アカウント識別子を渡します。ログインしているユーザーにはすべての画面で送信します。 |
other | string | SHA-256ハッシュ化されたメールを渡します。生のメールを提供できない場合のみ使用してください — email と other の両方を渡さないでください。(Androidパスのみ。) |
other2 | string | SHA-256ハッシュ化された携帯番号を渡します。生の携帯番号を提供できない場合のみ使用してください — mobile と other2 の両方を渡さないでください。(Androidパスのみ。) |
emailSha256 | string | SHA-256ハッシュ化されたメールを渡します。生のメールを提供できない場合のみ使用してください — email と emailSha256 の両方を渡さないでください。(iOSパスのみ。) |
mobileSha256 | string | SHA-256ハッシュ化された携帯番号を渡します。生の携帯番号を提供できない場合のみ使用してください — mobile と mobileSha256 の両方を渡さないでください。(iOSパスのみ。) |
ユーザーを識別するには:
1Create an identifyRequest object#
ユーザーの識別子を含む identifyRequest オブジェクトを作成します。ユーザーの生のハッシュ化されていないメールアドレスを email フィールドに統合する必要があります。
2Create an identityCallback#
追加のユーザー属性を設定するには、identityCallback を作成します。identifyRequest が成功した場合、コールバック内で設定したユーザー属性は識別されたユーザーに割り当てられます。
3Send the request using the method that matches the user's action#
ユーザーのアクションに一致するメソッドに identifyRequest(およびオプションの identityCallback)を渡します:
identity.login: ユーザーがログインまたはアカウントを作成したときに呼び出します。identity.identify: ログイン遷移なしでセッション中にユーザーのメールを取得したときに呼び出します(例:ゲストがチェックアウト時にメールを入力する場合)。identity.logout: ユーザーがログアウトしたときに呼び出します。
これらのメソッドを呼び出すと、SDKの現在のユーザーの状態の記録が遷移します。login と logout メソッドは、Roktのアトリビューションを改善するために対応するイベントも自動的にログに記録します。
例えば、Jane Smithという名前のユーザーを、メールアドレス j.smith@example.com、携帯番号 +13125551515、顧客ID cust_10482 で識別するには:
// 1. Create the identifyRequest object
var identifyRequest = new mparticle.IdentityRequest();
// Preferred: pass the customer's raw, unhashed email address.
// If you can only provide a SHA-256-hashed email, use setUserIdentity with 'other' instead — do not pass both.
identifyRequest.setEmail('j.smith@example.com');
identifyRequest.setUserIdentity(mparticle.UserIdentityType.Other, 'SHA-256 hashed email'); // only if raw email unavailable
// If you can only provide a SHA-256-hashed mobile number, use 'Other2' instead of 'MobileNumber' — do not pass both.
// (Called 'other2' on Android and 'mobileSha256' on iOS; both use this same field.)
identifyRequest.setUserIdentity(mparticle.UserIdentityType.Other2, 'SHA-256 hashed mobile number'); // only if raw mobile unavailable
identifyRequest.setUserIdentity(mparticle.UserIdentityType.MobileNumber, '+13125551515');
identifyRequest.setCustomerId('cust_10482');
// 2. Optionally set user attributes once the request succeeds.
var identityCallback = {
onSuccess: function(userID) {
var user = new mparticle.User(userID);
user.setUserAttribute('firstname', 'Jane');
user.setUserAttribute('lastname', 'Smith');
},
onError: function(errorResponse) {
console.error('Identify error: ' + JSON.stringify(errorResponse));
}
};
// 3. Call one of the following methods that best matches the user's action:
var identity = new mparticle.Identity();
identity.login(identifyRequest, identityCallback.onSuccess); // Call when the user logs in or creates an account
identity.identify(identifyRequest, identityCallback.onSuccess); // Call when you obtain the user's email mid-session, but not during a login
identity.logout({}); // Call when the user logs out
4. Set User Attributes#
ユーザーがアプリをナビゲートする際に、段階的にユーザー属性を設定します。チェックアウト時だけでなく、設定する属性が多いほど、Roktは顧客を解決し、関連するオファーを提供することができます。
var identity = new mparticle.Identity();
identity.getCurrentUser(function(userID) {
var currentUser = new mparticle.User(userID);
// Once you have successfully set the current user, you can set user attributes with:
currentUser.setUserAttribute('custom-attribute-name', 'custom-attribute-value');
// Note: all user attributes (including list attributes and tags) must have distinct names.
// Rokt recommends setting as many of the following user attributes as possible:
currentUser.setUserAttribute('firstname', 'John');
currentUser.setUserAttribute('lastname', 'Doe');
// Phone numbers can be formatted either as '1234567890', or '+1 (234) 567-8901'
currentUser.setUserAttribute('mobile', '3125551515');
currentUser.setUserAttribute('age', '33');
currentUser.setUserAttribute('gender', 'M');
currentUser.setUserAttribute('billingcity', 'Brooklyn');
currentUser.setUserAttribute('billingstate', 'NY');
currentUser.setUserAttribute('billingzipcode', '123456');
currentUser.setUserAttribute('dob', 'yyyymmdd');
currentUser.setUserAttribute('title', 'Mr');
currentUser.setUserAttribute('language', 'en');
currentUser.setUserAttribute('predictedltv', '136.23');
// You can create a user attribute to contain a list of values
currentUser.setUserAttributeArray('favorite-genres', ['documentary', 'comedy', 'romance', 'drama']);
// To remove a user attribute, call removeUserAttribute and pass in the attribute name.
// All user attributes share the same key space.
currentUser.removeUserAttribute('attribute-to-remove');
});
ユーザー属性ユーザー属性 への直接リンク
収集可能な限り、次の項目を設定してください:
すべてのユーザー属性を表示
| フィールド | タイプ | 説明 |
|---|---|---|
firstname | string | 顧客の名。パーソナライズに使用されます。 |
lastname | string | 顧客の姓。パーソナライズに使用されます。 |
mobile | string | 電話番号は 1112345678 または +1 (222) 345-6789 の形式で。アイデンティティ解決と関連性に使用されます。 |
age | integer | 顧客の年齢。dob の代替。適格性と関連性に使用されます。 |
dob | string | 生年月日、yyyymmdd。age の代替。適格性と関連性に使用されます。 |
gender | string | 顧客の性別。例: M、F、Male、Female。関連性に使用されます。 |
title | string | 敬称。例: Mr、Mrs、Ms。パーソナライズに使用されます。 |
language | string | 購入に関連するISO 639-1言語コード。関連性に使用されます。 |
billingcity | string | 請求先の市。関連性に使用されます。 |
billingstate | string | 請求先の州/省/地域。関連性と適格性に使用されます。 |
billingzipcode | string | 完全なZIPまたは郵便番号(米国の優先はZIP+4)。アイデンティティ解決と関連性に使用されます。 |
billingaddress1 | string | 請求先の住所1行目。アイデンティティ解決と関連性に使用されます。 |
billingaddress2 | string | 請求先の住所2行目。アイデンティティ解決に使用されます。 |
country | string | ISO 3166-1 alpha-2国コード(例: US、GB、AU)。適格性と関連性に使用されます。 |
birthyear | integer | 顧客の出生年(例: 1990)。適格性と関連性に使用されます。 |
newcustomer | boolean | 初回購入者かどうか。関連性に使用されます。 |
customertype | string | ユーザーが認証されているかどうか(guest / logged_in)。関連性に使用されます。 |
loyaltytier | string | パートナーのロイヤルティプログラムのティア。関連性と適格性に使用されます。 |
loyaltyid | string | ロイヤルティプログラムのメンバーID。アイデンティティ解決に使用されます。 |
predictedltv | decimal | 予測される生涯価値の合計で、通常はパートナーの機械学習モデルから提供されます。関連性に使用されます。 |
subscriptionstatus | string | 該当する場合のサブスクリプション状態 (active, trial, churned, paused, none)。関連性と適格性に使用されます。 |
customersegment | string | パートナーの内部セグメンテーション(例: vip, at_risk, new, reactivated)。関連性に使用されます。 |
acquisitionchannel | string | 顧客が取得されたチャネル。関連性に使用されます。 |
すべてのユーザー属性(リスト属性を含む)は、異なる名前を持たなければなりません。
5. Track Funnel Events#
画面ビュー、コマースイベント、およびカスタムイベントを追跡して、Roktが各顧客がどこにいるかを理解できるようにします。
画面の名前(例: 'homepage', 'product_detail_page')を使用して mparticle.logScreenEvent を呼び出します。追加のカスタム属性をinfoオブジェクトに含めます。
mparticle.logScreenEvent('homepage', { 'custom-attribute': 'custom-value' });
コマースイベントは、ユーザーの旅のための製品レベルの詳細を持っています。顧客が取る各製品アクションに対して、別々のコマースイベントをトリガーします。
完全なコマースイベントのカバレッジに投資することは、統合中にできる最も効果的なことの一つです。各イベントは、顧客がどこにいるかについてRoktに異なる情報を伝えます: 製品ビューは探索を示し、カートへの追加は検討を示し、チェックアウトの開始は購入意図を示し、完了した購入はコンバージョンを確認します。より豊かなシグナルで、Roktはオファーをより効果的にパーソナライズし、配置パフォーマンスを正確に測定し、コンバージョンを正しいタッチポイントに帰属させることができます。この作業を初期の統合中に行うことで、後での改修を避けることができます。シグナルは時間とともに積み重なります: Roktが受け取る各イベントは、パーソナライズを鋭くし、帰属精度を向上させ、将来の訪問で顧客ベースをよりよく解決しセグメント化するために使用されるコンテキストを追加します。
コマースイベントは、顧客のアクション(製品の閲覧、カートへの追加、チェックアウトの開始、購入の完了など)を識別する製品アクションタイプを使用して、mparticle.eCommerce.logProductAction でログされます。
すべての製品アクションタイプを表示
| 顧客のアクション | 製品アクションタイプ |
|---|---|
| 製品詳細ページが閲覧された | mparticle.ProductActionType.ViewDetail |
| 製品がクリックされた | mparticle.ProductActionType.Click |
| アイテムがカートに追加された | mparticle.ProductActionType.AddToCart |
| アイテムがカートから削除された | mparticle.ProductActionType.RemoveFromCart |
| アイテムがウィッシュリストに追加された | mparticle.ProductActionType.AddToWishlist |
| アイテムがウィッシュリストから削除された | mparticle.ProductActionType.RemoveFromWishlist |
| チェックアウトフローが開始された | mparticle.ProductActionType.Checkout |
| チェックアウトオプションが選択された | mparticle.ProductActionType.CheckoutOption |
| 注文が確認された | mparticle.ProductActionType.Purchase |
| 注文が返金された | mparticle.ProductActionType.Refund |
コマースイベントを追跡するには、3つのフェーズがあります:
1Define the product#
mparticle.eCommerce.createProduct を使用して製品を構築します。Category、Brand、Position などの追加フィールドを返されたオブジェクトに直接設定します。
var product = mparticle.eCommerce.createProduct(
'Double Room - Econ Rate', // Name
'econ-1', // SKU
100.00, // Price
4 // Quantity
);
product.Category = 'room';
product.Brand = 'lodge-o-rama';
product.Variant = 'standard';
2Summarize the transaction#
transactionAttributes オブジェクトを Purchase、Checkout、および CheckoutOption イベント用に構築します。PascalCase のキー(Id、Revenue、Tax、Shipping、Coupon)を使用します。注文レベルのクーポンはここに含まれ、個々の製品には含まれません。
var transactionAttributes = {
Id: 'ORDER-12345',
Revenue: 149.99,
Tax: 12.50,
Shipping: 5.99,
Coupon: 'SUMMER20'
};
3Log the commerce event#
mparticle.eCommerce.logProductAction を呼び出し、製品アクションタイプ、製品、イベントレベルの属性、オプションのカスタムフラグ、および(適用可能な場合)transactionAttributes を渡します。ログに記録したい顧客アクションを選択します。
製品リストページ(またはカテゴリページ)のビューを製品インプレッションとしてログに記録します。すべての表示されている製品を単一のインプレッションコールで渡し、顧客が閲覧しているリスト/カテゴリにリスト名を設定します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
Name | string | yes | リストまたはカテゴリ名(例:"Mens Running Shoes")。list_name になります。 |
Products | array | yes | createProduct からの製品オブジェクト。各アイテムのランクに Position を設定します。 |
currency | string | yes | ISO 4217 通貨コード(イベントレベルのカスタム属性として渡されます)。 |
var product = mparticle.eCommerce.createProduct(
'Trail Runner v3', // Name
'SKU-001', // SKU
129.95, // Price
1 // Quantity
);
product.Category = 'Shoes';
product.Brand = 'BrandX';
product.Position = 1;
var impression = {
Name: 'Mens Running Shoes',
Products: [product]
};
mparticle.eCommerce.logImpression(impression, { 'currency': 'USD' });
顧客が製品詳細ページを開いたときにログを記録します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
productsku | string | yes | 製品SKU。 |
productname | string | yes | 表示名。 |
itemprice | decimal | yes | 表示時の単価。 |
currency | string | yes | ISO 4217 通貨コード。 |
list_name | string | no | ユーザーがPLPから来た場合に設定します。 |
var product = mparticle.eCommerce.createProduct(
'Trail Runner v3', // Name
'SKU-001', // SKU
129.95, // Price
1 // Quantity
);
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.ViewDetail,
[product],
{ 'currency': 'USD', 'list_name': 'PLP-Running' }
);
顧客がアイテムをカートに追加したときにログを記録します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
productsku | string | yes | 製品SKU。 |
quantity | integer | yes | 追加された単位数。 |
itemprice | decimal | yes | 追加時の単価。 |
currency | string | yes | ISO 4217 通貨コード。 |
couponCode | string | no | 追加時に適用された場合の注文レベルのクーポン。 |
var product = mparticle.eCommerce.createProduct(
'Trail Runner v3', // Name
'SKU-001', // SKU
129.95, // Price
1 // Quantity
);
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.AddToCart,
[product],
{ 'currency': 'USD' }
);
顧客がアイテムをカートから削除したときにログを記録します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
productsku | string | yes | 製品SKU。 |
quantity | integer | yes | 削除された単位数。 |
currency | string | yes | ISO 4217 通貨コード。 |
var product = mparticle.eCommerce.createProduct(
'Trail Runner v3', // Name
'SKU-001', // SKU
129.95, // Price
1 // Quantity
);
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.RemoveFromCart,
[product],
{ 'currency': 'USD' }
);
カートページに顧客が到着したときにログを記録します。カートページビューにはネイティブな商品アクションがないため、イベント名 'view_cart' と mparticle.EventType.Other を使用して mparticle.logEvent を使用します。カスタム属性としてフルカートの内容を渡します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
event_name | string | yes | 常に 'view_cart'。 |
event_type | EventType | yes | mparticle.EventType.Other を使用。 |
cartitems | array | yes | フルカートの内容、カスタム属性として渡す前にJSON文字列化します。 |
cartitemcount | integer | yes | カートラインの数。 |
totalprice | decimal | yes | カートの合計。 |
currency | string | yes | ISO 4217通貨コード。 |
couponcode | string | no | 適用された場合の注文レベルのプロモ。 |
cartitems 配列の各エントリは次の形状を持ちます:
| Field | Type | Description |
|---|---|---|
cartitemid | string | Stable partner-side cart-line identifier. Usually equals productsku when there is one line per SKU; use a unique value if you allow multiple lines for the same SKU (e.g. gift-wrap variants). |
productsku | string | Product SKU / stock identifier. |
productname | string | Product display name. |
productcategory | string | Product category / taxonomy leaf. |
productbrand | string | Product brand. |
productvariant | string | Variant identifier (size, color, etc.). |
itemprice | decimal | Per-unit price at event time. |
unitprice | decimal | Per-unit list price pre-discount. Omit if equal to itemprice. |
quantity | integer | Units in this line. |
currency | string | ISO 4217 code. Omit if matches the top-level currency. |
couponcode | string | Coupon applied to this line (if any). Order-level promos belong in transactionAttributes.Coupon. |
productposition | integer | 1-indexed rank of the product within a list or search results. |
var cartItems = JSON.stringify([
{ cartitemid: 'SKU-001', productsku: 'SKU-001', productname: 'Trail Runner v3', itemprice: 129.95, quantity: 1 },
{ cartitemid: 'SKU-002', productsku: 'SKU-002', productname: 'Cushion Insole', itemprice: 19.95, quantity: 2 }
]);
mparticle.logEvent(
'view_cart',
mparticle.EventType.Other,
{
'cartitemcount': '3',
'totalprice': '169.85',
'currency': 'USD',
'couponcode': 'SUMMER20',
'cartitems': cartItems
}
);
顧客がチェックアウトフローに入ったときにログを記録します。カート製品の完全なセットと transactionAttributes サマリーを送信します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
cartitems | array | yes | フルカートの内容、カスタム属性として渡す前にJSON文字列化します。 |
totalprice | decimal | yes | 税/送料前のカートの合計。 |
cartitemcount | integer | yes | カートラインの数。 |
currency | string | yes | ISO 4217通貨コード。 |
couponCode | string | no | 適用された場合の注文レベルのプロモ。 |
var product1 = mparticle.eCommerce.createProduct('Trail Runner v3', 'SKU-001', 129.95, 1);
var product2 = mparticle.eCommerce.createProduct('Cushion Insole', 'SKU-002', 19.95, 2);
var transactionAttributes = {
Coupon: 'SUMMER20',
Revenue: 169.85
};
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.Checkout,
[product1, product2],
{
'currency': 'USD',
'cartitemcount': '3',
'totalprice': '169.85'
},
null,
transactionAttributes
);
顧客が配送ステップを完了したときにログを記録します。 mparticle.ProductActionType.CheckoutOption アクションを使用し、 checkoutOption: 'shipping' と配送選択を渡します。
| フィールド | タイプ | 必須 | 説明 |
|---|---|---|---|
cartitems | array | yes | フルカートの内容、カスタム属性として渡す前にJSON文字列化します。 |
option | string | yes | このイベントでは常に 'shipping'。 |
shippingmethod | string | yes | standard / express / next_day。 |
zipcode | string | yes | 配送ZIP/郵便番号。 |
country | string | yes | ISO 3166-1 alpha-2国コード。 |
totalprice | decimal | yes | カートの合計。 |
currency | string | yes | ISO 4217通貨コード。 |
var product1 = mparticle.eCommerce.createProduct('Trail Runner v3', 'SKU-001', 129.95, 1);
var product2 = mparticle.eCommerce.createProduct('Cushion Insole', 'SKU-002', 19.95, 2);
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.CheckoutOption,
[product1, product2],
{
'checkoutOption': 'shipping',
'shippingmethod': 'express',
'zipcode': '94103',
'country': 'US',
'totalprice': '169.85',
'currency': 'USD'
}
);
顧客が支払いステップを完了したときにログを記録します。mparticle.ProductActionType.CheckoutOption アクションを使用し、選択された支払い方法とともに checkoutOption: 'payment' を渡します。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
cartitems | array | yes | カートの全内容を、カスタム属性として渡す前にJSON文字列化します。 |
option | string | yes | このイベントでは常に 'payment' です。 |
paymenttype | string | yes | credit_card / paypal / apple_pay / その他。 |
payment_method | string | no | 関連する場合の具体的な方法(例:カードブランド)。 |
paymentServiceProvider | string | no | PSP識別子(例:stripe)。キャメルケースである必要があります。 |
ccbin | string | no | カードが使用された場合の最初の6-8桁。 |
totalprice | decimal | yes | カートの合計。 |
currency | string | yes | ISO 4217通貨コード。 |
var product1 = mparticle.eCommerce.createProduct('Trail Runner v3', 'SKU-001', 129.95, 1);
var product2 = mparticle.eCommerce.createProduct('Cushion Insole', 'SKU-002', 19.95, 2);
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.CheckoutOption,
[product1, product2],
{
'checkoutOption': 'payment',
'paymenttype': 'credit_card',
'payment_method': 'visa',
'paymentServiceProvider': 'stripe',
'ccbin': '424242',
'totalprice': '169.85',
'currency': 'USD'
}
);
注文が確認されたときにログを記録します。注文ID、収益、税金、送料、および注文レベルのクーポンを含む transactionAttributes サマリーとともに、カート製品の完全なセットを送信します。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
cartitems | array | yes | 注文時のカートの全内容を、カスタム属性として渡す前にJSON文字列化します。 |
transactionId | string | yes | 注文/取引の識別子。 |
totalprice | decimal | yes | 注文合計(収益)。 |
tax | decimal | yes | 注文にかかる総税額。 |
shipping | decimal | yes | 送料。 |
currency | string | yes | ISO 4217通貨コード。 |
couponCode | string | no | 適用された場合の注文レベルのプロモーション。 |
cartitemcount | integer | no | カートラインの数。 |
var product1 = mparticle.eCommerce.createProduct('Trail Runner v3', 'SKU-001', 129.95, 1);
var product2 = mparticle.eCommerce.createProduct('Cushion Insole', 'SKU-002', 19.95, 2);
var transactionAttributes = {
Id: 'ORDER-10482',
Revenue: 169.85,
Tax: 14.20,
Shipping: 5.99,
Coupon: 'SUMMER20'
};
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.Purchase,
[product1, product2],
{ 'currency': 'USD', 'cartitemcount': '3' },
null,
transactionAttributes
);
注文(またはその中のライン)が返金されたときにログを記録します。返金される製品のみを送信し、元の注文を参照する transactionAttributes オブジェクトを含めます。
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
productsku | string | yes | 返金されるラインのSKU。 |
quantity | integer | yes | 返金される単位数。 |
transactionId | string | yes | 返金される元の注文ID。 |
totalprice | decimal | yes | 返金額。 |
currency | string | yes | ISO 4217通貨コード。 |
var refundedProduct = mparticle.eCommerce.createProduct('Trail Runner v3', 'SKU-001', 129.95, 1);
var transactionAttributes = {
Id: 'ORDER-10482',
Revenue: 129.95
};
mparticle.eCommerce.logProductAction(
mparticle.ProductActionType.Refund,
[refundedProduct],
{ 'currency': 'USD' },
null,
transactionAttributes
);
カスタムイベントを追跡するために、mparticle.logEventを使用し、イベント名、イベントタイプ、およびオプションのカスタム属性を渡します。
カスタムイベントタイプを表示する
| タイプ | 使用目的 |
|---|---|
mparticle.EventType.Navigation | アプリ内でのユーザーナビゲーションフローと画面遷移。 |
mparticle.EventType.Location | 位置情報に基づくインタラクションと移動。 |
mparticle.EventType.Search | 検索クエリおよび検索関連のアクション。 |
mparticle.EventType.Transaction | 金融取引および購入関連の活動。 |
mparticle.EventType.UserContent | レビュー、コメント、投稿などのユーザー生成コンテンツ。 |
mparticle.EventType.UserPreference | ユーザー設定、好み、カスタマイズの選択。 |
mparticle.EventType.Social | ソーシャルメディアのインタラクションと共有活動。 |
mparticle.EventType.Other | 上記のカテゴリに当てはまらないもの。 |
mparticle.logEvent(
'video_watched',
mparticle.EventType.Navigation,
{ 'category': 'Destination Intro', 'title': 'Paris' }
);
6. Show a Placement#
すべての支払いおよび確認画面でmparticle.Rokt.selectPlacementsを呼び出し、Roktがコンテンツを表示するようにします。画面の種類とテストまたは本番用であるかを指定するために、以下のページ識別子のいずれかを含めます。
stg.rokt.conf: A confirmation screen in a staging (or testing) environment.prod.rokt.conf: A confirmation screen in a production environment.stg.rokt.payments: A payments screen in a staging (or testing) environment.prod.rokt.payments: A payments screen in a production environment.
配置属性配置属性 への直接リンク
これらの属性は、attributes マップ内で selectPlacements に渡します。常に最新の値を提供してください — ここで渡された属性は、以前の setUserAttribute 呼び出しを上書きします。
すべての配置属性を表示
| フィールド | タイプ | 説明 |
|---|---|---|
email | string | 顧客のメールアドレス(ハッシュ化されていない)。アイデンティティ解決に使用されます。 |
firstname | string | 顧客の名前。パーソナライズに使用されます。 |
lastname | string | 顧客の姓。パーソナライズに使用されます。 |
mobile | string | E.164形式の顧客の携帯電話番号。アイデンティティ解決に使用されます。 |
confirmationref | string | 注文/確認参照番号。関連性と重複排除に使用されます。 |
currency | string | 取引通貨(ISO 4217、例: USD, GBP, AUD)。関連性に使用されます。 |
country | string | ISO 3166-1 alpha-2 国コード。適格性と関連性に使用されます。 |
language | string | 顧客の希望言語(ISO 639-1)。関連性に使用されます。 |
totalprice | decimal | 税金と送料を含むカートの合計値。関連性に使用されます。 |
amount | string | 税金と送料を含まないカート小計。totalprice とは異なります。関連性に使用されます。 |
couponCode | string | 注文に適用されたプロモーションコード(ある場合)。関連性に使用されます。 |
newcustomer | boolean | 初回購入者かどうか。関連性に使用されます。 |
customertype | string | guest または logged_in。関連性に使用されます。 |
value | decimal | 顧客の累積購入価値(例: "2340.00")。関連性に使用されます。 |
subscriptionstatus | string | 該当する場合のサブスクリプション状態(active, trial, churned, paused, none)。関連性と適格性に使用されます。 |
customersegment | string | パートナー内部のセグメンテーション(例: vip, at_risk, new, reactivated)。関連性に使用されます。 |
paymenttype | string | 選択された支払い方法(credit_card, paypal, apple_pay など)。Pay+ の適格性に使用されます。 |
paymentServiceProvider | string | ページで受け入れられる支払い方法のカンマ区切りリスト(例:applepay,paypal,cardpayment)。値は小文字でスペースを含まない必要があります。受け入れられる値の完全なリストについては、Payment Service Providerを参照してください。Pay+の適格性に使用されます。 |
ccbin | string | クレジットカードのBIN(6-8桁)。関連性に使用されます。 |
billingname | string | 請求先名。アイデンティティ解決に使用されます。 |
billingaddress1 | string | 請求先の住所。アイデンティティ解決と関連性に使用されます。 |
billingaddress2 | string | 請求先のアパート/ユニット。アイデンティティ解決に使用されます。 |
billingcity | string | 請求先の市区町村。関連性に使用されます。 |
billingstate | string | 請求先の州または県。関連性に使用されます。 |
billingzipcode | string | 請求先の郵便番号。アイデンティティ解決と関連性に使用されます。 |
shippingmethod | string | 選択された配送方法(standard、express、next_day)。関連性に使用されます。 |
shippingname | string | 配送先名。関連性に使用されます。 |
shippingaddress1 | string | 配送先の住所。関連性に使用されます。 |
shippingcity | string | 配送先の市区町村。関連性に使用されます。 |
shippingstate | string | 配送先の州または県。関連性に使用されます。 |
shippingzipcode | string | 配送先の郵便番号。関連性に使用されます。 |
shippingcountry | string | 配送先の国(ISO 3166-1 alpha-2)。関連性に使用されます。 |
cartItems | string | カートアイテムのJSONシリアライズされた配列。関連性に使用されます。 |
adsexperience | string | Shoppable Adsのエクスペリエンスを意図的にターゲットにする場合は"shoppable"を渡します。 |
オーバーレイプレースメントは、Roktが管理するコンテナ内で確認画面の上にレンダリングされ、アプリの既存のレイアウトに変更を加える必要はありません。
オーバーレイプレースメントを挿入するには、確認画面がロードされたらselectPlacementsを呼び出します:
var attributes = {
// Identity
'email': 'j.smith@example.com',
'firstname': 'Jenny',
'lastname': 'Smith',
'mobile': '+13125551515',
// Transaction
'confirmationref': '54321',
'currency': 'USD',
'country': 'US',
'language': 'en',
'totalprice': '149.99',
'couponCode': 'SUMMER20',
// Customer context
'newcustomer': 'false',
'customertype': 'logged_in',
'value': '2340.00',
'subscriptionstatus': 'active',
'customersegment': 'vip',
// Payment (include paymenttype and paymentServiceProvider for Pay+)
'paymenttype': 'credit_card',
'paymentServiceProvider': 'cardpayment',
'ccbin': '411112',
// Billing address
'billingaddress1': '123 Main St',
'billingcity': 'Brooklyn',
'billingstate': 'NY',
'billingzipcode': '11201',
// Shipping
'shippingmethod': 'express',
'shippingaddress1': '175 Varick St',
'shippingcity': 'New York',
'shippingstate': 'NY',
'shippingzipcode': '10014',
'shippingcountry': 'US'
};
var config = {
colorMode: mparticle.Rokt.ColorMode.LIGHT
};
mparticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
config
);
埋め込みプレースメントは、アプリ内で固定された位置にインラインでレンダリングされます(例:カート画面の支払いオプションの上)。ThanksとPay+の両方が埋め込みプレースメントを使用しますが、Pay+は埋め込みプレースメントを使用する必要があります。
埋め込みプレースメントを挿入するには、埋め込みビュー識別子をselectPlacements呼び出しに渡します:
var attributes = {
'email': 'j.smith@example.com',
'firstname': 'Jenny',
'lastname': 'Smith',
'billingzipcode': '90210',
'confirmationref': '54321'
};
var config = {
colorMode: mparticle.Rokt.ColorMode.LIGHT
};
mparticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
config,
'RoktEmbedded1' // The embedded view identifier
);
Pay+配置の場合、各画面でのselectPlacements呼び出しにpaymenttypeとpaymentServiceProviderを含めてください。paymentServiceProviderは支払い画面で利用可能な支払い方法を伝え、paymenttypeはユーザーが支払った方法を伝えます。
インタースティシャル配置は支払い画面と確認画面の間に表示され、顧客が追加の製品を購入できるようにします。インタースティシャル配置はShoppable Adsで使用されます。
インタースティシャル配置はCordova SDK+のiOSのみでサポートされています。このプラグインのAndroidパスはインタースティシャル配置をサポートしていません。Androidでインタースティシャル配置ロジックを呼び出さないでください。
iOSでApple Payを使用してShoppable Adsを有効にするには、ネイティブiOSプロジェクトにRoktPaymentExtensionをAppDelegate内でMParticle.startの後、selectPlacementsの前に登録する必要があります。Apple Pay iOS設定ガイドに従って、マーチャントIDを作成し、Xcodeプロジェクトを設定し、支払い拡張を登録してください。
iOSでは、インタースティシャル配置はオーバーレイおよび埋め込み配置で使用されるのと同じselectPlacements呼び出しを通じてトリガーされます。iOSネイティブレイヤーがインタースティシャルUIを処理し、JavaScriptコードがそれをトリガーし、結果のイベントをリッスンします。
iOSでインタースティシャル配置を実装するには、確認画面のロジックからselectPlacementsを呼び出します。オーバーレイ配置で使用するのと同じ包括的な属性を渡してください。
// Guard: only invoke on iOS
if (cordova.platformId === 'ios') {
var attributes = {
// Identity
'email': 'j.smith@example.com',
'firstname': 'Jenny',
'lastname': 'Smith',
'mobile': '+13125551515',
// Transaction
'confirmationref': '54321',
'currency': 'USD',
'country': 'US',
'language': 'en',
'totalprice': '149.99',
'amount': '137.50',
'couponCode': 'SUMMER20',
// Customer context
'newcustomer': 'false',
'customertype': 'logged_in',
'value': '2340.00',
// Payment
'paymenttype': 'credit_card',
'paymentServiceProvider': 'cardpayment',
'ccbin': '411112',
// Billing address
'billingaddress1': '123 Main St',
'billingcity': 'Brooklyn',
'billingstate': 'NY',
'billingzipcode': '11201',
// Shipping (required for Shoppable Ads fulfillment)
'shippingaddress1': '175 Varick St',
'shippingcity': 'New York',
'shippingstate': 'NY',
'shippingzipcode': '10014',
'shippingcountry': 'US'
};
var config = {
colorMode: mparticle.Rokt.ColorMode.LIGHT
};
mparticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
config
);
}
アプリに配送先住所の詳細がない場合(たとえば、チケットやデジタル商品購入の場合)、請求先住所の詳細を代わりに渡してください。Roktは購入完了前に顧客が配送先住所を確認または編集できるUIを提供します。
オプション機能オプション機能 への直接リンク
| 機能 | 目的 |
|---|---|
mparticle.Rokt.close() | オーバーレイ配置を自動的に閉じます。 |
追加設定追加設定 への直接リンク
配置UIをカスタマイズするために、configオブジェクトなどのオプションパラメータを渡します(例:ダーク/ライトモード、キャッシング)。
var config = {
colorMode: mparticle.Rokt.ColorMode.LIGHT,
cacheConfig: {
cacheDurationInSeconds: 1200,
cacheAttributes: {
'email': 'j.smith@example.com',
'orderNumber': '123'
}
}
};
mparticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
config
);
識別子RoktExperienceまたは埋め込み識別子RoktEmbedded1を異なる値で更新したい場合は、Roktアカウントマネージャーに連絡して、Rokt配置が一貫して構成されていることを確認してください。
Events APIEvents API への直接リンク
SDK+は、サブスクライブ可能なプレースメントライフサイクルイベントを提供します。onEvent コールバックを selectPlacements 呼び出しで使用して、ロード状態、エンゲージメント、失敗に応答します。
mparticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
config,
null,
function(event) {
// Handle placement events
if (event && event.eventType) {
console.log('Rokt event: ' + event.eventType);
}
}
);
標準イベント標準イベント への直接リンク
すべての標準イベントを表示
| イベント | 説明 | パラメータ |
|---|---|---|
| ShowLoadingIndicator | SDK+がRoktバックエンドを呼び出す前にトリガーされます。 | |
| HideLoadingIndicator | SDK+がRoktバックエンドからの成功または失敗を受け取ったときにトリガーされます。 | |
| PlacementInteractive | プレースメントがレンダリングされ、操作可能になったときにトリガーされます。 | placementId: String |
| PlacementReady | プレースメントが表示準備ができているが、まだコンテンツがレンダリングされていないときにトリガーされます。 | placementId: String |
| OfferEngagement | ユーザーがオファーにエンゲージしたときにトリガーされます。 | placementId: String |
| PositiveEngagement | ユーザーがオファーに対して肯定的にエンゲージしたときにトリガーされます。 | placementId: String |
| FirstPositiveEngagement | ユーザーが初めてオファーに対して肯定的にエンゲージしたときにトリガーされます。 | placementId: String, fulfillmentAttributes: Object |
| OpenUrl | ユーザーがパートナーアプリに送信するように設定されたURLを押したときにトリガーされます。 | placementId: String, url: String |
| PlacementClosed | ユーザーによってプレースメントが閉じられたときにトリガーされます。 | placementId: String |
| PlacementCompleted | オファーの進行が終了し、表示するオファーがもうない場合にトリガーされます。また、キャッシュがヒットしたが、以前に却下されたために取得されたプレースメントが表示されない場合にもトリガーされます。 | placementId: String |
| PlacementFailure | 何らかの失敗によりプレースメントを表示できない場合、または表示するプレースメントがない場合にトリガーされます。 | placementId: String (optional) |
| CartItemInstantPurchase | ユーザーによってカタログアイテムの購入が開始されたときにトリガーされます(iOSのみ)。 | placementId: String, cartItemId: String, catalogItemId: String, currency: String, description: String, linkedProductId: String, totalPrice: Number, quantity: Number, unitPrice: Number |
7. Appendix#
Appendix A: アプリケーション設定Appendix A: アプリケーション設定 への直接リンク
アプリケーションは、config オブジェクトを通じて設定を渡すことができ、SDK+はシステムのデフォルトではなく、アプリのカスタム設定を使用します。
ColorMode オブジェクトColorMode オブジェクト への直接リンク
| 値 | 説明 |
|---|---|
LIGHT | アプリケーションはライトモードです |
DARK | アプリケーションはダークモードです |
SYSTEM | アプリケーションはシステムカラーモードをデフォルトとします |
var config = {
colorMode: mparticle.Rokt.ColorMode.LIGHT
};
mparticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
config
);
CacheConfig オブジェクトCacheConfig オブジェクト への直接リンク
| パラメータ | 説明 |
|---|---|
cacheDurationInSeconds | Rokt SDK+がエクスペリエンスをキャッシュするためのオプションの秒数です。最大許容値は90分で、指定されていないか無効な場合のデフォルトは90分です。 |
cacheAttributes | キャッシュキーとして使用するオプションの属性です。nullの場合、selectPlacementsで送信されたすべての属性がキャッシュキーとして使用されます。 |
// Cache the experience for 1200 seconds, using email and orderNumber as the cache key.
var config = {
cacheConfig: {
cacheDurationInSeconds: 1200,
cacheAttributes: {
'email': 'j.smith@example.com',
'orderNumber': '123'
}
}
};
mparticle.Rokt.selectPlacements(
'RoktExperience',
attributes,
config
);
EdgeToEdgeDisplay (Androidのみ)EdgeToEdgeDisplay (Androidのみ) への直接リンク
RoktオーバーレイがAndroidのエッジ・ツー・エッジディスプレイモードを尊重するかどうかを制御します。この設定はAndroidパスにのみ適用され、iOSではこのフラグを使用しません。
| 値 | 説明 |
|---|---|
true (default) | アプリケーションはエッジ・ツー・エッジディスプレイモードをサポートします |
false | アプリケーションはエッジ・ツー・エッジディスプレイモードをサポートしません |
Cordova SDK+は現在、EdgeToEdgeDisplayをJavaScriptの設定オプションとして公開していません。Androidアプリがエッジ・ツー・エッジディスプレイをオプトアウトし、オーバーレイが正しくレンダリングされない場合、ネイティブAndroidコードで設定してください:
import com.mparticle.rokt.RoktConfig
val roktConfig = RoktConfig.Builder()
.edgeToEdgeDisplay(false) // set to false if your app does not use edge-to-edge
.build()
ネイティブAndroidレイヤーでroktConfigをselectPlacementsに渡すか、Cordovaレベルのサポートが必要な場合はRoktアカウントマネージャーに相談してください。
Appendix B: ネイティブUIコンポーネントAppendix B: ネイティブUIコンポーネント への直接リンク
Cordova SDK+は、基盤となるiOSおよびAndroid SDK+によってレンダリングされるネイティブRokt UIコンポーネントを使用します。Jetpack ComposeやSwiftUIに相当するCordova固有の宣言的UIコンポーネントはありません。プレースメントUIは完全にネイティブレイヤーによって管理され、selectPlacements APIを通じて表示されます。
Appendix C: エラーハンドリングAppendix C: エラーハンドリング への直接リンク
IDSync APIは、アプリの状態の中心となることを意図しており、高速かつ高可用性を備えています。アプリがインターネット接続なしでユーザーのログイン、ログアウト、または状態の変更を防ぐのと同様に、これらのAPIをゲーティング操作として扱い、一貫したユーザー状態を維持してください。SDK+はAPI呼び出しを自動的に再試行しませんが、ビジネスロジックに従って再試行できるようにコールバックAPIを提供します。
エラーハンドリングを実装しない場合、大規模なデータの一貫性の問題が発生する可能性があります。
Cordova SDK+のmparticle.Identity.identify()コールバックパターンは、onErrorハンドラーを通じてエラーを表面化します。適切なアクションを決定するためにerrorResponseオブジェクトを調査してください。
var identifyTask = {
onSuccess: function(userID) {
// IDSync succeeded — proceed with the identified user
console.log('Identify success, userID: ' + userID);
},
onError: function(errorResponse) {
if (errorResponse && errorResponse.httpCode !== undefined) {
if (errorResponse.httpCode === -1) {
// Device is likely offline (maps to UNKNOWN_ERROR on Android,
// MPIdentityErrorResponseCodeClientNoConnection on iOS) — retry the request
} else if (errorResponse.httpCode === 429) {
// Throttled — retry with exponential backoff
} else if (errorResponse.httpCode >= 500) {
// Server-side error — contact your account representative
} else {
// Inspect errorResponse for implementation issues (e.g. 400 invalid request, 401 auth error)
console.error('Identity error: ' + JSON.stringify(errorResponse));
}
}
}
};
var identity = new mparticle.Identity();
identity.identify(identifyRequest, identifyTask.onSuccess);
iOSエラーコードiOSエラーコード への直接リンク
iOSでは、ネイティブSDK+が失敗をMPIdentityErrorResponseCode値にマッピングします。CordovaブリッジはこれをJavaScriptエラーレスポンスのhttpCodeとして表面化します。処理すべき主要なコードは次の通りです:
| コード | 意味 | アクション |
|---|---|---|
MPIdentityErrorResponseCodeClientNoConnection | デバイスがオフラインまたはネットワークなし | リクエストを再試行 |
MPIdentityErrorResponseCodeClientSideTimeout | TCP接続がタイムアウト | リクエストを再試行 |
MPIdentityErrorResponseCodeRequestInProgress | 別のIDSyncリクエストが進行中 | 実装を確認し、頻繁でなければ再試行 |
MPIdentityErrorResponseCodeRetry | SDK+レベルの再試行信号 | リクエストを再試行 |
429 (HTTP) | Roktサーバーによるレート制限 | 指数バックオフで再試行 |
400 (HTTP) | 無効なリクエストボディ | errorResponseを調査 — 通常は実装の問題 |
401 (HTTP) | 認証エラー | APIキーを確認 |
AndroidエラーコードAndroidエラーコード への直接リンク
Androidでは、ネイティブSDK+がクライアント側の失敗(デバイスオフライン、クライアント側タイムアウト、無効なリクエスト)に対してIdentityApi.UNKNOWN_ERRORを返します。429レスポンスはIdentityApi.THROTTLE_ERRORにマッピングされます。どちらも適切な再試行戦略を示します:
UNKNOWN_ERROR(デバイスオフラインまたはクライアント側の問題):接続が回復したらリクエストを再試行します。THROTTLE_ERROR/ 429:指数バックオフで再試行します。これはユーザーの「ホットキー」や予想以上のIDSyncボリュームを示すことがあります — 頻繁に発生する場合は実装を確認してください。
Appendix D: WebからネイティブへのセッションIDの受け渡しAppendix D: WebからネイティブへのセッションIDの受け渡し への直接リンク
ユーザーの操作がWebとネイティブプラットフォームの両方にまたがる場合、Web SDK+からCordova SDK+にセッションIDを渡すことで、一貫したRoktセッションを維持できます。これは、ユーザーがWebViewでアクションを完了し(例えば、支払いページ)、ネイティブアプリに戻って確認するようなハイブリッドフローに役立ちます。
Web SDK+からのセッションIDの取得Web SDK+からのセッションIDの取得 への直接リンク
selectPlacementsを呼び出した後、セッションIDは選択コンテキストで利用可能です:
const selection = await launcher.selectPlacements({
identifier: "checkout",
attributes: {
email: "user@example.com",
// ... other attributes
}
});
const sessionId = await selection.context.sessionId;
The session ID is a unique GUID assigned to the current user journey. It is useful for debugging and for correlating a user's activity across your web and native surfaces.
ディープリンクを介してネイティブアプリに渡すディープリンクを介してネイティブアプリに渡す への直接リンク
セッションIDをディープリンクを使用してネイティブアプリに渡します:
const deepLink = `myapp://confirmation?sessionId=${encodeURIComponent(sessionId)}`;
window.location.href = deepLink;
セッションIDの設定セッションIDの設定 への直接リンク
ディープリンクからセッションIDを抽出し、selectPlacementsを呼び出す前にSDK+に渡します。
// Extract the sessionId from your deep link handler and set it before selectPlacements
var sessionId = getSessionIdFromDeepLink(); // Your deep link parsing logic
if (sessionId) {
mparticle.Rokt.setSessionId(sessionId);
}
// Then proceed with selectPlacements
mparticle.Rokt.selectPlacements('RoktExperience', attributes, config);
注意事項注意事項 への直接リンク
- セッションが使用されるようにするため、
setSessionIdをselectPlacementsの前に呼び出してください。 - 空の文字列は無視され、セッションは更新されません。
- クエリパラメータとして渡す際には、常にセッションIDをURLエンコードしてください。
8. Test Your Integration#
SDK+が正しく初期化され、イベントが正しくログに記録されることを確認するには:
1Enable verbose SDK+ logging#
初期化前に詳細なSDK+ログを有効にして、送信されている内容を確認できるようにします。
[MParticle sharedInstance].logLevel = MPILogLevelVerbose;
2Build and run your app#
開発キーを使用してアプリをビルドおよび実行し、両方のプラットフォームで環境をDevelopmentに設定します。
3Trigger selectPlacements#
配置がレンダリングされるべき画面でselectPlacementsをトリガーし、配置がロードされることを確認します。
4Verify events#
イベントがログに記録され、identifyRequestの呼び出しが成功することを確認します。
トラブルシューティングトラブルシューティング への直接リンク
プレースメントが表示されない、またはイベントが表示されない場合は、Rokt SDK+ のエラーについてネイティブデバイスのログ(iOS の場合は Xcode コンソール、Android の場合は Android Logcat)を確認してください。一般的な問題:
初期化エラー初期化エラー への直接リンク
- iOS (
your-key/your-secretinoptionsWithKey:secret:) および Android (.credentials("your-key", "your-secret")) の両方で、キーとシークレットが Rokt アカウントマネージャーからの値と一致していることを確認してください。 MParticle.start(Android) および[[MParticle sharedInstance] startWithOptions:options](iOS) が、selectPlacementsまたはlogEventの呼び出しの前に実行されることを確認してください。
アイデンティティエラーアイデンティティエラー への直接リンク
アイデンティティコールバックがエラーで発生した場合、エラーコードと再試行のガイダンスについては エラーハンドリング を参照してください。エラーハンドリングがないと、大規模なデータ整合性の問題が発生する可能性があります。
プレースメントが表示されないプレースメントが表示されない への直接リンク
- プレースメント
identifier(例:RoktExperience) が、Rokt アカウントマネージャーが設定したものと一致していることを確認してください。 - 埋め込みプレースメントの場合、埋め込みビューの識別子 (例:
RoktEmbedded1) がレイアウト設定と一致していることを確認してください。 - 属性マップに少なくとも
email、firstname、lastname、billingzipcode、およびconfirmationrefが含まれていることを確認してください。