PageSense React Native — SDK関数リファレンス

PageSense React Native — SDK関数リファレンス

お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。

概要  

このドキュメントでは、AndroidとiOSのReact Native連携の両方で共通して使用されるJavaScriptラッパー(PageSenseSDKWrapper.js)について説明します。このラッパーは、React Native Native Bridgeを介してPageSense SDKを操作するための統一されたJavaScriptインターフェースを提供し、プラットフォーム固有のネイティブモジュールの違いを抽象化します。

JavaScriptラッパーの作成  

プロジェクトのルートから次のパスにラッパーファイルを作成します。
  1. src/sdk/PageSenseSDKWrapper.js
  2. javascript
  3. import { NativeModules } from 'react-native';
  4. const { PageSenseSDKModule }= NativeModules;
  5. export const GoalProperty= Object.freeze({
  6.   REVENUE: 'revenue',
  7. });
  8. const VALID_GOAL_PROPERTIES= new Set(Object.values(GoalProperty));
  9. class PageSenseSDKWrapper {
  10.   constructor() {}
  11.   async initialiseSDK(accountId,sdkKey,projectName) {
  12.     try {
  13.       this._validateString(accountId, 'accountId');
  14.       this._validateString(sdkKey, 'sdkKey');
  15.       this._validateString(projectName, 'projectName');
  16.       constresult = await PageSenseSDKModule.initialiseSDK(accountId,sdkKey,projectName);
  17.       returnresult === true;
  18.     } catch (error) {
  19.       console.log('[PageSenseSDK] initialiseSDK error:',error);
  20.       return false;
  21.     }
  22.   }
  23.   async activateExperimentByContext(experimentName,userContext) {
  24.     try {
  25.       this._validateString(experimentName, 'experimentName');
  26.       this._validateUserContext(userContext);
  27.       constsafeUserContext = {
  28.         userId: userContext.userId,
  29.         userAttributes: userContext.userAttributes || {},
  30.       };
  31.       constvariation = await PageSenseSDKModule.activateExperimentByContext(
  32. experimentName,
  33. safeUserContext,
  34.       );
  35.       returnvariation ?? null;
  36.     } catch (error) {
  37.       console.log('[PageSenseSDK] activateExperimentByContext error:',error);
  38.       return null;
  39.     }
  40.   }
  41.   async getVariationNameByContext(experimentName,userContext) {
  42.     try {
  43.       this._validateString(experimentName, 'experimentName');
  44.       this._validateUserContext(userContext);
  45.       constsafeUserContext = {
  46.         userId: userContext.userId,
  47.         userAttributes: userContext.userAttributes || {},
  48.       };
  49.       constvariation = await PageSenseSDKModule.getVariationNameByContext(
  50. experimentName,
  51. safeUserContext,
  52.       );
  53.       returnvariation ?? null;
  54.     } catch (error) {
  55.       console.log('[PageSenseSDK] getVariationNameByContext error:',error);
  56.       return null;
  57.     }
  58.   }
  59.   trackGoalByContext(goalName,userContext,goalProperties) {
  60.     try {
  61.       this._validateString(goalName, 'goalName');
  62.       this._validateUserContext(userContext);
  63.       constsafeUserContext = {
  64.         userId: userContext.userId,
  65.         userAttributes: userContext.userAttributes || {},
  66.       };
  67.       if (goalProperties === undefined) {
  68.         PageSenseSDKModule.trackGoalByContext(goalName,safeUserContext);
  69.       } else {
  70.         this._validateGoalPropertiesNonEmpty(goalProperties);
  71.         PageSenseSDKModule.trackGoalWithPropertiesByContext(
  72. goalName,
  73. safeUserContext,
  74. goalProperties,
  75.         );
  76.       }
  77.     } catch (error) {
  78.       console.log('[PageSenseSDK] trackGoalByContext error:',error);
  79.     }
  80.   }
  81.   _validateString(param,paramName) {
  82.     if (typeofparam !== 'string'|| param.trim()=== '') {
  83.       throw new Error(`[PageSenseSDK] Invalid ${paramName}: must be a non-empty string`);
  84.     }
  85.   }
  86.   _validateAttributes(attributes) {
  87.     if (attributes === undefined|| attributes === null) return;
  88.     if (typeofattributes !== 'object'|| Array.isArray(attributes)) {
  89.       throw new Error('[PageSenseSDK] attributesはキーと値のペアのオブジェクトである必要があります');
  90.     }
  91.     for (constkey inattributes) {
  92.       if (typeofkey !== 'string'|| key.trim()=== '') {
  93.         throw new Error('[PageSenseSDK] 属性キーが無効です。空でない文字列である必要があります');
  94.       }
  95.       constvalue = attributes[key];
  96.       if (typeofvalue !== 'string') {
  97.         throw new Error(`[PageSenseSDK] 属性「${key}」の値が無効です。使用できる型は文字列です`);
  98.       }
  99.     }
  100.   }
  101.   _validateUserContext(userContext) {
  102.     if (
  103. userContext === undefined||
  104. userContext === null||
  105.       typeofuserContext !== 'object'||
  106.       Array.isArray(userContext)
  107.     ) {
  108.       throw new Error('[PageSenseSDK] userContextは有効なオブジェクトである必要があります');
  109.     }
  110.     this._validateString(userContext.userId, 'userContext.userId');
  111.     if (userContext.userAttributes !== undefined&& userContext.userAttributes !== null) {
  112.       this._validateAttributes(userContext.userAttributes);
  113.     }
  114.   }
  115.   _validateGoalPropertiesNonEmpty(goalProperties) {
  116.     if (goalProperties === null) {
  117.       throw new Error(
  118.         '[PageSenseSDK] goalPropertiesをnullにすることはできません。プロパティのない目標では、この引数を省略してください。',
  119.       );
  120.     }
  121.     if (typeofgoalProperties !== 'object'|| Array.isArray(goalProperties)) {
  122.       throw new Error('[PageSenseSDK] goalPropertiesはキーと値のオブジェクトである必要があります');
  123.     }
  124.     constkeys = Object.keys(goalProperties);
  125.     if (keys.length === 0) {
  126.       throw new Error(
  127.         '[PageSenseSDK] goalPropertiesを空にすることはできません。プロパティのない目標では、この引数を省略してください。',
  128.       );
  129.     }
  130.     for (constkey ofkeys) {
  131.       if (!VALID_GOAL_PROPERTIES.has(key)) {
  132.         throw new Error(
  133.           `[PageSenseSDK] 無効な目標プロパティキー'${key}'。`+
  134.             `次のいずれかである必要があります:${Array.from(VALID_GOAL_PROPERTIES).join(', ')}`,
  135.         );
  136.       }
  137.       constvalue = goalProperties[key];
  138.       if (typeofvalue !== 'string') {
  139.         throw new Error(
  140.           `[PageSenseSDK] 目標プロパティ'${key}'の値が無効です。使用可能な型:string`,
  141.         );
  142.       }
  143.     }
  144.   }
  145. }
  146. export default new PageSenseSDKWrapper();

