集成 vivo 推送
更新时间: 2025/06/10 15:43:05
网易云信 IM 即时通讯 NIM SDK 自 6.3.0 之后的版本新增支持 vivo 推送。本文主要介绍如何集成 vivo 厂商的离线推送通道,使消息通过 vivo 推送服务离线推送至未在线的用户。
第一步:启用推送服务
若已在 vivo 开放平台创建应用,则忽略该步骤。更多 vivo 推送服务的信息请参考 vivo 推送接入流程。
-
登录 vivo 开放平台,单击 应用管理,选择 应用 并单击 创建应用。
-
填写应用包名、应用名称、上传应用 ICON,然后单击 创建 完成应用的创建。
-
上传 APK 包,完善其他信息后,单击 提交,等待审核。审核通过上架后,在 vivo 应用商店中可查看。
-
进入 vivo 推送服务,单击 立即接入。
-
单击 推送申请,在申请页面选择软件包类型,目标应用等信息后,提交申请。
-
提交后,请关注开放平台应用的上架状态,您可在申请页面查看审核结果。
-
应用上架后,选择左侧导航栏的 应用信息,查看应用的 AppID、AppKey、AppSecret 等信息。
第二步:添加 vivo 推送证书
-
在 网易云信控制台 首页的 应用管理 中选择应用进入 应用配置 页面,单击 证书管理 页签。
-
在 Android 推送证书 下单击 添加证书,选择证书类型为 VIVO,配置 vivo 推送相关信息。
网易云信推送证书字段 对应 vivo 应用的字段信息 证书名称 用户自定义推送证书名称,最大 32 字符。
对应初始化 NIM SDK 时需传入的推送证书信息中的 vivoCertificateName。应用包名 对应 vivo 应用的应用包名,最大 1000 字符。 AppID 对应 vivo 应用的 AppID,最大 1000 字符。 AppSecret 对应 vivo 应用的 AppSecret,最大 5000 字符。 Appkey 对应 vivo 应用的 AppKey,最大 100 字符。 -
根据界面提示,在该对话框内配置证书类型和证书名称等信息。
其中的 证书名称 即为初始化 SDK 时需传入的推送信息中的 vivoCertificateName
。
第三步:导入 vivo 推送 SDK
将 vivo 推送客户端 SDK 添加到您的 Android 项目。vivo 推送的客户端 SDK 集成,具体可参考 集成指南。
NIM SDK 当前兼容的 vivo 推送版本请参考 更新日志 中的 第三方推送兼容版本。
-
下载 vivo_pushSDK,并将下载的 aar 文件拷贝到您的项目路径的 app/libs 目录。
-
在项目 app 目录下的 build.gradle 添加 aar 依赖。
Groovy
//vivo_pushSDK_vx.x.x.x_xxx.aar 仅为举例,请替换为实际的依赖版本 dependencies { implementation fileTree(include: ['*.jar'], dir: 'libs') implementation files("libs/vivo_pushSDK_vx.x.x.x_xxx.aar") }
第四步:AndroidManifest.xml 配置
-
在 app/src/main 目录中,打开 AndroidManifest.xml 文件,添加对应权限。
XML
<!-- 配置的 service, activity, receiver --> <service android:name="com.vivo.push.sdk.service.CommandClientService" android:permission="com.push.permission.UPSTAGESERVICE" android:exported="true"/> <receiver android:name="com.netease.nimlib.mixpush.vivo.VivoPushReceiver"> <intent-filter> <!-- 接收 push 消息 --> <action android:name="com.vivo.pushclient.action.RECEIVE"/> </intent-filter> </receiver>
-
在 AndroidManifest.xml 中,添加配置 App ID 与 App Key。
XML
<meta-data android:name="com.vivo.push.api_key" android:value="{您的 vivo 推送 app key}"/> <meta-data android:name="com.vivo.push.app_id" android:value="{您的 vivo 推送的 app id}"/>
第五步:防止代码混淆
如果您的应用使用了代码混淆,在 proguard-rules.pro 配置文件中添加以下配置以防止 vivo SDK 的代码被混淆:
Groovy-dontwarn com.vivo.push.**
-keep class com.vivo.push.**{*; }
-keep class com.vivo.vms.**{*; }
推送兼容性
若您的自身业务体系,也需要接入 vivo 推送,则需要考虑自身业务体系的 vivo 推送与网易云信消息的 vivo 推送兼容。
兼容需要完成以下两个步骤:
-
新建广播接收器。
对于 vivo 推送,为了接收推送消息,vivo push SDK 要求您自定义一个继承自
OpenClientPushMessageReceiver
的BroadcastReceiver
,并注册到 AndroidManifest.xml。由于 vivo 的特殊处理,同时注册多个继承自OpenClientPushMessageReceiver
的BroadcastReceiver
会存在收不到消息的情况,要保证自身业务体系的 vivo 推送与网易云信消息的 vivo 推送兼容,您需要新建广播接收器,从继承OpenClientPushMessageReceiver
改为继承VivoPushMessageReceiver
。VivoPushMessageReceiver
为网易云信提供,推送消息首先被 NIM SDK 接收,如果是自身体系的推送消息,NIM SDK 会将消息传递给VivoPushMessageReceiver
。Java
/** * 以下这些方法运行在非 UI 线程中, 与 vivo SDK 的 OpenClientPushMessageReceiver 方法一一对应。 * 当开发者自身也接入 vivo 推送,则应将继承 OpenClientPushMessageReceiver 改为继承 VivoPushMessageReceiver,其他不变 * 例如:自定义一个 DemoVivoPushMessageReceiver 继承 VivoPushMessageReceiver */ public class DemoVivoPushMessageReceiver extends VivoPushMessageReceiver { @Override public final void onReceive(Context context, Intent intent) { } public void onNotificationMessageClicked(Context context, UPSNotificationMessage upsNotificationMessage) { //该接口仅用于解决 3.0.0.0_480 之前的版本升级 Push SDK 过程中发送的老版本打开自定义通知(skiptype=3)需要依赖单击回调完成跳转时使用,新版本通知单击该单击回调是不可用的。 } public void onReceiveRegId(Context context, String s) { } }
-
配置新广播的名称。
在将广播接收器改为继承
VivoPushMessageReceiver
之后,将该广播在AndroidManifest
中配置如下,开发者只需将广播名称VivoPushMessageReceiver
替换成自身的广播名。此外,请不要为此Receiver
配置priority
。XML
<receiver android:name="xxx.DemoVivoPushMessageReceiver"> <intent-filter> <action android:name="com.vivo.pushclient.action.RECEIVE" /> </intent-filter> </receiver>
vivo 平台限制
消息推送类型配置
vivo 的推送消息分为 运营消息和系统消息,需要在推送时进行指定,将默认为运营消息。开发者需根据自身应用的通知场景,将消息内容按照对应消息类别发送。
vivo 推送消息的类型通过 classification
来判断。
-
您可以直接在 网易云信控制台 上配置默认的推送消息类型。
-
在 网易云信控制台 首页 应用管理 中选择应用,然后单击 IM 即时通讯 下的 功能配置 按钮进入功能配置页。
-
在顶部选择 基础功能 页签,选择 第三方厂商消息分类,并单击 子功能配置。
-
选择对应的第三方厂商,单击 编辑,选择类型后 保存。
-
-
也可以通过配置网易云信 NIM SDK 中消息体的
pushPayload
来实现。在其中添加以
vivoField
为 key 的 Map 或者 JSONObject 数据即可,数据格式参照 vivo 文档。示例代码如下:
Java
int classification = vivoClassificationCheckBox.isChecked() ? 1 : 0; Map<String, Object> pushPayload = msg.getPushPayload(); pushPayload = pushPayload == null ? new HashMap<>() : pushPayload; //vivoField Map<String, Object> vivoField = new HashMap<>(); vivoField.put("classification", classification); pushPayload.put("vivoField", vivoField);
对于传给 vivo 推送平台的消息类型优先级:
- 您上传的消息体的
pushPayload
中有分类(classification)字段,则使用pushPayload
中的字段值。 - 如果消息体的
pushPayload
中未传入分类(classification)字段,则使用默认的推送消息类型(在网易云信控制台设置的消息类型)。 - 如果消息体的
pushPayload
中未传入分类(classification)字段,也没有在网易云信控制台上配置推送消息类型,则该推送消息不会添加分类字段。
- 您上传的消息体的
推送消息限额
vivo 推送消息对于不同消息类型有不同的限制,如下表所示,详情请参考 vivo 推送消息限制说明。
消息类型 | 推送数量限制 | 用户接收数量限制 |
---|---|---|
系统消息 | 通知开启有效用户数*3(可申请消息不限量权限) | 无限制 |
运营消息 |
|
|
测试消息 |
|
- 通知开启的有效用户:应用集成的 vivo 推送 SDK 订阅成功,且设备近 14 天 内有联网的通知权限开启用户。
- 通知开启有效用户数 < 10000,则运营消息量级默认为 10000。
- 通知开启的有效用户数及可发送运营消息量级,可在推送运营后台查询。
- 推送限额数以 到达量 计算,当日到达量超限则计入管控。
额度查询
在 vivo 开放平台 > 推送统计 > 推送数据 中可以查看 SDK 订阅数和可发送的消息总量,详情请参考 vivo 推送平台使用指南。
推送速度
-
应用推送速度配置策略:vivo 推送 QPS 根据通知开启的有效用户数,默认最低 3000/秒,最高 5000/秒。
通知开启的有效用户数 推送速度 0-500 W 3000 500W-800 W 4000 800W 以上 5000 -
目前接口有调用频率限制。
-
vivo 推送系统目前支持 100 万级并发。