unimp小程序V1版 (不支持同时运行多个小程序)

SDK下载

启动小程序

从宿主应用页面跳转到小程序应用

API 说明

  1. // 启动小程序
  2. DCUniMPSDK.getInstance().startApp(context, appid, splashClass, redirectPath, arguments)
参数 类型 必填 说明
context Context 上下文
appid String 小程序的 appid
splashClass IDCUniMPAppSplashView 自定义splashView接口类
redirectPath String 指定启动应用后直接打开的页面路径
arguments JSONObject 启动小程序传入的参数

Tips

Android startApp详细说明可参考uni小程序SDK API参考手册

启动小程序并传参

宿主启动小程序时支持传入参数到小程序环境,小程序中可以通过 plus.runtime.arguments 获取宿主传入的参数

  1. // 启动小程序并传入参数 "Hello uni microprogram"
  2. try {
  3. JSONObject arguments = new JSONObject();
  4. arguments.put("MSG","Hello uni microprogram");
  5. DCUniMPSDK.getInstance().startApp(context, "__UNI__04E3A11", arguments);
  6. } catch (Exception e) {
  7. e.printStackTrace();
  8. }

小程序中获取参数

  1. var arguments = plus.runtime.arguments;
  2. //arguments 为字符串需要注意

启动打开指定页面

宿主启动小程序时可通过传入页面路径来打开指定页面

页面路径格式要求

路径从 pages/ 开始填写绝对路径并支持参数 示例:

注意:如果直达的页面为首页并且是 vue 页面参数无效 应使用启动传参的方式

  1. pages/component/view/view?action=redirect
  1. // 启动直达页面
  2. DCUniMPSDK.getInstance().startApp(context,"__UNI__04E3A11", "pages/component/view/view?action=redirect");

屏蔽返回

直达二级页面如果您想屏蔽返回按钮及返回手势,可以在小程序页面的 onLoad() 方法中获取当前页面调用 setStyle() 方法实现,代码如下

Tips

onLoad(e){} 方法的参数e即为直达页面时传入的参数比如pages/component/view/view?action=redirect,框架会自动将参数转换成 jsonObject 类型 {“action”:”redirect”}

  1. // 启动直达二级页面屏蔽返回手势及返回按钮
  2. <script>
  3. export default {
  4. onLoad(e) {
  5. // #ifdef APP-PLUS
  6. // 判断是否为启动直达页面
  7. if (e.action === "redirect") {
  8. const currentWebview = this.$scope.$getAppWebview();
  9. currentWebview.setStyle({
  10. popGesture: 'none', // 取消手势返回
  11. titleNView: {
  12. autoBackButton: false // 取消默认返回按钮
  13. }
  14. })
  15. }
  16. // #endif
  17. }
  18. }
  19. </script>

关闭小程序

2.6.3开始支持此功能

小程序环境中关闭方法

注:需要在集成SDK的原生工程中使用,在 HBuilderX 内置基座运行无效果;

小程序中可调用plus.runtime.quit()方法关闭自己,返回宿主App

  1. plus.runtime.quit()

宿主App中关闭方法

宿主可以直接调用 sdk 的方法,关闭当前运行的小程序

关闭当前运行的小程序

  1. DCUniMPSDK.getInstance().closeCurrentApp()

监听小程序关闭触发事件

  1. DCUniMPSDK.getInstance().setUniMPOnCloseCallBack(new DCUniMPSDK.IUniMPOnCloseCallBack() {
  2. @Override
  3. public void onClose(String appid) {
  4. Log.e("unimp", appid+"被关闭了");
  5. }
  6. });

宿主与小程序通讯

2.6.10 版本开始支持此功能

宿主与小程序通讯适用于简单的数据交互。如果希望小程序调用宿主提供的API方法,实现复杂扩展能力请使用Android原生扩展实现!

宿主 App 向小程序发送事件

宿主发送事件

API

  1. DCUniMPSDK.getInstance().sendUniMPEvent(event, data)

参数说明

参数 类型 必填 说明
event String 触发事件的event
data String或JSON 事件的携带参数

返回值

类型 说明
boolean true表示事件通知成功。false表示失败。可通过log查看。

示例

  1. JSONObject data = new JSONObject();
  2. data.put("sj", "点击了关于");
  3. DCUniMPSDK.getInstance().sendUniMPEvent("gy", data);

小程序监听事件

监听宿主App发送事件

示例

  1. uni.onNativeEventReceive((event,data)=>{
  2. console.log('接收到宿主App消息:' + event + data);
  3. this.nativeMsg = '接收到宿主App消息 event:' + event + " data: " + data;
  4. })

参数说明

属性 类型 说明
event String 事件名称
data String或JsonObject 宿主传递的数据

小程序向宿主 App 发送事件

小程序发送事件

API

向宿主App发送事件

  1. uni.sendNativeEvent(event, data, callback)

参数说明

属性 类型 说明
event String 事件名称
data String / JsonObject 事件携带参数
callback Function 宿主App回调方法。参数可以是 String 或 JsonObject。取决于宿主的实现

示例

  1. // 向宿主App发送事件
  2. uni.sendNativeEvent('unimp-event', {
  3. msg: 'unimp message!!!'
  4. }, ret => {
  5. this.nativeMsg = '宿主App回传的数据:' + ret;
  6. })

宿主设置监听事件

API

DCUniMPSDK.getInstance().setOnUniMPEventCallBack(callBack) 设置监听小程序发送给宿主的事件

参数说明