SDK関数  

initialiseSDK  

PageSense SDKを初期化し、PageSenseClientインスタンスを作成します。他のSDK関数を使用する前に、アプリケーションの起動時に一度呼び出す必要があります。

メソッドシグネチャ

javascript
async initialiseSDK(accountId,sdkKey,projectName)

パラメーター

パラメーター
必須
説明
accountId
string
はい
PageSenseアカウントの識別子。
sdkKey
string
はい
認証に使用するSDKキー。
projectName
string
はい
PageSenseプロジェクトの名前。

戻り値の型

Promise<boolean> — SDKの初期化に成功した場合はtrue、失敗した場合はfalseを返します。
  1. javascript
  2. useEffect(()=> {
  3.   async function initializeSDK() {
  4.     try {
  5.       constresult = await PageSenseSDKWrapper.initialiseSDK(
  6.         'PAGESENSE_ACCOUNT_ID',
  7.         'PAGESENSE_SDK_KEY',
  8.         'PAGESENSE_PROJECT_NAME',
  9.       );
  10.       setSdkReady(true);
  11.     } catch (error) {
  12.       setSdkReady(true);
  13.     }
  14.   }
  15.   initializeSDK();
  16. }, []);
メモ
  • プロジェクトごとに、アプリケーションのライフサイクル内でSDKを初期化するのは1回だけにしてください。
  • SDKの初期化に失敗しても、アプリケーションのUIをブロックしないでください。SDKの初期化に失敗した場合でも、アプリケーションが常に処理を続行できるようにしてください。
