返回插件列表

MPush

推送插件,支持苹果、华为、小米、VIVO、OPPO、魅族、极光推送。

注意事项

  1. iOS注意事项:如果项目中有用到融云聊天插件,请将融云聊天插件更新到最新版本,否则可能无法正常使用推送服务。

  2. 首先在各个推送平台上注册应用,然后获取所需参数。开放平台地址及插件所需参数如下:

    平台 地址 需要填写的参数
    小米 https://dev.mi.com/console/appservice/push.html XIAOMI_APP_ID、XIAOMI_APP_KEY
    OPPO https://push.oppo.com/ OPPO_APP_KEY、OPPO_APP_SECRET
    VIVO https://dev.vivo.com.cn/openAbility/pushNews VIVO_APP_ID、VIVO_APP_KEY
    魅族 http://push.meizu.com/ MEIZU_APP_ID、MEIZU_APP_KEY
    极光 https://www.jiguang.cn/ JPUSH_APPKEY
  3. 为提高getBindInfo返回速度,若未配置对应产商,请填写unknown,勿填错误值。如果填写非unknown的错误值,原生将会使用错误值去尝试获取token,将会触发重试机制,导致getBindInfo 15s后才会有结果返回。

  4. 申请华为推送服务时需要SHA256证书指纹,因APPCloud平台提供了默认的打包证书,所以可使用以下指纹。

  5. MIUI上的小米推送,受通知过滤的影响。如需用户感知所有通知,请参考MIUI通知过滤的开发者说明

  6. VIVO手机安装APP后通知默认处于关闭状态,需要用户手动开启,开启步骤可参考VIVO通知开启步骤

  7. 如果要注册通知监听,则必须在程序启动时deviceready事件中进行注册。

  8. 适配small icon,格式和样式要求:

    官方示例如下: small icon example small icon制作好后,添加方式🈶️两种:

    (1). 存放到 www/push 目录,文件名为 small_icon.png

    (2). 通过 HOOK 添加,操作步骤点击查看

  9. 集成华为推送须知,从1.2.4版本开始,华为推送升级为官方的v2版本,配置方式较1.2.4之前的版本有所不同,详情点击查看

API

获取绑定信息

PushNotification.getBindInfo(success, fail)
参数 类型 说明
succes(bindInfo) function 成功回调,bindInfo格式见下表
fail(error) function 失败回调,格式为:{'errCode':-1,'errMsg':''}

华为参考文档小米参考文档魅族参考文档VIVO参考文档OPPO参考文档

bindInfo格式
参数 类型 说明
applicationId string 应用ID
manufacturer string 推送厂商名称,如xiaomimeizuapple
pushChannel map 推送通道信息,格式为{"通道名": "deviceToken"}

注意事项

  1. 为避免理解歧义,1.3.2(含)版本之后manufacturer设备厂商变更为推送厂商,可通过pushChannel[${manufacturer}]读取厂商token
  2. 1.3.2(含)版本之后备用通道由xiaomi变更为jiguang,可通过pushChannel['jiguang']读取备用通道token
// 示例
PushNotification.getBindInfo(
    function success(result) {
        console.log("success", result);
    },
    function fail(error) {
        console.log("error", error);
    }
);
// 成功回调示例
{
    "applicationId": "com.mysoft.androidtest",
    "manufacturer": "huawei",
    "pushChannel": {
        "jiguang": "....",
        "huawei": "...."
    }
}

注册通知监听

PushNotification.addEventListener(callback)
参数 类型 说明
callback object 通知状态回调,具体释义如下
  1. onTouched(data):通知中心点击通知,会启动或者激活app,一般业务逻辑处理在这里处理即可,如页面跳转。data为后台推送时传递的参数。
  2. onReceived(data):app在前台时,收到推送消息会走此回调,仅支持iOS
  3. onPassThrough(data):app在前台时,收到透传消息会走此回调,仅支持安卓极光推送
  4. onError(error):注册通知监听失败。error为具体错误内容
// 示例
PushNotification.addEventListener({
    onTouched: function(data) {
        console.log("onTouched", data);
    },
    onReceived: function(data) {
        console.log("onReceived", data);
    },
    onPassThrough: function(data) {
        console.log("onPassThrough", data);
    },
    onError: function(error) {
        console.log("onError", error);
    }
});

清除通知栏通知

PushNotification.clearPushBadgeNumber()

设置角标

PushNotification.setPushBadgeNumber(count)

自定义铃声通知

