更新记录

1.1.7(2022-04-11)

修复OPPO、vivo无法接收离线通知的问题

1.1.6(2022-03-31)

1.升级Android友盟SDK到最新版:9.4.7的common,6.5.1的push 2.增加回调APP启动时的ERROR日志,开发者在初始化时可通过传参logcat=1开启

1.1.5(2021-06-23)

修复小米手机点离线通知可能无法打开APP的问题

查看更多

平台兼容性

Android Android CPU类型 iOS
适用版本区间:6.0 - 11.0 armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 适用版本区间:10 - 14

原生插件通用使用流程:

  1. 购买插件,选择该插件绑定的项目。
  2. 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
  3. 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
  4. 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
  5. 开发完毕后正式云打包

付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios

注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择


友盟推送SDK

支持华为、小米、魅族、vivo、OPPO离线下发。

插件配置

Android:

集成的友盟SDK版本为:com.umeng.umsdk:common:9.4.7,com.umeng.umsdk:asms:1.6.0,com.umeng.umsdk:push:6.5.1。

添加插件后需要在插件管理页面配置商户在友盟的Android应用appkey、message secret,如果需要华为、小米、魅族、vivo、OPPO离线下发功能,也需要配置对应的参数,如下图:

image-20210207092102903

image-20210207092157368

image-20210207092221319

注:由于小米、魅族、华为的appid为纯数字,纯数字在meta-data里面会识别为long,通过getString方法拿不到配置信息,所以需要在配置appid时,均需要按照appid=1234格式配置。小米的appkey也是纯数字,要按appkey=1234格式配置。vivo的appid也是纯数字,但配置时不需要加前缀appid=,直接配置vivo开放平台的appid即可。

未按以上配置,设备离线是将收不到离线通知。

如果未收到离线通知,请按下列步骤检查:

1.检查插件参数配置是否正确

2.检查在线通知是否能收,如果不能,检查友盟appkey、secret是否正确

3.检查是否已初始化,插件回调了device_token表示初始化成功

4.首次安装启动时,等几分钟再杀进程测试离线,友盟上送第三方token需要一点时间

另外,请确保勾选支付宝支付模块后再打包,否则可能无法获取device_token。

支付宝

重要补充:

离线通知需要指定mi_activity=iread.m.bbc.push.MipushTestActivity,否则点击通知后无法接收点击事件。

华为离线推送需要额外处理,不然无法收到离线消息:

1.首先配置AppGallery Connect ,配置好后在项目设置中,下载agconnect-services.json备用。

2.在并按照友盟华为通道文档设置好消息回执。

3.下载示例项目ZIP,解压后在nativeplugins目录中找到本地插件:nrb-huawei-agconnect-json-plugin。

4.将插件拷贝到你uni-app项目中的nativeplugins目录下面。

5.将步骤1中下载的agconnect-services.json拷贝到nrb-huawei-agconnect-json-plugin插件Android/assets目录下面。

6.在manifest.json的App原生插件配置中,选择本地插件,将nrb-huawei-agconnect-json-plugin插件勾选后与本友盟推送SDK一起提交云打包。

iOS:

集成的友盟SDK版本为:UMCommon7.1.0,UMCommonLog1.0.0,UMPush3.2.4

需要在插件管理页面配置商户在友盟的iOS应用appkey,如果需要开启调试模式,也可打开调试开关,如下图:

image-20210207092609119

image-20210207092646230

注:SDK已设置后台运行模式:remote-notification,开发者可以不需要手动添加。

调用方式

合规指引

2021年5月1日新政要求用于同意授权后才能收集用户数据:http://www.cac.gov.cn/2021-03/22/c_1617990997054277.htm

合规请友盟合规指南:https://developer.umeng.com/docs/67966/detail/207155

image-20210524160822443

注意:需要在App.vue里的onLaunch()里面初始化插件。

Android

参考友盟延迟初始化方案:https://developer.umeng.com/docs/67966/detail/179087

// 推送SDK初始化,注意只有用户同意隐私协议后,才能传agreement=1,否则可能APP会被下架
const upush = uni.requireNativePlugin('nrb-upush-plugin')

// 监听消息透传,Android点击离线通知后才能收到回调
upush && upush.addCustomMessageListener( res => {
    console.log("upush callback:  res="+JSON.stringify(res))
})

// 再初始化
upush && upush.init({"agreement":"0"}, res => {
    console.log("upush init result for Android:  res="+JSON.stringify(res)) 
})  

//用户同意隐私协议后,调用延迟初始化实际初始化,device_token在init方法传入的代码块中回调
upush.delayInit({})

iOS

// 推送SDK初始化,注意只有用户同意隐私协议后,才能调用初始化,否则可能APP会被下架
const upush = uni.requireNativePlugin('nrb-upush-plugin')

// 先监听消息透传,iOS点击离线通知后才能收到回调
upush && upush.addCustomMessageListener( res => {
    console.log("upush callback:  res="+JSON.stringify(res))
})
// 再初始化
upush && upush.init({}, res => {
    console.log('upush init result for iOS: res='+JSON.stringify(res))    
})

调用参数及回调

Android/iOS:

init参数格式:{“agreement”:0},iOS不需要传参 字段说明