activateExperimentByContext  
PageSenseUserContextを使用してユーザーに対してFullStackエクスペリメントを有効にし、ユーザーに割り当てられたバリエーションを返します。PageSenseにインプレッションイベントを送信し、訪問者の割り当てを保存します。

メソッドシグネチャ
javascript
async activateExperimentByContext(experimentName,userContext)

パラメーター
パラメーター
必須
説明
experimentName
string
はい
PageSenseで設定された実験の名前。
userContext
object
はい
ユーザーコンテキストオブジェクト(userIdと任意のuserAttributesを含む)。
userContext.userId
string
はい
ユーザーの一意の識別子。
userContext.userAttributes
object
いいえ
オーディエンスのターゲティングに使用されるユーザー属性のキーと値のペア。すべてのキーと値は文字列である必要があります。

戻り値の型
Promise<string|null>—ユーザーに割り当てられたバリエーション名を返します。バリエーションが割り当てられていない場合やエラーが発生した場合は、nullを返します。
  1. javascript
  2. constuserContext = {
  3.   userId: 'USER_ID',
  4.   userAttributes: {
  5.     DeviceType: 'Phone',
  6.     OS: 'Android',
  7.     OSVersion: '14',
  8.     DeviceModel: 'Pixel 8 Pro',
  9.   },
  10. };
  11. constvariation = await PageSenseSDKWrapper.activateExperimentByContext(
  12.   'EXPERIMENT_NAME',
  13. userContext,
  14. );
  15. switch (variation) {
  16.   case 'Original': setButtonColor('#4F46E5'); break;
  17.   case 'Variation 1': setButtonColor('#EF4444'); break;
  18.   case 'Variation 2': setButtonColor('#16A34A'); break;
  19.   default: setButtonColor('#6B7280');
  20. }

メモ

  • ユーザーがすぐに正しいバリエーションに割り当てられるように、画面の読み込み時にこの関数を呼び出します。
  • nullが返された場合に備えて、必ず安全な既定のUIフォールバックを適用してください。
getVariationNameByContext  
実験を有効化せずに、PageSenseUserContextを使用してユーザーに割り当てられたバリエーションを取得します。インプレッションイベントは送信されず、訪問者の割り当ても保存されません。
訪問を記録せずにバリエーションを確認する必要がある場合に、この関数を使用します。たとえば、メインの実験フロー外でのログ記録や条件付きロジックで使用できます。

メソッドシグネチャ
javascript
async getVariationNameByContext(experimentName,userContext)

パラメーター
パラメーター
必須
説明
experimentName
string
はい
PageSenseで設定された実験の名前です。
userContext
object
はい
ユーザーコンテキストオブジェクト。含まれる項目:userId、任意のuserAttributes
userContext.userId
string
はい
ユーザーの一意の識別子です。
userContext.userAttributes
object
いいえ
ユーザー属性のキーと値のペアです。すべてのキーと値は文字列である必要があります。

戻り値の型
Promise<string|null> — ユーザーに割り当てられたバリエーション名を返します。バリエーションが見つからない場合、またはエラーが発生した場合は null を返します。
  1. javascript
  2. constvariation = await PageSenseSDKWrapper.getVariationNameByContext(
  3.   'EXPERIMENT_NAME',
  4. userContext,
  5. );
  6. console.log('Variation Name:',variation);
注意事項
  • activateExperimentByContextとは異なり、この関数はPageSenseにインプレッションを送信せず、ユーザーをバリエーションに割り当てません。
trackGoalByContext  
PageSenseUserContextを使用して目標イベントをトラッキングします。目標に関連プロパティがあるかどうかに応じて、2通りの呼び出し方法に対応しています。

目標プロパティなし— FullStackカスタムイベント目標に使用します。
javascript
trackGoalByContext(goalName,userContext)

目標プロパティあり— 収益目標に使用します。
javascript
trackGoalByContext(goalName,userContext,goalProperties)

パラメーター
パラメーター
必須
説明
goalName
文字列
はい
PageSenseで設定された目標の名前。
userContext
オブジェクト
はい
ユーザーコンテキストオブジェクト(userIdと任意のuserAttributesを含む)。
userContext.userId
文字列
はい
ユーザーの一意の識別子。
userContext.userAttributes
オブジェクト
いいえ
ユーザー属性のキーと値のペア。すべてのキーと値は文字列である必要があります。
goalProperties
オブジェクト
いいえ
目標プロパティオブジェクト。キーはGoalProperty定数のいずれかである必要があります。指定する場合は空にできません。