参数 类型 必填 说明
callBack IOnUniMPEventCallBack 小程序触发event事件接口

返回值

示例

  1. DCUniMPSDK.getInstance().setOnUniMPEventCallBack(new DCUniMPSDK.IOnUniMPEventCallBack() {
  2. @Override
  3. public void onUniMPEventReceive(String event, Object data, DCUniMPJSCallback callback) {
  4. Log.d("cs", "onUniMPEventReceive event="+event);
  5. //回传数据给小程序
  6. callback.invoke( "收到消息");
  7. }
  8. });

胶囊按钮

概念

胶囊按钮即小程序页面导航栏右侧的按钮,包含···菜单按钮和X关闭按钮,如下图所示:

目前胶囊按钮的样式不支持修改,框架默认会根据导航栏的颜色自适应胶囊按钮的颜色,不过您可以隐藏默认的胶囊按钮,然后自定义实现

unimp小程序V1版 (不支持同时运行多个小程序) - 图1

自定义菜单项

点击胶囊按钮左侧的···按钮会弹出ActionSheet菜单,菜单中的按钮支持自定义,其中上部分的按钮是在小程序中定义,下部分的按钮在宿主中定义,取消按钮为框架默认添加,如下图所示:

unimp小程序V1版 (不支持同时运行多个小程序) - 图2

宿主中添加菜单按钮

宿主添加的菜单按钮在每个页面都会显示

DCSDKInitConfig设置setMenuActionSheetItems实现全局菜单按钮设置.

  1. MenuActionSheetItem item = new MenuActionSheetItem("关于", "gy");
  2. List<MenuActionSheetItem> sheetItems = new ArrayList<>();
  3. sheetItems.add(item);
  4. DCSDKInitConfig config = new DCSDKInitConfig.Builder()
  5. // 添加到全局配置
  6. .setMenuActionSheetItems(sheetItems)
  7. .build();

设置全局菜单按钮点击事件监听

  1. DCUniMPSDK.getInstance().setDefMenuButtonClickCallBack(new DCUniMPSDK.IMenuButtonClickCallBack() {
  2. @Override
  3. public void onClick(String appid, String id) {
  4. switch (id) {
  5. case "gy":{
  6. Log.e("unimp", "点击了关于" + appid);
  7. break;
  8. }
  9. }
  10. }
  11. });

小程序中添加菜单按钮

在小程序中可以单独为某个页面添加菜单按钮,打开pages.json,在页面的 style->app-plus->titleNView->buttons节点下添加配置,pages.json 的更多配置说明请参考此 文档

  1. {
  2. "pages": [
  3. {
  4. "path": "pages/tabBar/component/component",
  5. "style": {
  6. "navigationBarTitleText": "内置组件",
  7. "app-plus": {
  8. "bounce": "vertical",
  9. "titleNView": {
  10. "buttons": [{
  11. "text": "\ue534",
  12. "title":"关于", //注意:title 为 uni小程序中显示的按钮标题,如果没有设置则显示 text 字段
  13. "fontSrc": "/static/uni.ttf",
  14. "fontSize": "22px",
  15. "color": "#FFFFFF"
  16. }]
  17. }
  18. }
  19. }
  20. },
  21. ...
  22. ],
  23. ...
  24. }

按钮点击后会在小程序中触发onNavigationBarButtonTap(e)方法

  1. // 监听按钮点击事件
  2. onNavigationBarButtonTap(e) {
  3. console.log(e)
  4. }

隐藏胶囊按钮

uni小程序默认会显示胶囊按钮,您可以将其隐藏(目前只支持全局隐藏,不支持单个页面隐藏)

DCSDKInitConfig设置setCapsule实现隐藏

  1. DCSDKInitConfig config = new DCSDKInitConfig.Builder()
  2. .setCapsule(false).build();

需要注意,如果您隐藏了胶囊按钮,原生中添加的菜单按钮就会无效,小程序中添加的菜单按钮会显示到页面导航栏上并且显示的是text字段配置信息(和在HX内置基座运行效果一样)如下图所示

unimp小程序V1版 (不支持同时运行多个小程序) - 图3

开启后台运行

2.8.0 版本开始支持此功能

通过 DCSDKInitConfig配置setEnableBackground小程序是否支持后台运行,默认点击胶囊按钮的x或者在小程序中调用plus.runtime.quit()方法会直接关闭小程序,当开启后台运行时会只是将小程序隐藏到后台,下次打开时直接显示之前的状态;

示例

  1. DCSDKInitConfig config = new DCSDKInitConfig.Builder()
  2. .setEnableBackground(true).build();

注意事项

开启小程序后台运行功能后,也将开启多任务窗口。效果如下图!如果你的需求不需要小程序有独立任务窗口。那请关闭小程序后台运行功能。 后台模式与多任务窗口两者功能目前是相辅相成。不可分割。

unimp小程序V1版 (不支持同时运行多个小程序) - 图4

2.8.4+版本支持设置setEnableBackground为false 去除多任务窗口

打开小程序

第一次打开小程序 还是将小程序后台激活到前台。都是调用DCUniMPSDK.getInstance().startApp打开小程序

示例

  1. DCUniMPSDK.getInstance().startApp(context,"__UNI__04E3A11");

Tips

注意:已启动的小程序并进入后台运行,再次启动直达参数将会失效。请注意!!!

关闭小程序

开启后台运行。如果需要强制关闭小程序,可调用DCUniMPSDK.getInstance().closeCurrentApp()关闭当前小程序

示例

  1. DCUniMPSDK.getInstance().closeCurrentApp()