参数名 是否必须 参数格式 说明
agreement int Android:
0:用户未同意隐私协议(默认);
1:已同意。

iOS:
无需传递
offlinetoken int Android:
0:不回调厂商token(默认);
1:回调厂商token,厂商通道初始化成功时返回。
通过addCustomMessageListener传递的callbcak回调
可用于调试厂商通道是否集成成功

iOS:
无需传递
logcat int Android:
0:不回调启动时APP的ERROR日志(默认);
1:回调启动时APP的ERROR日志,初始化后约延时5秒返回。
通过addCustomMessageListener传递的callbcak回调
可用于辅助调试集成失败的问题
正式打包请不要传,以免影响性能

iOS:
无需传递

回调结果:{"success":0,"device_token":"tk","channel":"baidu","errmsg":""}

字段说明

参数名 是否必须 参数格式 说明
success int 0:成功;<0:失败
errmsg string 错误信息
device_token string 设备id,success=0时返回
channel string iOS固定返回:App Store
android返回:打包时配置的渠道key=UMENG_CHANNEL对应的渠道

addCustomMessageListener回调的是友盟推送过来完整信息,SDK不会对回调消息做二次封装。init时提交了offlinetoken=1,也会通过此接口回调厂商token。

注意:Android会display_type=message的自定义透传消息,及用户在点击通知时回display_type=notification的通知消息。

Android回调例子:

透传消息:

{"policy":{"expire_time":"2021-02-10 09:42:48"},"description":"测试","production_mode":true,"appkey":"5ec779b4db","payload":{"body":{"custom":"测试消息透传"},"display_type":"message"},"device_tokens":"ApU58IPQsPgV1_23GdZYIKd-OP","type":"unicast","timestamp":"1612662310962"}

点击通知后回调的消息:

{"display_type":"notification","extra":{"aa":"ab","c的":"d"},"body":{"after_open":"go_app","ticker":"3333336666666","title":"3333336666666","play_sound":"true","text":"22228888888"},"msg_id":"uu72s08162315791543810"}

厂商离线token回调:

{"huaweiToken":"1111111111111111111111111"}

{"xiaomiToken":"1111111111111111111111111"}

启动日志回调:

{"logcat":"03-30 16:38:28.594 19201 19404 E NAccs.MsgDistribute: handBroadCastMsg command:1"}

iOS回调例子:

{"policy":{"expire_time":"2021-02-10 09:46:00"},"description":"测试","production_mode":true,"appkey":"5ef8c3f0","payload":{"aps":{"alert":{"title":"测试主标题","subtitle":"测试副标题","body":"测试通知内容"},"sound":"default"}},"device_tokens":"ApU58IPQsPgV1_23GdZ","type":"unicast","timestamp":"1612662398142"}

注:静默推送时(即payload.aps.content-available=1时)会实时回调,否则只有在点击通知时才回调。

常见问题:

1.未回调拿到device_token

检查步骤:a. 检查插件各项参数是否正确

​ b. 初始化时打开logcat=1,检查是否有“java.lang.NoClassDefFoundError: Failed resolution of: Lcom/ta/utdid2/device/UTDevice;”的错误日志,如有,则在manifest.json的APP模块配置中,勾选支付宝支付模块。原因是友盟使用了阿里的uttid包,插件未避免勾选了支付宝支付模块的APP打包失败,而未添加此包。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.BROADCAST_PACKAGE_ADDED" /> <uses-permission android:name="android.permission.BROADCAST_PACKAGE_CHANGED" /> <uses-permission android:name="android.permission.BROADCAST_PACKAGE_INSTALL" /> <uses-permission android:name="android.permission.BROADCAST_PACKAGE_REPLACED" /> <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" /> <uses-permission android:name="android.permission.GET_TASKS" /> <permission android:name="${applicationId}.permission.PROCESS_PUSH_MSG" android:protectionLevel="signatureOrSystem" /> <permission android:name="${applicationId}.permission.PUSH_PROVIDER" android:protectionLevel="signatureOrSystem" /> <permission android:name="${applicationId}.permission.PUSH_WRITE_PROVIDER" android:protectionLevel="signatureOrSystem" /> <uses-permission android:name="${applicationId}.permission.PROCESS_PUSH_MSG" /> <uses-permission android:name="${applicationId}.permission.PUSH_PROVIDER" /> <uses-permission android:name="android.permission.FOREGROUND_SERVICE" /> <uses-permission android:name="android.permission.REQUEST_INSTALL_PACKAGES" /> <uses-permission android:name="com.huawei.appmarket.service.commondata.permission.GET_COMMON_DATA" />

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

会收集用户的device_token,返回给应用层。 Android版的基础统计会收集并存储的数据包括但不限于:SDK/API/JS代码版本、浏览器、互联网服务提供商、IP地址、平台、时间戳、应用标识符、应用程序版本、应用分发渠道、独立设备标识符、iOS广告标识符(IDFA)、安卓广告主标识符、网卡(MAC)地址、国际移动设备识别码(IMEI)、设备型号、传感器参数、终端制造厂商、终端设备操作系统版本、会话启动/停止时间、语言所在地、时区和网络状态(WiFi等)、硬盘、CPU和电池使用情况等。 详见友盟隐私协议:https://www.umeng.com/policy

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问