すべてのプロダクト
Search
ドキュメントセンター

Mobile Platform as a Service:プラグインのカスタマイズ

最終更新日:Jan 17, 2025

特定の時間に何かを実行する場合、たとえば、ページにアクセスしたときにイベントをログに記録する場合、プラグインを開発する必要があります。プラグインが対応するイベントをサブスクライブすると、ハンドラでイベントに付随するデータを処理できます。

このタスクについて

プラグインのカスタマイズ手順は、次の 3 つのステップに分かれています。

  1. プラグインを作成する

  2. プラグインを登録する

  3. プラグインを使用する

コードサンプルを参照して、システムが H5 ページを読み込むときにページナビゲーションバーを変更するプラグインをカスタマイズする方法を学習してください。

手順

プラグインを作成する

次のような形式でプラグインクラスを作成します。以下の考慮事項が適用されます。

  • 名前:コンテナによってデフォルトで提供されるプラグイン名との一貫性を保つために、名前は XXPlugin4 で始まります。ここで、XX はカスタムプレフィックスです。

  • 基底クラス:すべてのプラグインは NBPluginBase から継承します。

  • 基本メソッドの実装:.m ファイルでは、次の 3 つのメソッドをオーバーライドする必要があります。

    • - (void)pluginDidLoad:必須。イベントを監視するには、イベントリストについてヘッダーファイル NBDefines.h を参照してください。

    • - (void)addJSApis:オプション。H5 と通信するため、JSAPI を登録する場合があります。

    • - (void)handleEvent:必須。監視対象のイベントがトリガーされたときにロジックを処理します。

.h ファイルは次のとおりです。

.m ファイルは次のとおりです。

イベントを監視する

- (void)pluginDidLoad メソッドで、監視する必要があるイベントを登録します。

- (void)pluginDidLoad {
    self.scope = kPSDScope_Scene; // 1
    [self.target
    addEventListener:kNBEvent_Scene_TitleView_Title_Click // 2
                     withListener:self // 3
                       useCapture:NO]; // 4
    [super pluginDidLoad];
}

addEventListener メソッドは特定のイベントを監視するために使用されます。各ステップの説明は次のとおりです。

名前

定義

scope

イベントが動作する範囲を設定します。現在、サポートされている範囲は、小さい方から大きい方へ、Scene、Session、Service です。

event

イベント名を設定します。イベント定数は NBDefines.h で定義されています。

listener

イベントの処理プログラム、つまり - handleEvent: を提供するオブジェクトを設定します。

capture

キャプチャによってイベントをブロードキャストするかどうかを設定します。通常は NO です。

JSAPI を追加する

プラグインの登録プロセスで、H5 ページと対話するために JSAPI をカスタマイズする必要がある場合は、コードの - (void)addJSApis メソッドで JSAPI を登録できます。詳細については、「JSAPI のカスタマイズ > コードで登録する」をご参照ください。このメソッドを実装するかどうかは、必要に応じて決定できます。

- (void)addJSApis
{
    [super addJSApis];
    // TitleView に関連するカスタム JSAPI を追加できます
}

モニターを処理する

最後に、監視対象のイベントがトリガーされたときに、- (void)handleEvent でロジックを処理します。

- (void)handleEvent:(NBNavigationTitleViewEvent *)event
{
    [super handleEvent:event];

    if([kNBEvent_Scene_TitleView_Create_Before isEqualToString:event.eventType]) {
        // TitleView をカスタマイズする場合、デフォルトの kNBEvent_Scene_TitleView_[Title_Set | Title_Click | Subtitle_Click] およびその他のイベントのサポートは失われます
        NBNavigationTitleViewEvent *e = (NBNavigationTitleViewEvent *)event;
        H5WebViewController *currentViewController = (H5WebViewController *)event.context.currentViewController;
        UINavigationController *navi = currentViewController.navigationController ?:(UINavigationController *)APPDELEGATE.window.rootViewController;
        UINavigationBar *bar = navi.navigationBar;
        H5NavigationTitleView *newTitleView = [self createNavigationTitleView:bar.bounds];
        [newTitleView setMainTitle:@"Recreate" subtitle:nil];
        newTitleView.delegate = [e.titleView delegate];
        currentViewController.navigationItem.titleView = newTitleView;
        e.titleView = newTitleView;
        [e preventDefault];
    }
}

- (void)pluginDidLoad メソッドで監視されているイベントがトリガーされると、イベントトリガー時のロジックは - handleEvent: メソッドで処理されるため、複数のメソッドを監視している場合は、eventclass または eventType に従ってイベントを個別に処理する必要があります。

プラグインを登録する

プラグインクラスを作成した後、カスタム plist ファイルにこのプラグインを登録する必要があります。詳細については、「JSAPI のカスタマイズ > JSAPI を登録する」をご参照ください。

aaa

登録されたプラグインは辞書型で、次の 3 つの項目が含まれています。

名前

定義

name

作成されたプラグインクラスの名前

scope

プラグインが動作する範囲

events

監視対象のイベントの名前

プラグインを使用する

  1. pluginDidLoad メソッドにブレークポイントを追加して、トリガー時間の呼び出しシーケンススタックが正しいかどうかを確認します。

    aaa

  2. handleEvent メソッドにブレークポイントを追加して、監視対象のイベントが正しくトリガーされるかどうかを確認します。

    aaa

  3. H5 ページのカスタムナビゲーションバーのスタイルが有効になっているかどうかを確認します。