注意事项

  1. 自定义铃声支持 mp3,wav

  2. iOS 自定义铃声文件需预下载至指定目录下 cordova.file.applicationStorageDirectory + 'Library/Sounds/';

  3. Android 自定义铃声文件与config.json配置文件,添加方式🈶️两种:
    (1). 铃声文件和config.json提前放置在 www/voice 目录下;
    实际填写的内容 点击查看

    //config.json
    [
        {
            "channelName": "mpush",
            "channelId": "mpush",
            "channelDescription": "mpush描述",
            "fileName": "mpush"//配置fileName时不用加扩展名
        },
        {
            "channelName": "test",
            "channelId": "test",
            "channelDescription": "test描述",
            "fileName": "test"
        }
    ]
    

    (2). 通过 HOOK 添加,操作步骤 点击查看

  4. OPPO 小米需在厂商的开发者后台配置channel;

  5. 华为必须申请重要推送权限;

  6. Android 8 以上 OPPO 小米 华为 支持系统推送自定义铃声,不支持的机型可使用小米push;

  7. 不支持系统推送的机型可使用小米push透传,需要应用保活;

  8. 自定义铃声需用户手动开启声音设置方可使用;

  9. iOS 声音播放时长与通知横幅展示时长相关,横幅消失及播放停止。

  10. 如通知类型被归为 ‘营销通知’ 需联系厂商解除。

// ios 服务端示例
{
    "aps": {
        "content-available": 1,
        "alert": {
            "title": "Push Notification",
            "body": "Notification from APNs Provider."
        },
        "badge": 9,
        "sound": "default"//自定义铃声名称
    },
    "presentNotifiInForeground":1//该key存在,前台不展示横幅与声音;key不存在,展示横幅与声音;与value值无关
}
// xiaomi 服务端示例
{
    "pass_through": 1,// 透传类型;0:在系统通知栏进行展示;1:消息推送至app中(不在系统通知栏展示);
    "extra.channel_id": "mpush",// mpush为厂商的开发者后台配置channel
    "extra.sound_uri": "android.resource://com.mysoft.engineertool/raw/mpush", //mpush为文件名称
    "payload": "{\"fileName\":\"mpush\"}"//mpush为文件名称,使用透传时必传
}
// huawei 服务端示例
{
    "notification": {
        "sound": "raw/mpush",//mpush为文件名称
        "channel_id": "mpush",// mpush为厂商的开发者后台配置channel
        "importance": "HIGH"
    }
}
// OPPO 服务端示例
{
    "channel_id": "mpush",// mpush为厂商的开发者后台配置channel
}

注意:仅支持iOS和华为手机

华为集成方式

  1. 进入华为控制台: https://developer.huawei.com/consumer/cn/service/josp/agc/index.html

  2. 点击我的项目 d4c5TJ.png

  3. 选择目标项目(此处以移动销售为例) d4cL6K.png

  4. 检查SHA256证书指纹 检查改地方是填写了注意事项里3里的指纹,若没有,请先添加。 d4gPpt.png

  5. 下载agconnect-services.json d4gPpt.png

  6. 将下载好的文件保存,添加方式🈶️两种:

(1). 存放到 www/push 目录,文件名为 agconnect-services.json

(2). 通过 HOOK 添加,操作步骤 点击查看

APPCloud配置HOOK

自定义图标配置

  1. hook下载 链接:add_small_icon.js
  2. hook上传:
    进入APPCloud,打包配置中的高级配置->钩子
    选择如下图参数Androidbefore_prepare、文件点击上传
    选择HOOK add_small_icon.js,并点击添加按钮。 操作流程说明添加
  3. hook编辑:
    点击钩子列标中 add_small_icon.js的编辑,将图标链接修改成小图标链接,如下图红框位置为替换位置 操作流程说明修改图标链接

华为HOOK配置

  1. hook下载 链接:add_huawei_agconnect_services.js
  2. hook上传:
    进入APPCloud,打包配置中的高级配置->钩子
    选择如下图参数Androidbefore_prepare、文件点击上传
    选择HOOK add_huawei_agconnect_services.js,并点击添加按钮。 操作流程说明添加
  3. hook编辑:
    点击钩子列标中 add_huawei_agconnect_services.js的编辑 将 在华为开发者后台下载的agconnect-services.json文件中的内容复制到,如下图红框位置 操作流程说明修改图标链接

自定义铃声配置

  1. hook下载 链接:add_custom_ringtone.js
  2. hook上传:
    进入APPCloud,打包配置中的高级配置->钩子
    选择如下图参数Androidbefore_prepare、文件点击上传
    选择HOOK add_custom_ringtone.js,并点击添加按钮。 操作流程说明添加
  3. hook编辑:
    点击钩子列标中 add_custom_ringtone.js的编辑
    将配置参数填写到如下图红框位置
    操作流程说明修改图标链接

Android常见问题

华为FAQ

小米FAQ

OPPO FAQ

VIVO FAQ

没有上架的app怎么处理?

