SDKカスタマイズ

SDKカスタマイズ

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

概要:

SDK カスタマイズとは、ソフトウェア開発キット(SDK)をアプリケーションや開発環境の特有のニーズに合わせて調整することを指します。SDK には通常、ツール、ライブラリ、ドキュメント、そしてコードサンプルが含まれており、開発者がアプリケーションを構築する際に役立ちます。

PageSense SDK を初期設定で初期化すると、以下の構成で PageSenseClient インスタンスが作成されます。
  1. ポーリング間隔: 10秒(10,000ミリ秒)に設定されています。つまり、SDK は PageSense サーバーに対し、プロジェクト構成の更新があるかを10秒ごとに確認します。
  2. ログレベル: INFO に設定されています。これにより、SEVERE、エラー、注意、INFO レベルのすべてのログメッセージが記録されます。
  3. ロガー: SDK は組み込みのロガーを使用して、すべてのログをアプリケーションのコンソールに出力します。ログの取得を開始するために追加の設定は不要です。
これらのデフォルト設定は迅速な統合に最適で、ほとんどの標準的な利用ケースに適しています。

カスタマイズ可能な設定:

さらなる柔軟性とカスタマイズ性を提供するため、PageSense SDK では複数のオプション設定関数が用意されています。これらの関数により、SDK の動作に関するさまざまな側面を制御できます。これらの設定は SDK の初期化時に指定でき、アプリケーションの具体的な要件や環境に合わせて SDK の動作を調整できます。

Function

説明

Polling Interval

SDK が PageSense サーバーからプロジェクト設定の更新を取得する間隔を指定します。これにより、SDK インスタンスが PageSense アプリケーションで定義された最新のプロジェクト設定と常に同期された状態を保てます。

Logger

SDK ログの収集・保存先や方法を制御するため、カスタムロガーの統合が可能です。エンタープライズ全体のログ管理フレームワークと統合する場合に特に有効です。

ユーザー Storage サービス

カスタム ユーザー storage メカニズムを使用して、異なるA/Bテスト実験間でバリエーションの割り当てを永続化することが可能になります。

Log Level

取得するログメッセージの最小レベルを定義します。サポートされているレベルは次の通りです: TRACE, DEBUG, INFO, WARN, エラー, および SEVEREです。

ポーリング間隔:

addPollingInterval 関数を使用すると、PageSense SDK のポーリングサービスのポーリング間隔を設定できます。
初期設定では、ポーリング間隔は10秒に設定されています。addPollingInterval 関数を呼び出すことで、ポーリング間隔を変更できます。詳細は以下をご覧ください。

例 コード:

  1. PageSenseClient pageSenseClient = PageSenseClientBuilder。getBuilder(projectSettings).addPollingInterval(60000).buildClient();

パラメーター詳細:

パラメーター
種類
説明
addPollingInterval
整数
SDKのポーリングサービスの間隔を設定します

APIでは、ポーリング間隔を設定するための時間をミリ秒単位で指定します。上記の例では、ポーリング間隔が60000ミリ秒、つまり60秒に設定されています。
1. アプリケーションの更新頻度、予想されるトラフィック量、サーバーのパフォーマンスに応じて、適切なポーリング間隔を選択してください。
2. 短い間隔(10秒未満)では、次のような結果が発生する可能性があります:
a. サーバー負荷の増加
b. ネットワークトラフィックの増加
c. 更新頻度が高い場合、競合状態(レースコンディション)が発生する可能性
3. 長い間隔(5分超)は、以下の影響を及ぼす場合があります:
a. PageSenseからの最新プロジェクト設定変更の反映が遅れる
b. ユーザーに対し、古いプロジェクト設定のA/Bテスト実験が提供される可能性

SDKロガーのlogLevelについて:

addlogLevel関数では、PageSense SDKに組み込まれたロガーのログレベルを設定できます。この設定により、PageSenseClientが記録するログの詳細度を制御でき、ファイルシステムの容量に応じてログの保存を管理できます。
ログレベルを指定することで、記録されるログメッセージの最小重大度を定義します。ログレベルは文字列(String)で指定し、次のいずれかの値(大文字・小文字は問いません)を設定できます:TRACE、DEBUG、INFO、注意、エラー、またはSEVERE。

例 コード:

  1. PageSenseClient pageSenseClient = PageSenseClientBuilder。getBuilder(projectSettings).addlogLevel(“DEBUG”).buildClient();

パラメーター詳細:

Param
種類
説明
logLevel
String
記録対象となる最小のlog重大度を指定します

上記の例では、logレベルがDEBUGに設定されています。そのため、DEBUG、INFO、注意、エラー、SEVEREの重大度を持つすべてのlogメッセージが顧客のコンソールに記録されます。

