日本熟妇hd丰满老熟妇,中文字幕一区二区三区在线不卡 ,亚洲成片在线观看,免费女同在线一区二区

自定義 API

本文分別從以下兩個方面對自定義 API 進行詳細(xì)的介紹:

  • 小程序調(diào)用客戶端自定義 API;

  • 客戶端發(fā)送小程序自定義事件。

小程序調(diào)用客戶端自定義 API

小程序調(diào)用客戶端自定義 API 步驟如下:

  1. 客戶端自定義 API。

    • 自定義 class 繼承自 SimpleBridgeExtension

      public class CustomApiBridgeExtension extends SimpleBridgeExtension{
      }
      注意

      請不要混淆該類和方法。

    • 實現(xiàn)自定義方法。代碼示例如下:

      public class CustomApiBridgeExtension extends SimpleBridgeExtension{
          @ActionFilter
          public void tinyToNative(@BindingApiContext ApiContext apiContext,
                                   @BindingRequest JSONObject params,
                                   @BindingParam("param1") String param1,
                                   @BindingParam("param2") String param2,
                                   @BindingCallback BridgeCallback callback) {
              ···
          }
      }
      • tinyToNative,表示小程序側(cè)的調(diào)用方法名稱,需要在 @ActionFilter 中添加。

      • 方法中的參數(shù),表示小程序側(cè)傳過來的參數(shù)以及客戶端側(cè)的一些 context 和 bridge。非必填,按實際需求增刪。具體請參考 自定義方法參數(shù)

    • 生成 JSONObject 結(jié)果,并將結(jié)果返回小程序。代碼示例如下:

      public class CustomApiBridgeExtension extends SimpleBridgeExtension{
          @ActionFilter
          public void tinyToNative(@BindingApiContext ApiContext apiContext,
                                   @BindingRequest JSONObject params,
                                   @BindingParam("param1") String param1,
                                   @BindingParam("param2") String param2,
                                   @BindingCallback BridgeCallback callback) {
              ···
              JSONObject result = BridgeResponse.SUCCESS.get();
              result.put("custom_message","value");
        // 將結(jié)果返回給小程序
              callback.sendJSONResponse(result);
          }
      }

      示例代碼補充說明如下:

      • 生成結(jié)果 JSONObject 成功請調(diào)用:

        JSONObject result = BridgeResponse.SUCCESS.get();

        若失敗請調(diào)用:

        JSONObject result = BridgeResponse.Error.newError(errorCode,errorMessage).get();
      • 結(jié)果中可加自定義的參數(shù)。

        result.put("custom_message","value");
      • 將最終 JSONObject 結(jié)果返回小程序的 callback 是自定義方法參數(shù)中的 @BindingCallback BridgeCallback callback

        callback.sendJSONResponse(result);
    • 自定義方法參數(shù),具體說明如下:

      • @BindingId:String 類型,傳入當(dāng)前一次通信的 workId。

      • @BindingNode:Scope 類型,App.class 或 Page.class。框架按對應(yīng)類型傳入當(dāng)前 App 或 Page。

      • @BindingApiContext:ApiContext 類型,通過該實例拿到當(dāng)前 API 的 context。

      • @BindingExecutor:Executor 類型。選擇不同的 Executor,并在其線程中執(zhí)行對應(yīng)的邏輯。Executor 類型名稱、描述、優(yōu)先級信息見下表。

        Executor 類型名稱

        描述

        優(yōu)先級

        ExecutorType.SYNC

        直接執(zhí)行不切線程,便于封裝。

        ExecutorType.UI

        前臺 UI 所依賴優(yōu)先級最高的后臺任務(wù),不容忍排隊。

        {@link Thread#NORM_PRIORITY}

        ExecutorType.URGENT_DISPLAY

        前臺 UI 所依賴優(yōu)先級最高的后臺任務(wù),不容忍排隊。

        {@link Thread#MAX_PRIORITY}

        ExecutorType.URGENT

        前臺 UI 所依賴優(yōu)先級最高的后臺任務(wù),不容忍排隊。

        {@link Thread#NORM_PRIORITY}

        ExecutorType.NORMAL

        普通非緊急的后臺任務(wù),容忍排隊。

        {@link Thread#MIN_PRIORITY}

        ExecutorType.IO

        文件 IO 類操作持久化任務(wù)。耗時可預(yù)計,不久成功或發(fā)生異常兩種情況之一。

        {@link Thread#MIN_PRIORITY}

        ExecutorType.NETWORK

        網(wǎng)絡(luò)相關(guān)的后臺任務(wù)。耗時視條件波動。典型使用場景為發(fā)起 RPC 請求。

        {@link Thread#MIN_PRIORITY}

        ExecutorType.IDLE

        閑散線程池,用于埋點等對耗時完全不敏感的任務(wù)。可用單線程池實現(xiàn)。

      • @BindingRequest:JSONObject 類型,將小程序側(cè)的參數(shù)以 JSONObject 形式傳入。

      • @BindingParam:默認(rèn)值為 String,對應(yīng)的是小程序側(cè)的自定義參數(shù)的 key。對應(yīng)值支持的參數(shù)包括 string、int、long、float、double、boolean。支持自定義 default 值。

        @BindingParam(value = "stringParam", stringDefault = "default") String stringParam
        @BindingParam(value = "intParam", intDefault = 1) int intParam
        @BindingParam(value = "longParam", longDefault = 9223372036854775807L) long longParam
        @BindingParam(value = "floatParam", floatDefault = 1.0F) float floatParam
        @BindingParam(value = "doubleParam", doubleDefault = 1.79769313486231570e+308d) double doubleParam
        @BindingParam(value = "booleanParam", booleanDefault = true) boolean booleanParam
      • @BindingCallback:BridgeCallback 類型,通過 BridgeCallback 可以向小程序發(fā)送結(jié)果。

    • 示例代碼

      public class CustomApiBridgeExtension extends SimpleBridgeExtension {
      
          private static final String TAG = "CustomApiBridgeExtension";
      
          @ActionFilter
          public void tinyToNative(@BindingId String id,
                                   @BindingNode(App.class) App app,
                                   @BindingNode(Page.class) Page page,
                                   @BindingApiContext ApiContext apiContext,
                                   @BindingExecutor(ExecutorType.UI) Executor executor,
                                   @BindingRequest JSONObject params,
                                   @BindingParam("param1") String param1,
                                   @BindingParam("param2") String param2,
                                   @BindingCallback BridgeCallback callback) {
              RVLogger.d(TAG, "id: "+id+
                      "\napp: "+app.toString()+
                      "\npage: "+page.toString()+
                      "\napiContext: "+apiContext.toString()+
                      "\nexecutor: "+executor.toString());
              RVLogger.d(TAG, JSONUtils.toString(params));
              JSONObject result = BridgeResponse.SUCCESS.get();
              result.put("message", "客戶端接收到參數(shù):" + param1 + ", " + param2 + "\n返回 Demo 當(dāng)前包名:" + apiContext.getActivity().getPackageName());
              // 將結(jié)果返回給小程序
              callback.sendJSONResponse(result);
          }
      
      }
      
  2. 客戶端注冊自定義 API。容器初始化完成后,調(diào)用注冊方法即可完成自定義 API 注冊。注意不要混淆類名。

    MriverEngine.registerBridge(CustomApiBridgeExtension.class);
  3. 小程序側(cè)調(diào)用。代碼示例如下:

    my.call('tinyToNative', {
      param1: 'p1aaa',
      param2: 'p2bbb'
    }, (result) => {
      console.log(result);
      my.showToast({
        type: 'none',
        content: result.message,
        duration: 3000,
      });
    })

    示例代碼內(nèi)容說明如下:

    • 第一個參數(shù)為 action,與客戶端自定義方法名 @ActionFilter 注解標(biāo)注保持一致。

    • 第二個參數(shù)為自定義參數(shù)。此示例中,客戶端側(cè)可以通過 @BindingRequest JSONObject@BindingParam("param1") String param1 來接收,其中 param1、param2 值為任意字母和數(shù)字組合字符串。param1、 param2 僅為示例,自定義參數(shù)值支持的類型包括 String、int、long、boolean、float、double。

    • 第三個參數(shù)為客戶端的回調(diào)。

客戶端發(fā)送小程序自定義事件

客戶端發(fā)送小程序自定義事件步驟如下:

  1. 小程序注冊事件。

    // 第一個參數(shù)為自定義事件名,第二個參數(shù)是回調(diào)
    my.on('nativeToTiny', (res) = >{
        my.showToast({
            type: 'none',
            content: JSON.stringify(res),
            duration: 3000,
            success: () = >{},
            fail: () = >{},
            complete: () = >{}
        });
    })
  2. 客戶端發(fā)送事件。

    // 模擬發(fā)送的數(shù)據(jù)
    JSONObject jo = new JSONObject();
    jo.put("index", index);
    AppManager appManager = RVProxy.get(AppManager.class);
    if (null != appManager) {
        // 通過 AppManager 拿到當(dāng)前運行的小程序?qū)嵗?    App app = appManager.findAppByAppId("2018080616290001");
        if(null!=app){
            // 向小程序發(fā)送信息
            // 第一個參數(shù)為當(dāng)前小程序活動頁面,第二個為自定義的事件名,第三個參數(shù)為發(fā)送的數(shù)據(jù)
            MriverEngine.sendToRender(app.getActivePage(), "nativeToTiny", jo, null);
        }
    }