集成 OPPO 推送
更新时间: 2024/07/29 18:47:43
NIM SDK 6.7.0 之后版本新增支持 OPPO 推送。
本文主要介绍如何集成 OPPO 厂商的离线推送通道,使消息通过 OPPO 推送服务离线推送至未在线的用户。
集成流程
步骤 1:在OPPO 开放平台创建应用并启用推送服务
若已在 OPPO 开放平台创建应用,则忽略该步骤。更多 OPPO 推送服务的信息请参考OPPO 推送服务开启指南。
-
在OPPO 开放平台 注册开发者账号并完成认证,详情请参考OPPO 企业开发者帐号注册流程。
-
应用创建完成后,在开放平台,依次选择产品–移动服务–推送服务,进入推送服务产品页,单击立即使用。
-
进入推送运营平台,单击申请推送服务。
-
在未开启服务中选择需要申请 PUSH 权限的应用,进入 PUSH 服务并单击申请开通。
-
填写申请信息后,提交申请,等待审核通过。
-
您可以选择配置管理-应用配置 ,查看应用的 AppKey,AppSecret,MasterSecret等信息,注意区分 AppSercet 与 MasterSecret。具体请参考配置管理。
步骤 2:在云信控制台添加 OPPO 推送证书
-
在云信控制台首页应用管理选择应用进入应用配置页面,单击证书管理页签。
-
在Android推送证书下单击添加证书,选择证书类型为 OPPO,配置 OPPO 推送相关信息。
云信推送证书字段 对应 OPPO 应用的字段信息 证书名称 用户自定义推送证书名称,最大 32 字符
对应初始化 NIM SDK 时需传入的推送证书信息中的 oppoCertificateName应用包名 对应 OPPO 应用的应用包名,最大 1000 字符 Appkey 对应 OPPO 应用的 AppKey,最大 100 字符 MasterSecret 对应 OPPO 应用的 MasterSecret,最大 1000 字符 -
根据界面提示,在该对话框内配置证书类型和证书名称等信息。
步骤 3:导入 OPPO 推送 SDK
将 OPPO 推送 SDK 添加到您的 Android 项目。
NIM SDK 开发版和稳定版当前兼容的 OPPO 推送版本为 com.heytap.msp-push-3.1.0.aar
。
-
下载 aar 文件。
-
在项目的根目录下的
bulid.gradle
中,添加 maven 仓库。repositories { google() mavenCentral() }
-
在 app/build.gradle 文件的 dependencies 块中添加 aar 的依赖。
implementation(name: 'com.heytap.msp_3.1.0', ext: 'aar') //以下依赖都需要添加 implementation 'com.google.code.gson:gson:2.6.2' implementation 'commons-codec:commons-codec:1.6' implementation 'com.android.support:support-annotations:28.0.0'(SDK中的接入最小依赖项,也可以参考demo中的依赖)
-
在
bulid
文件中添加 aar 配置。Android{ .... repositories { flatDir { dirs 'libs' } } .... }
步骤 4:AndroidManifest.xml配置
在 app/src/main 目录中,打开 AndroidManifest.xml 文件,添加对应权限。
xml<!-- OPPO推送配置权限 -->
<uses-permission android:name="com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE"/>
<uses-permission android:name="com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE"/>
<!-- OPPO推送配置项 需要配置以下两项 -->
<!-- 兼容Q以下版本 -->
<service
android:exported="true"
android:name="com.netease.nimlib.mixpush.oppo.OppoPushService"
android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE">
<intent-filter>
<action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE"/>
</intent-filter>
</service>
<!-- 兼容Q版本 -->
<service
android:exported="true"
android:name="com.netease.nimlib.mixpush.oppo.OppoAppPushService"
android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE">
<intent-filter>
<action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE"/>
<action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE"/>
</intent-filter>
</service>
步骤 5:防止代码混淆
如果您的应用使用了代码混淆,在 proguard-rules.pro 配置文件中添加以下配置以防止 OPPO SDK 的代码被混淆:
java-keep public class * extends android.app.Service
-keep class com.heytap.msp.** { *;}
集成须知:推送兼容性
若您的自身业务体系,也需要接入 OPPO 推送,则需要考虑自身业务体系的 OPPO 推送与云信消息的 OPPO 推送兼容。
兼容需要完成以下两个步骤:
- 新建广播接收器
对于 OPPO 推送,为了接收推送消息,OPPO PUSH SDK 要求您自定义一个继承自 PushService
和 AppPushService
的 Service ,并注册到 AndroidManifest.xml。由于 OPPO 的特殊处理,同时注册多个继承自 PushService
和 AppPushService
的 Service 会存在收不到消息的情况,要保证自身业务体系的 OPPO 推送与云信消息的 OPPO 推送兼容,您需要新建广播接收器,从继承 PushService
和 AppPushService
改为继承 OppoPushMessageService
和 OppoAppPushMessageService
。OppoPushMessageService
和OppoAppPushMessageService
为云信提供,推送消息首先被 NIM SDK 接收,如果是自身体系的推送消息,NIM SDK 会将消息传递给 OppoPushMessageService
和 OppoAppPushMessageService
。
java/**
* 以下这些方法运行在非 UI 线程中, 与Oppo的PushService 方法一一对应。
* 当开发者自身也接入Oppo推送,则应将继承 PushService 改为继承 OppoPushMessageService,其他不变
*/
public class OppoPushMessageService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* 普通消息
* @param context
* @param appMessage
*/
public void processMessage(Context context, AppMessage appMessage) {
}
/**
* oppo 官方目前还不支持透传消息
*
* @param context
* @param sptDataMessage
*/
public void processMessage(Context context, SptDataMessage sptDataMessage) {
}
}
/**
* 以下这些方法运行在非 UI 线程中, 与Oppo的PushService 方法一一对应。
* 当开发者自身也接入Oppo推送,则应将继承 AppPushService 改为继承 OppoAppPushMessageService,其他不变
*/
public class OppoAppPushMessageService extends Service {
@Nullable
@Override
public IBinder onBind(Intent intent) {
return null;
}
/**
* 普通消息
* @param context
* @param appMessage
*/
public void processMessage(Context context, AppMessage appMessage) {
}
/**
* oppo 官方目前还不支持透传消息
*
* @param context
* @param sptDataMessage
*/
public void processMessage(Context context, SptDataMessage sptDataMessage) {
}
}
-
在将服务改为继承
OppoPushMessageService
和OppoAppPushMessageService
之后,将该服务在 AndroidManifest。xml 中都按如下配置,您只需将服务名称OppoService
替换成自身的服务名。xml
<service android:name="xxx.OppoService" android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE"> <intent-filter> <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE"/> </intent-filter> </service>
OPPO 平台限制
通知渠道介绍
OPPO Push 平台上默认的是公信通道,目前在原有基础上新增“私信”通道,对单个用户推送个性化信息时,不再受推送数量限制。以下是“公信”和“私信”的对比:
类型 | 公信 | 私信 |
---|---|---|
推送内容 | 热点新闻、新品推广、平台公告、社区话题、有奖活动等,多用户普适性的内容 | 个人订单变化、快递通知、订阅内容更新、评论互动、会员积分变动等,与单个用户信息强相关的内容 |
单用户推送限制(条/日) |
|
不限量 |
推送数量限制 | 所有公信类通道共享推送次数,当日达到次数限制后,所有公信类通道将不能再推送消息,目前单日推送数量为:累计注册用户数 * 2 | 不限量 |
配置方式 | 默认 | 需要在 OPPO PUSH 运营平台上登记该通道,并将通道对应属性设置为“私信” |
消息推送类型配置
为了确保推送能正常提醒用户,需设置推送消息的类型 channel_id
。
-
您可以直接在控制台上配置默认的推送消息类型。
-
在控制台首页应用管理中选择应用,然后单击 IM 即时通讯下的功能配置按钮进入功能配置页。
-
在顶部选择基础功能页签,选择第三方厂商消息分类,并单击子功能配置。
-
选择对应的第三方厂商,单击编辑,输入
channel_id
后保存。
-
-
也可以通过配置云信 NIM SDK 中消息体的
pushPayload
来实现。示例代码:
// oppoField 结构示例 // "oppoField": { // "channel_id": "" //指定下发的通道ID // } pushPayload.put("pushTitle", "Set push title here"); pushPayload.put("oppoField", oppoField);
- 对于传给 OPPO 推送平台的消息类型优先级:
- 您上传的消息体的
pushPayload
中有分类(channel_id)字段,则使用pushPayload
中的字段值。 - 如果消息体的
pushPayload
中未传入分类(channel_id)字段,则使用默认的推送消息类型(在云信控制台设置的消息类型)。 - 如果消息体的
pushPayload
中未传入分类(channel_id)字段,也没有在云信控制台上配置推送消息类型,则该推送消息不会添加分类字段。
- 您上传的消息体的
- 目前 OPPO 推送不支持透传消息。
限额说明
应用推送总量限制
通知栏推送权限 | 应用要求 | 消息推送量(条/日) |
---|---|---|
正式权限 | 应用已上架OPPO软件商店 |
|
测试权限 | 应用未上架OPPO软件商店 |
|
单设备推送条数限制
类型 | 公信 | 私信 |
---|---|---|
单用户推送限制(条/日) |
|
不限量 |
推送数量限制 | 所有公信类通道共享推送次数,当日达到次数限制后,所有公信类通道将不能再推送消息,目前单日推送数量为:累计注册用户数 * 2 | 不限量 |
用户接收数量限制
通过 OPPO 推送通道下发的消息(包含公私信),单用户接收上限2000条/日。