カスタムlogger:

組み込みのSDK loggerに加え、PageSense SDKでは独自のカスタムloggerを連携し、アプリケーション処理を記録できます。既存のロギングフレームワークを利用している場合や、ログの管理方法をさらに細かく制御する必要がある場合に便利です。

addCustomLogger関数を使うことで、ユーザー定義のloggerを登録し、PageSense SDKによるすべての処理のログ記録に利用されます。カスタムloggerが指定されている場合、PageSense SDKは独自のloggerではなく提供された実装を通じてすべてのlogメッセージを出力します。

例コード:

  1. PageSenseClient pageSenseClient = PageSenseClientBuilder。getBuilder(projectSettings).addCustomLogger(customLogger).buildClient();

Parameter 詳細:

Param
種類
説明
customLogger
PageSenseLogger のインスタンス
記録される最小ログ重大度を指定します

上記の例では、customLogger は PageSenseLogger インターフェースを実装するクラスのインスタンスです。addCustomLogger に渡す前に、このインターフェースをカスタムロガー内で実装し、必要なロギング動作を処理する必要があります。

PageSenseLogger インターフェースを実装する例 コード:

  1. インポートする com.Zoho.pagesense。logging。PageSenseLogger;
  2. インポートする org。slf4j。Logger;
  3. インポートする org。slf4j。LoggerFactory;

  4. /**
  5. * SLF4J ベースのロガー実装で、PageSenseLogger システムと連携します。自動的に
  6. * SLF4J から有効な最高ログレベルを検出し、PageSenseLogger を設定します。
  7. */
  8. 公開する クラス Slf4jLogger extends PageSenseLogger {

  9. /**
  10. * SLF4J ロガーインスタンスを使用して、実際のロギング呼び出しを委譲します。メッセージは有効な
  11. * SLF4J のバインディングに基づいてログレベルごとに記録されます。
  12. */
  13. 非公開 final Logger logger;

  14. /**
  15. * 指定されたクラス名前のためのSlf4jLoggerを構築します。
  16. * @param className ロギングを実行するクラス
  17. */
  18. 公開する Slf4jLogger(String className) {
  19. // SLF4J ロガーインスタンスを作成
  20. Logger slf4jLogger = LoggerFactory。getLogger(className);
  21. // スーパークラスのコンストラクタをクラス名前と最大ログレベル(文字列)で呼び出し
  22. super(className, determineMaxLogLevel(slf4jLogger));

  23. // ロガーインスタンスを初期化
  24. this。logger = slf4jLogger;
  25. }

  26. /**
  27. * 現在有効な最高のSLF4Jログレベルを判定
  28. * し、その名前をPageSenseLoggerで期待される形式の文字列として返します。
  29. * @param logger SLF4J ロガーインスタンス
  30. * @返品する 有効な最高ログレベルの名前
  31. */
  32. 非公開 static String determineMaxLogLevel(Logger logger) {
  33. if (logger。isTraceEnabled()) 返品する 'TRACE';
  34. if (logger。isDebugEnabled()) 返品する 'DEBUG';
  35. if (logger。isInfoEnabled()) 返品する 'INFO';
  36. if (logger。isWarnEnabled()) 返品する '注意'; // SLF4JのWARNは注意へマッピング
  37. if (logger。isErrorEnabled()) 返品する 'エラー';
  38. // SLF4JにはFATAL用のメソッドがないため、SEVEREは通常SLF4Jのエラーまたは他システムのFATALにマッピングされます
  39.         
  40. // どれも有効でない場合は初期設定値としてINFOを返します
  41. 返品する 'INFO';
  42. }

  43. /**
  44. * TRACEレベルのメッセージを記録します。
  45. * 通常、詳細なデバッグ情報に使用されます。
  46. */
  47. @Override
  48. 公開する 無効 trace(String logMessage) {
  49. if (logger。isTraceEnabled()) {
  50. logger。trace(logMessage);
  51. }
  52. }

  53. /**
  54. * DEBUGレベルのメッセージを記録します。
  55. * 一般的なデバッグ情報に使用され、アプリケーションの流れを診断する際に役立ちます。
  56. */
  57. @Override
  58. 公開する 無効 debug(String logMessage) {
  59. if (logger。isDebugEnabled()) {
  60. logger。debug(logMessage);
  61. }
  62. }

  63. /**
  64. * INFOレベルのメッセージを記録します。
  65. * 一般的な実行時処理に使用されます。
  66. */
  67. @Override
  68. 公開する 無効 info(String logMessage) {
  69. if (logger。isInfoEnabled()) {
  70. logger。info(logMessage);
  71. }
  72. }

  73. /**
  74. * 注意レベルのメッセージを記録します。
  75. * 潜在的な問題や予期しない状況を示しますが、エラーとは異なります。
  76. */
  77. @Override
  78. 公開する 無効 warn(String logMessage) {
  79. if (logger。isWarnEnabled()) {
  80. logger。warn(logMessage);
  81. }
  82. }

  83. /**
  84. * エラーレベルのメッセージを記録します。
  85. * エラー処理に使用され、アプリケーションが引き続き動作可能な場合に利用します。
  86. */
  87. @Override
  88. 公開する 無効 エラー(String logMessage) {
  89. if (logger。isErrorEnabled()) {
  90. logger.エラー(logMessage);
  91. }
  92. }

  93. /**
  94. * SEVEREレベルのメッセージを記録します。
  95. * 重大なエラーとして扱われ、明確化のためにSLF4Jのエラーレベルに[SEVERE]接頭語を付与して記録されます。
  96. */
  97. @Override
  98. 公開する 無効 severe(String logMessage) {
  99. if (logger。isErrorEnabled()) {
  100. logger.エラー('[SEVERE] ' + logMessage);
  101. }
  102. }
  103. }
  104. すでにSDKのログレベルを定義していて、カスタムloggerを使ってSDKを初期化した場合、カスタムloggerのログレベルがPageSense SDKのログレベルよりも優先されます

    ユーザー Storage サービス:

    ユーザー Storage サービス(USS)は、プロジェクト内の異なるA/Bテスト実験にわたってユーザーのバリエーション割り当てを永続的に保存できる外部ストレージ機構です。この機能は、プロジェクトの構成が変更されても、ユーザーが同じバリエーションを継続して表示できるように、バリエーションの割り当てを一貫して維持したい場合に特に役立ちます。

    このような構成変更には以下が含まれます:
    1. 新規バリエーションの追加
    2. 実験のトラフィック割り当ての調整
    3. バリエーション間のトラフィック分割の調整

    ユーザー Storage サービスを利用することで、ユーザー体験を保護し、A/Bテスト実験の結果の信頼性を長期間維持できます。USSはオプション機能で、有効化するには、UserStorageServiceインターフェースを実装し、addUserStorageService関数を使ってPageSense SDKに実装インスタンスを渡してください。

    例 コード:

    1. PageSenseClient pageSenseClient = PageSenseClientBuilder。getBuilder(projectSettings).addUserStorageService(userStorageService).buildClient();
    上記の例では、userStorageServiceは、UserStorageServiceインターフェースを実装するクラスのユーザー定義インスタンスです。

    Parameter 詳細:

    Param
    種類
    説明
    userStorageService
    UserStorageServiceを実装したクラスのインスタンス
    FullStack A/Bテスト実験におけるユーザーの永続的なバリエーション割り当てを管理するためのカスタム実装

    PageSense Java SDK用UserStorageServiceインターフェース実装 例 コード

    1. インポートする java。util。Map;
    2. インポートする java。util。concurrent。ConcurrentHashMap;
    3. 公開する クラス IntegratedUserStorageService implements UserStorageService {
    4. // Storage変数を宣言する
    5. 非公開 final Map userProfileStorage = 新規 ConcurrentHashMap<>();
    6. @Override
    7. 公開する String lookUp(String userId) {
    8. // userIdを検証する
    9. if (userId == null || userId。trim().isEmpty()) {
    10. throw 新規 IllegalArgumentException('ユーザーIDはnullまたは空にできません');
    11. }
    12. 返品する userProfileStorage.取得する(userId);
    13. }
    14. @Override
    15. 公開する 無効 保存(IUserProfile userProfile) {

    16. if (userProfile == null || userProfile。getUserId() == null ||
    17. userProfile。getUserId().trim().isEmpty()) {


    18. throw 新規 IllegalArgumentException('UserProfileまたはユーザーIDはnullまたは空にできません');
    19. }
    20. try {
    21. // ユーザー権限のJSON文字列を取得する
    22. String userProfileJSON = userProfile。getUserProfileJSONString();
    23. // ユーザー権限のJSON文字列を保存します
    24. userProfileStorage。put(userProfileJSON。getUserId(), userProfileJSON);
    25. } catch (Exception ex) {
    26. throw 新規 RuntimeException('ユーザー権限の保存に失敗しました: ' + ex。getMessage(), ex);
    27. }
    28. }
    29. }

    このドキュメントが手順のご理解にお役立ていただければ幸いです。追加の説明が必要な場合やご質問がある場合は、いつでもサポート窓口(サポート@zohopagesense。com)までご連絡ください。