Flutter SDK インテグレーションガイド
このページでは、Rokt Ecommerce の Flutter SDK を実装して、チェックアウト時により関連性の高い顧客体験を提供する方法を説明します。SDK を使用すると、設定されたページで発火し、ユーザーとトランザクションデータを Rokt に戻してパーソナライズと測定を行うことにより、これらの体験(確認ページでのオファーの表示など)をトリガーおよび追跡することができます。
専任のアカウント担当者が、Flutter アプリでターゲットにし ているプラットフォーム用にアカウントを設定するお手伝いをします。彼らは、SDK を初期化するために必要な key (iOS/Android/Web) と secret (iOS/Android) の両方、および顧客に最も関連性の高い体験を提供するために必要な追加リソースを提供します。
これらの手順を完了するには、開発リソースが必要です。追加の支援が必要な場合は、Rokt のアカウントマネージャーにお問い合わせください。Shopify ストアは、Rokt Ecommerce アプリ を使用して数秒で Rokt プレースメントを設定できます — コーディングは不要です!
1. Flutter セットアップ1. Flutter セットアップ への直接リンク
Flutter アプ リケーションに Flutter SDK を依存関係として追加します:
flutter pub add mparticle_flutter_sdk
Rokt Flutter SDK 依存関係をアプリケーションに追加した後、次の(または類似の)行がパッケージの pubspec.yaml ファイルに追加されます:
dependencies:
mparticle_flutter_sdk: ^1.1.0
Dart コードにパッケージをインポートし、mParticle のインスタンスを取得します:
import 'package:mparticle_flutter_sdk/mparticle_flutter_sdk.dart';
MparticleFlutterSdk? mpInstance = await MparticleFlutterSdk.getInstance();
Dart プラグインをインストールした後、以下の手順に従って Rokt SDK をモバイルアプリまたはウェブサイトに統合し続けます。アプリまたはサイトを起動する際にログにエラーが表示されないように、アカウントマネージャーから提供された key と secret を必要な場所に必ず含めてください。
1.1. iOSアプリにRokt SDKを追加する1.1. iOSアプリにRokt SDKを追加する への直接リンク
SPMまたはCocoaPodsのいずれかを使用して、アプリケーションにRokt SDKを含めます:
CocoaPodsCocoaPods への直接リンク
CocoaPodsを使用してSDKを統合するには、Podfileに以下を指定します:
pod 'mParticle-Apple-SDK', '~> 8.0'
pod 'mParticle-Rokt','~> 8.0'
SPMSPM への直接リンク
Swift Package Managerを使用してSDKを統合するには:
- Xcodeでプロジェクトを開き、「Package Dependencies」タブに移動します。
- パッケージリストの下にある**+**ボタンをクリックします。
- 検索ボックスの右上にリポジトリURL
https://github.com/mParticle/mparticle-apple-sdkを入力し、パッケージリストからmparticle-apple-sdkを選択し、「Dependency Rule」を「Up to Next Major Version」に変更します。 - 右下の「Add Package」ボタンをクリック し、「Package Product」として
mParticle-Apple-SDKを選択します。位置情報追跡サポートを含まないSDKバージョンを使用したい場合は、mParticle-Apple-SDK-NoLocationを選択します。 - Rokt KitリポジトリURL
https://github.com/mparticle-integrations/mparticle-apple-integration-rokt.gitについても手順3と4を繰り返します。mParticle-Apple-SDK-NoLocationパッケージプロダクトを選択した場合は、import mParticle_Apple_SDK_NoLocationを使用してSDKをインポートする必要があります。
1.2. Rokt SDKを初期化する1.2. Rokt SDKを初期化する への直接リンク
SDKを初期化するには、以下の初期化スニペットをAppDelegateファイルに挿入します:
your-keyとyour-secretを、専用のRoktチームから提供されたキーとシークレットに置き換えてください。
- Swift
- Objective-C
import mParticle_Apple_SDK
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// SDKを初期化する
let options = MParticleOptions(key: "your-key",
secret: "your-secret")
// 環境を指定する:
// 統合をテスト中の場合は.developmentに設定します。
// 統合が本番データの準備ができた場合は.productionに設定します。
// デフォルトは.autoDetectで、自動的に環境を検出しようとします
options.environment = .development
MParticle.sharedInstance().start(with: options)
return true
}
#import <mParticle_Apple_SDK/mParticle.h>
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// SDKを初期化する
MParticleOptions *options = [MParticleOptions optionsWithKey:@"your-key"
secret:@"your-secret"];
// 環境を指定する:
// 統合をテスト中の場合はMPEnvironmentDevelopmentに設定します。
// 統合が本番データの準備ができた場合はMPEnvironmentProductionに設定します。
// デフォルトはMPEnvironmentAutoDetectで、自動的に環境を検出しようとします
options.environment = MPEnvironmentDevelopment;
[[MParticle sharedInstance] startWithOptions:options];
return YES;
}
追加セットアップ追加セットアップ への直接リンク
詳細なヘルプについては、完全なiOS SDK 統合ガイドを参照してください。
1.1 依存関係を追加する1.1 依存関係を追加する への直接リンク
SDKに必要な依存関係を含めるようにgradleファイルを更新してください:
- build.gradle.kts
- build.gradle
dependencies {
implementation("com.mparticle:android-rokt-kit:5.70.2")
implementation("com.mparticle:android-core:5.70.2")
}
dependencies {
implementation "com.mparticle:android-rokt-kit:5.70.2"
implementation "com.mparticle:android-core:5.70.2"
}
1.2. Androidクラスを設定する1.2. Androidクラスを設定する への直接リンク
ルートのAndroid ActivityがFlutterFragmentActivityを拡張していることを確認してください
import io.flutter.embedding.android.FlutterFragmentActivity
class MainActivity : FlutterFragmentActivity()
1.3. アプリでSDKを初期化する1.3. アプリでSDKを初期化する への直接リンク
Android SDKは、ApplicationクラスのonCreate()内でMParticleOptionsオブジェクトとビルダークラスを使用して設定できます。mParticle Android SDKは、他のSDK API呼び出しが行われる前に初期化されるべきです。
上記のコードサンプル内のyour-keyとyour-secretを、あなた専用のRoktアカウント担当者から 提供されたキーとシークレットに置き換えてください。
- Kotlin
- Java
import com.mparticle.MParticle
import com.mparticle.MParticleOptions
class YourApplicationClass : Application() {
override fun onCreate() {
super.onCreate()
val options: MParticleOptions = MParticleOptions.builder(this)
.credentials(
"your-key", // Roktアカウント担当者から提供されたキー
"your-secret" // Roktアカウント担当者から提供されたシークレット
).environment(MParticle.Environment.Development) // 環境を指定します:
// 統合をテスト中の場合は.developmentに設定します。
// 統合が本番データの準備ができている場合は.productionに設定します。
// デフォルトは.autoDetectで、自動的に環境を検出しようとします
.build()
MParticle.start(options)
}
}
import com.mparticle.MParticle;
import com.mparticle.MParticleOptions;
public class YourApplicationClass extends Application {
@Override
public void onCreate() {
super.onCreate();
MParticleOptions options = MParticleOptions.builder(this)
.configuration(kitOptions)
.credentials(
"your-key", // Roktアカウント担当者から提供されたキー
"your-secret" // Roktアカウント担当 者から提供されたシークレット
).environment(MParticle.Environment.Production) // 環境を指定します:
// 統合をテスト中の場合は.developmentに設定します。
// 統合が本番データの準備ができている場合は.productionに設定します。
// デフォルトは.autoDetectで、自動的に環境を検出しようとします
.build();
MParticle.start(options);
}
}
さらなるセットアップさらなるセットアップ への直接リンク
詳細については、完全な Android SDK 統合ガイド を参照してください。
1.1. Rokt SDKの初期化1.1. Rokt SDKの初期化 への直接リンク
SDKを初期化するには、SDK初期化スクリプト全体をサイトにコピー&ペーストしてください。
各サイトは異なりますが、RoktはサイトのすべてのページにSDK初期化スクリプトを含めることを推奨しています。これにより、SDKが常に初期化され、最も低いオファー配信の遅延と最高のユーザー識別精度が提供されます。
- シングルページアプリケーション (SPA): ウェブサイトがSPAの場合、初期化スクリプトをメインの
index.htmlページの<head>、または他のコンテンツがレンダリングされる主要な場所に挿入してください。 - マルチページアプリケーション (MPA): ウェブサイトがMPAでテンプレートベースのレンダリングシステムを使用している場合(最も一般的)、初期化スクリプトを主要な共有レイアウトファイルに配置してください。テンプレートベースのレンダリングシステムを使用していない場合は、ウェブサイトの各HTMLファイルにスクリプトを配置してください。
各ページにスクリプトが含まれている場合でも、ブラウザのキャッシュにより、SDKはデフォルトでキャッシュから読み込まれ、ウェブサイトの各ページロード時に再度読み込まれることはありませんのでご注意ください。
SDK 初期化スクリプトSDK 初期化スクリプト への直接リンク
"YOUR_API_KEY"をあなたの専任の Rokt チームから提供された API キーに置き換えてください。DOMAINを ファーストパーティドメイン設定 中に作成したサブドメインに設定してください。これはオプションです: デフォルトの DOMAIN 設定をそのままにした場合、リクエストはapps.rokt-api.comを経由します。
<script type="text/javascript">
// Rokt API キーを入力してください
const API_KEY = "YOUR_API_KEY";
// ファーストパーティドメインを設定した場合、デフォルトの apps.rokt-api ドメインの代わりにその値を DOMAIN に設定してください
const ROKT_DOMAIN = "https://apps.rokt-api.com";
// SDK 設定を設定します
window.mParticle = {
config: {
// データ環境を isDevelopmentMode で指定します:
// 統合をテスト中の場合は、isDevelopmentMode を true に設定してください。
// 統合が本番データの準備ができたら、isDevelopmentMode を false に設定してください。
isDevelopmentMode: true,
// 現在のユーザーを識別します:
// ユーザーのメールアドレスがある場合は、以下のように `identifyRequest` 内の `userIdentities` というオブジェクトに含めてください。
identifyRequest: {
userIdentities: {
// ハッシュされていないメールアドレ スを使用している場合は、それを 'email' に設定してください。
email: 'j.smith@example.com',
// ハッシュされたメールアドレスを使用している場合は、`email` の代わりに 'other' に設定してください。
other: 'sha256 hashed email goes here'
},
}
},
};
// SDK をロードします
(function(e) { window.mParticle = window.mParticle || {}; window.mParticle.EventType = { Unknown: 0, Navigation: 1, Location: 2, Search: 3, Transaction: 4, UserContent: 5, UserPreference: 6, Social: 7, Other: 8, Media: 9 }; window.mParticle.eCommerce = { Cart: {} }; window.mParticle.Identity = {}; window.mParticle.Rokt = {}; window.mParticle.config = window.mParticle.config || {}; window.mParticle.config.rq = []; window.mParticle.config.snippetVersion = 2.8; window.mParticle.ready = function(e) { window.mParticle.config.rq.push(e); }; ["endSession", "logError", "logBaseEvent", "logEvent", "logForm", "logLink", "logPageView", "setSessionAttribute", "setAppName", "setAppVersion", "setOptOut", "setPosition", "startNewSession", "startTrackingLocation", "stopTrackingLocation"].forEach(function(e) { window.mParticle[e] = function() { var t = Array.prototype.slice.call(arguments); t.unshift(e); window.mParticle.config.rq.push(t); }; }); ["setCurrencyCode", "logCheckout"].forEach(function(e) { window.mParticle.eCommerce[e] = function() { var t = Array.prototype.slice.call(arguments); t.unshift("eCommerce." + e); window.mParticle.config.rq.push(t); }; }); ["identify", "login", "logout", "modify"].forEach(function(e) { window.mParticle.Identity[e] = function() { var t = Array.prototype.slice.call(arguments); t.unshift("Identity." + e); window.mParticle.config.rq.push(t); }; }); ["selectPlacements","hashAttributes","hashSha256","setExtensionData","use","getVersion","terminate"].forEach(function(e) { window.mParticle.Rokt[e] = function() { var t = Array.prototype.slice.call(arguments); t.unshift("Rokt." + e); window.mParticle.config.rq.push(t); }; }); var t = window.mParticle.config.isDevelopmentMode ? 1 : 0, n = "?env=" + t, a = window.mParticle.config.dataPlan; if (a) { var o = a.planId, r = a.planVersion; o && (r && (r < 1 || r > 1e3) && (r = null), n += "&plan_id=" + o + (r ? "&plan_version=" + r : "")); } var i = window.mParticle.config.versions, s = []; i && Object.keys(i).forEach(function(e) { s.push(e + "=" + i[e]); }); var c = document.createElement("script"); c.type = "text/javascript"; c.async = !0; window.ROKT_DOMAIN = ROKT_DOMAIN || 'https://apps.rokt-api.com'; mParticle.config.domain = ROKT_DOMAIN.split('//')[1]; c.src = ROKT_DOMAIN + "/js/v2/" + e + "/app.js" + n + "&" + s.join("&"); var l = document.getElementsByTagName("script")[0]; l.parentNode.insertBefore(c, l); })(API_KEY);
</script>
初期化スクリプトには、以下の設定が含まれています:
isDevelopmentModeisDevelopmentMode への直接リンク
上記の例では、isDevelopmentMode が true に設定されています。これにより、「開発」データを収集してSDK統合をテストすることができます。統合を本番環境で稼働させる準備ができたら、isDevelopmentMode を false に設定して、本番データをRoktに収集して送信します。
identifyRequestidentifyRequest への直接リンク
SDKは、SDKが初期化された時点でユーザーのメールアドレスを含めることで、現在のユーザーを識別することができます。Roktは、識別子とし て顧客の生の(ハッシュ化されていない)メールアドレスを使用することを推奨しています。
さらなるセットアップさらなるセットアップ への直接リンク
詳細については、完全な Web SDK Integration Guide を参照してください。
2. ユーザー属性の追跡2. ユーザー属性の追跡 への直接リンク
Rokt SDKを使用して、イベントとは別にユーザー属性を収集することができます。ユーザー属性は、イベントを追跡する際のカスタム属性とは別に扱われます。SDKは、特定のセッションで収集されたユーザー属性を、同じセッションでトリガーされたイベントと関連付けます。
ユーザー属性を収集するには、Rokt SDKを初期化した直後に、イベントをログに記録する前に次のコードを実行する必要があります。
import 'package:mparticle_flutter_sdk/mparticle_flutter_sdk.dart';
// 現在のユーザーを取得します。これは、SDKの初期化時またはidentifyメソッドを呼び出すことでユーザーを識別した場合にのみ成功します。
var currentUser = await mpInstance?.getCurrentUser();
// 現在のユーザーを`currentUser`に設定した後、次のようにユーザー属性を設定できます:
currentUser?.setUserAttribute('custom-attribute-name', 'custom-attribute-value');
// 注意: すべてのユーザー属性(リスト属性やタグを含む)は、異なる名前を持つ必要があります。
// Roktは、可能な限り多くの次のユーザー属性を設定することを推奨します:
currentUser?.setUserAttribute(key: 'firstname', value: 'John');
currentUser?.setUserAttribute(key: 'lastname', value: 'Doe');
// 電話番号は'1234567890'または'+1 (234) 567-8901'の形式でフォーマットできます
currentUser?.setUserAttribute(key: 'mobile', value: '3125551515');
currentUser?.setUserAttribute(key: 'age', value: '33');
currentUser?.setUserAttribute(key: 'gender', value: 'M');
currentUser?.setUserAttribute(key: 'city', value: 'Brooklyn');
currentUser?.setUserAttribute(key: 'state', value: 'NY');
currentUser?.setUserAttribute(key: 'zip', value: '123456');
currentUser?.setUserAttribute(key: 'dob', value: 'yyyymmdd');
currentUser?.setUserAttribute(key: 'title', value: 'Mr');
currentUser?.setUserAttribute(key: 'language', value: 'en');
currentUser?.setUserAttribute(key: 'value', value: '52.25');
currentUser?.setUserAttribute(key: 'predictedltv', value: '136.23');
// 複数の値を含むユーザー属性を作成することができます
var attributeList = <String>[];
attributeList.add('documentary');
attributeList.add('comedy');
attributeList.add('romance');
attributeList.add('drama');
currentUser?.setUserAttributeArray(key: 'favorite-genres', value: attributeList);
// ユーザー属性を削除するには、removeUserAttributeを呼び出し、属性名を渡します。すべてのユーザー属性は同じキー空間を共有します。
currentUser?.removeUserAttribute(key: 'attribute-to-remove');
3. ファネルイベントのキャプチャ3. ファネルイベントのキャプチャ への直接リンク
Rokt SDKを使用すると、イベントトラッキングを実装して、アプリ内でのユーザーの旅路を説明するデータを収集できます。このデータを使用して、ユーザーの体験を最適化することができます。
SDKで記録できる主なイベントタイプは3つあります:
- スクリーンビューイベント (Screen View Events): これらは、アプリの画面が読み込まれたときにトリガーできるイベントです。
- カスタムイベント (Custom Events): これらは、アプリ固有の情報を追跡するために作成する自由形式のイベントです。
- コマースイベント (Commerce Events): これらは、ショッピング体験のさまざまな段階を説明できるeコマース特有のイベントで、カートへのアイテム追加や最終購入を含みます。
Rokt SDKとの最初の統合時には、スクリーンビューのトラッキングを実装することから始めてください。カスタムおよびコマースイベントのトラッキングについては、付録を参照してください。
スクリーンビューのトラッキングスクリーンビューのトラッキング への直接リンク
トラッキングできる最も基本的なイベントタイプの1つがスクリーンビューです。スクリーンビューをログに記録するには、画面が読み込まれるとすぐにmpInstance?.logScreenEvent()メソッドを呼び出し、画面の名前を文字列として渡し、必要に応じて説明的な属性を含むハッシュマップを渡します。
渡す名前は、'homepage'や'product detail page'のような限られたセットの画面の1つであるべきです。
import 'package:mparticle_flutter_sdk/events/screen_event.dart';
var screenInfo = {
'rating': '5',
'property_type': 'hotel'
};
ScreenEvent screenEvent = ScreenEvent(eventName: 'Details')
..customAttributes = screenInfo;
mpInstance?.logScreenEvent(screenEvent);
#```## 4. プレースメントを表示する
Rokt SDKの主な価値は、selectPlacements メソッドを通じて解放されます。このメソッドは、提供された属性に基づいて顧客に対して非常に関連性の高いプレースメント(またはレイアウト)を提供します。
Roktの統合が初期化されたら、レイアウトをレンダリングするページから selectPlacements メソッドを呼び出すことができます。ユーザーに最適な体験を提供するために、可能な限り早く、必要なすべての属性が利用可能になった時点で呼び出すべきです。
selectPlacements を呼び出す際には、少なくとも email、firstname、lastname、billingzipcode、および confirmationref 属性を提供する必要があります。
final attributes = {
"email": "j.smith@example.com",
"firstname": "Jenny",
"lastname": "Smith",
"mobile": "(555)867-5309",
"postcode": "90210",
"country": "US"
};
// プレースメントにカスタムフォントを使用したい場合、fontTypefaces マップを作成します
final fontTypefaces = {"Arial-Bold": "fonts/Arial-Bold.ttf"};
// また、アプリがダークモードまたはライトモードにあるかどうかを主にカスタマイズするための `RoktConfig` などのオプションのパラメータを渡すこともできます。埋め込みビューやイベントなどの追加のオプションパラメータは下に示されています。
final roktConfig = RoktConfig(
colorMode: ColorMode.light
);
mpInstance?.rokt.selectPlacements(
identifier: "RoktExperience",
attributes: attributes,
fontFilePathMap: fontTypefaces,
roktConfig: roktConfig
);
オプション機能オプション機能 への直接リンク
埋め込みプレースメント埋め込みプレースメント への直接リンク
埋め込みプレースメントは、上記のオーバーレイプレースメントと同じ推奨事項と要件を共有しますが、プレースメントビューをUIに埋め込むことができます。
RoktLayoutには、ウィジェットが作成されたときに通知するコールバックがあります。
import 'package:mparticle_flutter_sdk/mparticle_flutter_sdk.dart';
const RoktLayout(
placeholderName: "RoktEmbedded1",
onLayoutCreated: () {
// レイアウトが作成されました
}
);
イベントイベント への直接リンク
SDKは、各ページのイベントをMPRoktEvents EventChannelを通じてストリームとして提供します。
final EventChannel roktEventChannel = EventChannel('MPRoktEvents');
roktEventChannel.receiveBroadcastStream().listen((dynamic event) {
debugPrint("rokt_event: _receiveRoktEvent $event ");
});
| イベント | 説明 | パラメータ |
|---|---|---|
| ShowLoadingIndicator | SDKがRoktバックエンドを呼び出す前にトリガーされます | |
| HideLoadingIndicator | SDKがRoktバックエンドから成功または失敗を受信したときにトリガーされます | |
| OfferEngagement | ユーザーがオファーに関与したときにトリガーされます | placementId: String |
| PositiveEngagement | ユーザーがオファーに対して積極的に関与したときにトリガーされます | placementId: String |
| FirstPositiveEngagement | ユーザーが初めてオファーに対して積極的に関与したときにトリガーされます | placementId: String, fulfillmentAttributes: FulfillmentAttributes |
| PlacementInteractive | プレースメントがレンダリングされ、対話可能になったときにトリガーされます | placementId: String |
| PlacementReady | プレースメントが表示準備ができたが、まだコンテンツがレンダリングされていないときにトリガーされます | placementId: String |
| PlacementClosed | ユーザーによってプレースメントが閉じられたときにトリガーされます | placementId: String |
| PlacementCompleted | オファーの進行が終了し、表示するオファーがなくなったときにトリ ガーされます。 また、キャッシュがヒットしたが、取得されたプレースメントが以前に却下されたため表示されない場合にもトリガーされます | placementId: String |
| PlacementFailure | 何らかの失敗によりプレースメントを表示できない場合、または表示するプレースメントがない場合にトリガーされます | placementId: String (オプション) |
| OpenUrl | ユーザーがパートナーアプリに送信するように設定されたURLを押したときにトリガーされます | placementId: String, url: String |
付録付録 への直接リンク
アプリケーション設定の使用アプリケーション設定の使用 への直接リンク
アプリケーションは、独自のアプリケーション環境から設定を渡すことができるようになりました。これにより、Rokt SDK はシステムのデフォルトに依存せず、アプリケーションのカスタム設定を使用することができます。
ColorMode オブジェクトColorMode オブジェクト への直接リンク
| 値 | 説明 |
|---|---|
| light | アプリケーションはライトモードです |
| dark | アプリケーションはダークモードです |
| system | アプリケーションはシステムのカラーモードをデフォルトとします |
CacheConfig オブジェクトCacheConfig オブジェクト への直接リンク
CacheConfig はモバイル統合にのみ関連し、ウェブでは無視できます。
| パラメータ | 説明 |
|---|---|
| cacheDuration | Rokt SDK がエクスペリエンスをキャッシュする秒単位のオプションの期間です。許可される最大値は90分で、デフォルト(値が提供されていないか無効な場合)は90分です。 |
| cacheAttributes | キャッシュキーとして使用するオプションの属性です。null の場合、selectPlacements で送信されたすべての属性がキャッシュキーとして使用されます。 |
final roktConfig = RoktConfig(
cacheConfig: CacheConfig(
cacheDurationInSeconds: 100,
cacheAttributes: attributes
)
);
mpInstance?.rokt.selectPlacements(
identifier: "RoktExperience",
attributes: attributes,
roktConfig: roktConfig
);