使用极光推送,JPUSH_APPKEY填入申请的值,华为、小米、vivo、oppo、魅族的配置值填写`unknown`。

为了提高安卓推送到达率,需要注意的问题

1、按对应渠道商推送,例如华为手机请走华为渠道。
2、默认通道作为补充,对上传的devicetoken进行判断,若如对应厂商通道的deviceToken未取到,则推给默认渠道。    

getBindInfo方法相关

调用getBindInfo方法,原生主要做了什么事情?

getBindInfo是一个需要等待对应厂商以及默认厂商通道返回deviceToken的接口。为了确保数据的可靠性,我们设置了一个15秒的失败重试机制,原生将每隔1s尝试获取对应厂商的deviceToken,总共尝试15次。

调用getBindInfo方法,一定可以获取到deviceToken吗?

不一定能获取到deviceToken,特别是同意隐私政策后初次调用,成功率不是很高。为了通过上架审核,该插件不会在同意隐私政策前进行初始化,导致第一次调用的时候,部分厂商获取deviceToken耗时较久,测试数据显示小米初始化到获取deviceToken有时能耗时2分钟多,所以尝试的15s是无法获取到的。

为了提高deviceToken获取率,如何去做?

1.同意隐私政策后,调用PushNotification.getBindInfo(success, fail)方法,当做初始化,不做业务处理,其目的是为了给其初始化去获取token时间。

2.对于应用程序的杀死和重启,建议在重新启动时、后台回到前台时调用getBindInfo方法,以获取deviceToken,若值出现变化,将其值刷新到后端。

3.对于getBindInfo获取的内容进行判断,如果没有获取到后台需要推送对应渠道的deviceToken,请进行重试获取。

getBindInfo如何避免影响用户体验?

一定注意getBindInfo是一个耗时方法,为了避免在应用程序开发过程中出现用户卡顿问题。请避免用户点击了某个按钮,需要等待getBindInfo后才进行跳转。比如登录时,需等待getBindInfo方法返回结果后才进行登录接口请求,从而影响程序的流畅性。

deviceToken对应官方文档中的哪个变量值?

小米、oppo、vivo的deviceToken对应官方文档中的regID,华为对应官方文档的Token。

deviceToken在哪些情况下会失效?

小米: 1、app卸载重装或者清除数据后重新注册,这种情况下会生成一个新的deviceToken,而老的deviceToken会失效;2、在MIUI上,app卸载时,如果能成功上报,则deviceToken会被判定失效;3、设备超过3个月没有和小米push服务器建立长连接;

vivo:手机14天不联网或应用卸载会触发解订阅与设备解除订阅关系,deviceToken失效。解订阅再重新订阅会重新启用这个deviceToken,异常情况下会生成新的regId.

华为:清除应用数据(例如卸载应用并重新安装、设备恢复出厂设置等)后重新打开应用。

oppo:该ID在用户设备刷机、卸载应用、设备30天之内未有联网行为时失效。

通知栏不显示

1.打开允许通知; 2.过滤规则设为重要消息;

铃声自定义渠道相关

Vivo不支持自定义渠道,不支持设置channelid;

小米如何创建channel通道?

1、点击小米官网 登录后点击如图所示【管理中心】 点击管理中心2、接着点击【应用服务】栏下的【消息推送】 点击消息推送3、点击对应需要配置的应用栏的【创建推送】 点击创建推送5、点击【消息分类管理】下的【chanel列表】 接着点【新建】 小米后台建chanel6、创建内容如图示例,注意此处红框自定义铃声的填写,此处无需写文件后缀名,只写文件名称。 创建channel示例 7、创建成功,通过官方审核后,会多了一个channel列表,如下图所示 创建channel后列表 8、根据6、7的信息我们填写需要前端配置的信息,示例如下,如何配置到项目里详情 点击查看

{
  "channelName": "新工单", //对应图7的【通知类别名称】
  "channelId": "100655", //对应图7的【通知类别id,小米生成的
  "channelDescription": "新工单提醒",//对应图7的【通知类别描述】
  "fileName": "new_task"//对应图8自定义铃声 (sound_url) 红框 raw/后的内容,注意无需文件后缀名
}

oppo如何创建Channel通道?

1、点击[oppo开放平台]https://open.oppomobile.com/ 登录 2、点击右上角【管理中心】 点击管理中心 3、下拉点击开发服务栏下的【OPPO PUSH】 点击OPPOPUSH 4、进入应用列表后,切换成需要配置的应用 点击OPPOPUSH 5、点击左侧【配置管理】栏下的【新建通道】,通道配置 通道适配官网相关链接

点击OPPOPUSH

华为如何创建channel通道?

目前数据处理位置为中国区的应用不支持自定义通知渠道推送服务。华为创建channel通道详细步骤 华为自定义通知渠道