全部产品
云市场
云游戏

自定义双向通道

更新时间:2020-06-12 14:43:09

若已有小程序 API 或事件不满足开发需求,您可以自行扩展。

小程序调用原生自定义 API

1. 客户端自定义 API 并注册

  • 自定义 API:

    1. public class MyJSApiPlugin extends H5SimplePlugin {
    2. /**
    3. * 自定义 API
    4. */
    5. public static final String TINY_TO_NATIVE = "tinyToNative";
    6. @Override
    7. public void onPrepare(H5EventFilter filter) {
    8. super.onPrepare(filter);
    9. // onPrepare 中需要 add 进来
    10. filter.addAction(TINY_TO_NATIVE);
    11. }
    12. @Override
    13. public boolean handleEvent(H5Event event, H5BridgeContext context) {
    14. String action = event.getAction();
    15. if (TINY_TO_NATIVE.equalsIgnoreCase(action)) {
    16. JSONObject params = event.getParam();
    17. String param1 = params.getString("param1");
    18. String param2 = params.getString("param2");
    19. JSONObject result = new JSONObject();
    20. result.put("success", true);
    21. result.put("message", "客户端接收到参数:" + param1 + ", " + param2 + "\n返回 Demo 当前包名:" + context.getActivity().getPackageName());
    22. context.sendBridgeResult(result);
    23. return true;
    24. }
    25. return false;
    26. }
    27. }
  • 注册 API:启动小程序前全局注册一次即可。

    1. /*
    2. * 第一个参数,自定义 API 类的全路径
    3. * 第二个参数,BundleName,aar/inside 可以直接填 ""
    4. * 第三个参数,作用于,可以直接填 "page"
    5. * 第四个参数,作用的 API,将你自定义的 API 以 String[] 的形式传入
    6. */
    7. MPNebula.registerH5Plugin(MyJSApiPlugin.class.getName(), "", "page", new String[]{MyJSApiPlugin.TINY_TO_NATIVE});

2. 调用小程序调用

  1. my.call('tinyToNative', {
  2. param1: 'p1aaa',
  3. param2: 'p2bbb'
  4. }, (result) => {
  5. console.log(result);
  6. my.showToast({
  7. type: 'none',
  8. content: result.message,
  9. duration: 3000,
  10. });
  11. })

原生向小程序发送自定义事件

1. 小程序注册事件

  1. my.on('nativeToTiny', (res) => {
  2. my.showToast({
  3. type: 'none',
  4. content: JSON.stringify(res),
  5. duration: 3000,
  6. success: () => {
  7. },
  8. fail: () => {
  9. },
  10. complete: () => {
  11. }
  12. });
  13. })

2. 客户端发送事件

  1. H5Service h5Service = MPFramework.getExternalService(H5Service.class.getName());
  2. final H5Page h5Page = h5Service.getTopH5Page();
  3. if (null != h5Page) {
  4. JSONObject jo = new JSONObject();
  5. jo.put("key", value);
  6. // native 向小程序发送事件的方法
  7. // 第一个是事件名称,第二个是参数,第三个默认传 null
  8. h5Page.getBridge().sendDataWarpToWeb("nativeToTiny", jo, null);
  9. }