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);
  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);
  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);
  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);
  79.     }
  80.   }
  81.   _validateString(param,paramName) {
  82.     if (typeofparam !== 'string'|| param.trim()=== '') {
  83.       throw new Error(`[PageSenseSDK] 無効な${paramName}:空でない文字列を指定してください`);
  84.     }
  85.   }
  86.   _validateAttributes(attributes) {
  87.     if (attributes === undefined|| attributes === null) return;
  88.     if (typeofattributes !== 'object'|| Array.isArray(attributes)) {
  89.       throw new Error('[PageSenseSDK] 属性はキーと値の形式のオブジェクトである必要があります');
  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関数を使用する前に1回呼び出す必要があります。

メソッドシグネチャ

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を一度だけ初期化してください。
  • SDKの初期化に失敗しても、アプリケーションのUIをブロックしないでください。SDKの初期化に失敗した場合でも、常にアプリを続行できるようにしてください。
activateExperimentByContext  
PageSenseUserContextを使用してユーザーに対してフルスタックテストを有効化し、そのユーザーに割り当てられたバリエーションを返します。インプレッションイベントをPageSenseに送信し、訪問者への割り当てを保持します。

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

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

戻り値の型
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);
注意事項
  • activateExperimentByContextとは異なり、この関数はPageSenseにインプレッションを送信せず、ユーザーをバリエーションに割り当てません。
trackGoalByContext  
PageSenseUserContextを使用して目標イベントを追跡します。目標に関連付けられたプロパティがあるかどうかに応じて、2通りの呼び出し方法を使用できます。

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

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

パラメーター
パラメーター
型
必須
説明
goalName
string
はい
PageSenseで設定した目標の名前。
userContext
object
はい
ユーザーコンテキストオブジェクト(userIdおよび任意のuserAttributesを含む)。
userContext.userId
string
はい
ユーザーの一意の識別子。
userContext.userAttributes
object
いいえ
ユーザー属性のキーと値のペア。すべてのキーと値は文字列にする必要があります。
goalProperties
object
いいえ
目標プロパティオブジェクト。キーには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列挙型定数にマッピングします。これにより生成されたHashMap<GoalProperty, String>がSDKに渡されます。
  • iOS—ネイティブのSwiftモジュールは、GoalProperty(rawValue:)を使用して、各文字列キーを対応するGoalProperty列挙型ケースにマッピングします。これにより生成された[GoalProperty: String]辞書がSDKに渡されます。
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
文字列
はい
ユーザーの一意の識別子です。空でない文字列を指定する必要があります。
userAttributes
オブジェクト
いいえ
オーディエンスのターゲティングに使用するキーと値のペアです。すべてのキーと値は文字列である必要があります。省略した場合、初期設定では空のオブジェクトになります。
   





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




              Zoho Campaigns Resources

                Zoho WorkDrive Resources




                  • Desk Community Learning Series


                  • Digest


                  • Functions


                  • Meetups


                  • Kbase


                  • Resources


                  • Glossary


                  • Desk Marketplace


                  • MVP Corner


                  • Word of the Day


                  • Ask the Experts









                                  • Related Articles

                                  • PageSense Android SDK — React Nativeブリッジ連携ガイド

                                    お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。 概要 このガイドでは、React Nativeのネイティブブリッジを使用して、PageSense Android SDKをReact Nativeアプリケーションに統合する方法を説明します。このブリッジにより、React NativeのJavaScriptコードからAndroid ...
                                  • PageSense iOS SDK — React Nativeブリッジ連携ガイド

                                    お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。 概要 このガイドでは、React Nativeネイティブブリッジを使用して、PageSense iOS SDKをReact Nativeアプリケーションに統合する方法について説明します。このブリッジにより、React NativeのJavaScriptコードからiOS ...
                                  • PageSense React Native ブリッジのリリースノート

                                    お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。 概要 このリリースでは、AndroidおよびiOS向けのPageSense React Native ...
                                  • PageSense React Native — SDK のカスタマイズ

                                    お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。 概要 PageSense SDKでは、初期化時に設定できるオプションを使用して、ログの出力方法や、SDKが更新済みのプロジェクトの設定を取得する頻度を制御できます。これらのオプションはネイティブモジュールで設定し、AndroidとiOSの両方に適用されます。 ポーリング間隔 ...
                                  • Zoho PageSenseとIntercomの連携

                                    お知らせ:当社は、お客様により充実したサポート情報を迅速に提供するため、本ページのコンテンツは機械翻訳を用いて日本語に翻訳しています。正確かつ最新のサポート情報をご覧いただくには、本内容の英語版を参照してください。 Intercom連携により、Intercomを通じてやり取りした訪問者の目標達成状況と、セッション録画の再生を確認できます。 PageSenseをIntercomと連携するには 1. テスト一覧ページの上部メニューにある[連携]をクリックします。 2. ...

                                  Resources

                                  Videos

                                  Watch comprehensive videos on features and other important topics that will help you master Zoho CRM.



                                  eBooks

                                  Download free eBooks and access a range of topics to get deeper insight on successfully using Zoho CRM.



                                  Webinars

                                  Sign up for our webinars and learn the Zoho CRM basics, from customization to sales force automation and more.



                                  CRM Tips

                                  Make the most of Zoho CRM with these useful tips.