戻り値の型
void
例 — プロパティなしでの目標の追跡
  1. javascript
  2. function handleSubmitButton() {
  3.   constuserContext = {
  4.     userId: 'USER_ID',
  5.     userAttributes: { DeviceType: 'Phone', OS: 'Android' },
  6.   };
  7.   PageSenseSDKWrapper.trackGoalByContext('GOAL_NAME',userContext);
  8. }
例 — 収益目標の追跡
  1. javascript
  2. import PageSenseSDKWrapper, { GoalProperty } from './src/sdk/PageSenseSDKWrapper';
  3. function handleCompletePurchase(purchaseAmountInDollars) {
  4.   constuserContext = {
  5.     userId: 'USER_ID',
  6.     userAttributes: { DeviceType: 'Phone', OS: 'Android' },
  7.   };
  8.   // ドルをセントに変換します:$100.50 → '10050'
  9.   constrevenueInCents = String(Math.round(purchaseAmountInDollars * 100));
  10.   constgoalProperties = {
  11.     [GoalProperty.REVENUE]: revenueInCents,
  12.   };
  13.   PageSenseSDKWrapper.trackGoalByContext('PURCHASE_GOAL_NAME',userContext,goalProperties);
  14. }
  15. handleCompletePurchase(100.50);

注意事項

  • goalPropertiesを指定する場合は、空ではないオブジェクトにする必要があります。プロパティのない目標では、引数自体を省略してください。nullや空のオブジェクトは渡さないでください。
  • 収益額は、セント単位の文字列として渡す必要があります。ドル額に100を掛け、最も近い整数に丸めてください。
  • 特定のユーザー操作またはイベントが正常に完了した直後に、目標のトラッキングを実行してください。
GoalProperty定数  
GoalProperty定数はPageSenseSDKWrapper.jsからエクスポートされており、ハードコードされた文字列の代わりに、goalPropertiesオブジェクトのキーとして使用する必要があります。
javascript
import { GoalProperty } from './src/sdk/PageSenseSDKWrapper';
JS定数
文字列値
Androidネイティブ定数
iOSネイティブ列挙型ケース
目的
GoalProperty.REVENUE
'revenue'
GoalProperty.REVENUE
GoalProperty.revenue
収益目標に使用する、セント単位の収益額

GoalPropertyキーがブリッジを介して渡される仕組み  
  • Android—ネイティブKotlinモジュールは、GoalProperty.<CONSTANT>.valueとの照合により、各文字列キーを対応するGoalProperty列挙型定数にマッピングし、SDKに渡されるHashMap<GoalProperty, String>を生成します。
  • iOS—ネイティブSwiftモジュールは、GoalProperty(rawValue:)を使用して各文字列キーを対応するGoalProperty列挙型ケースにマッピングし、SDKに渡される[GoalProperty: String]ディクショナリーを生成します。
JavaScript: { [GoalProperty.REVENUE]: '10050' }

文字列キー 'revenue' がブリッジを介して渡されます

Android: HashMap { GoalProperty.REVENUE → '10050' }
iOS: [GoalProperty.revenue: '10050']

PageSenseUserContext の構造  
  1. javascript
  2. constuserContext = {
  3.   userId: 'USER_ID',            // 必須—空でない文字列
  4.   userAttributes: {             // 任意—すべてのキーと値は文字列である必要があります
  5.     DeviceType: 'Phone',
  6.     OS: 'Android',
  7.     OSVersion: '14',
  8.     DeviceModel: 'Pixel 8 Pro',
  9.   },
  10. };
項目
種類
必須
説明
userId
string
はい
ユーザーの一意の識別子です。空でない文字列である必要があります。
userAttributes
object
いいえ
オーディエンスのターゲティングに使用されるキーと値のペアです。すべてのキーと値は文字列である必要があります。省略した場合、初期設定では空のオブジェクトになります。
   





このドキュメントは、手順に沿って進められるように作成されています。さらにサポートが必要な場合やご不明な点がある場合は、support@zohopagesense.com - までお気軽にお問い合わせください。いつでもサポートいたします。