目前SDK版本为V3.0.0,只支持Android 4.4或以上版本的手机系统,如无特殊说明,兼容历史版本。开发者技术支持:QQ群1(1125363958)、QQ群2(1125372593)。

二、SDK接入流程

2.1、开通推送权限

具体权限申请流程可参考【推送服务开启指南】

2.2、获取秘钥等验证信息

申请通过后,可在OPPO推送平台-配置管理-应用配置-页面查看AppKey、AppSecret和MasterSecret(仅开发者帐号(主帐号)可查看)。

名词解释:AppKey、AppSecret客户端的身份标识,客户端SDK初始化时使用。

三、SDK集成步骤

3.1.注册并下载SDK

Android的SDK以aar形式提供,第三方APP只需要添加少量代码即可接入OPPO推送服务。代码参考demo下载:heytapPushDemo.rar(3.0.0版本)

下载aar文件,即3.0.0版本sdk:OPPO PUSH 客户端SDK(3.0.0版本)

3.2.gradle配置文件

3.2.1)maven依赖
第一步:添加maven仓库

maven {
url 'https://maven.columbus.heytapmobi.com/repository/releases/'
credentials {
username 'nexus'
password 'c0b08da17e3ec36c3870fed674a0bcb36abc2e23'
}
}

第二步:添加maven依赖

implementation com.heytap.msp:push:3.0.0

3.2.2)aar依赖
第一步:添加maven依赖

implementation(name: 'push-3.0.0', ext: 'aar')
//以下依赖都需要添加
implementation 'com.google.code.gson:gson:2.6.2'
implementation 'commons-codec:commons-codec:1.6'
implementation 'androidx.annotation:annotation:1.1.0'

第二步:添加aar配置
1)在build文件中添加以下代码

Android{
....
repositories {
flatDir {
dirs 'libs'
}
}
....
}

3.3.配置AndroidManifest.xml

1)OPPO推送服务SDK支持的最低安卓版本为Android 4.4系统。
<uses-sdk  android:minSdkVersion="19"/>2)推送服务组件注册
//必须配置
<serviceandroid:name="com.heytap.msp.push.service.XXXService"    android:permission="com.heytap.mcs.permission.SEND_PUSH_MESSAGE"android:exported="true"><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>(兼容Q版本,继承DataMessageCallbackService)<serviceandroid:name="com.heytap.msp.push.service.XXXService"
android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE"
android:exported="true"><intent-filter><action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE"/></intent-filter>
</service>(兼容Q以下版本,继承CompatibleDataMessageCallbackService)

3.4.注册推送服务

1)应用推荐在Application类主线程中调用HeytapPushManager.init(…)接口,这个方法不是耗时操作,执行之后才能进行后续操作。

2)业务需要调用api接口,例如应用内开关开启/关闭,需要调用注册接口之后,才会生效。

3)由于不是所有平台都支持MSP PUSH,提供接口HeytapPushManager.isSupportPush()方便应用判断是否支持,支持才能执行后续操作。

4)通过调用HeytapPushManager.register(…)进行应用注册,注册成功后,您可以在ICallBackResultService的onRegister回调方法中得到regId,您可以将regId上传到自己的服务器,方便向其发消息。初始化相关参数具体要求参考详细API说明中的初始化部分。

5)为了提高push的注册率,你可以在Application的onCreate中初始化push。你也可以根据需要,在其他地方初始化push。如果第一次注册失败,第二次可以直接调用PushManager.getInstance().getRegister()进行重试,此方法默认会使用第一次传入的参数掉调用注册。

3.5.混淆配置

-keep public class * extends android.app.Service
-keep class com.heytap.msp.** { *;}

四、详细API说明

4.1.DataMessageCallbackService 和CompatibleDataMessageCallbackService的回调方法

processMessage(Context context, DataMessage message){
}
DataMessage是mcs回调给应用的透传消息

里面包含notifyId,如果业务通过透传消息,后续业务自身逻辑创建的通知栏消息,想要撤回,务必用message携带的notifyId展示,否则可能无法撤回

业务通过以下方式判断消息类型

获取DataMessage.getMessageType()进行判断

内部透传 透传消息
MessageConstant.MessageType.MESSAGE_APP MessageConstant.MessageType.MESSAGE_DATA

4.2.HeytapPushManager

4.2.1.接口定义

   /***初始化MSP服务,创建默认通道*@param context必须传入当前app的context*@param needLog是否需要设置log*/1)void init (Context context,bool needLog)/***获取Mcs的包名*/2)string getMcsPackageName ()/***获取接收消息服务的action*/3)string getReceiveSdkAction ()/***判断是否手机平台是否支持PUSH@param context传入应用上下文*@return true 表示手机平台支持PUSH, false表示不支持*/4)boolean isSupportPush (Context context)/*** (旧埋点)消息事件统计接口,用于进行额外的Push消息事件统计   ** @param context 应用的context* @param message 需要上报的消息或消息列表*///会在以后的版本逐渐废弃5)void statisticMessage (Context context, MessageStat message)6)void statisticMessage (Context context, List < MessageStat > messages)/*** (新埋点)消息事件统计接口,用于进行额外的Push消息事件统计,如有需要使用,请开发者提前与OppoPush团队进行充分沟通和确认,为了防止业务方频繁调用上报** @param context 应用的context* @param eventId 需要上报的eventId事件,上报的eventId在EventConstant类中* @param eventId 透传消息下发的消息体*7)void statisticEvent(Context context,String eventId , DataMessage message)/***获取registerId*/8)String getRegisterID ()/***设置registerId*/9)void setRegisterID (String mRegisterID)/*** 注册MSP推送服务* @param applicatoinContext必须传入当前app的applicationcontet* @param appKey 在开发者网站上注册时生成的,与AppKey相对应* @param appSecret 与AppSecret相对应* @param ICallBackResultService SDK操作的回调*/10)void register (Context applicatoinContext, String appKey, String appSecret, ICallBackResultServiceICallBackResultService );/*** 设置appKey等参数,可以覆盖register中的appkey设置* @param appKey 在开发者网站上注册时生成的key* @param appSecret*/11)void setAppKeySecret (String appKey, String appSecret);/***获取pushcall回调*/12)ICallBackResultService getPushCallback ()/*** 设置sdk操作回调处理,可以覆盖register中的ICallBackResultService设置* @param ICallBackResultService sdk操作回调处理*/13)void setPushCallback (ICallBackResultService ICallBackResultService );/*** 解注册MSP推送服务*/14)void unRegister ();/*** 获取注册OPush推送服务的注册ID,此方法用于提高注册率,里面调用的是注册的逻辑,引用之前传入的参数*/15)void getRegister ()/*** 暂停接收MSP服务推送的消息*/16)void pausePush ();/*** 恢复接收MSP服务推送的消息,这时服务器会把暂停时期的推送消息重新推送过来*/17)void resumePush ();/*** 客户端设置通知消息的提醒类型,当服务端指定了消息的提醒类型,会优选考虑客户端设置的。*/18)void setNotificationType ( int notificationType)/*** 清除客户端设置的通知消息提醒类型。*/19)void clearNotificationType ()/*** 清除通知*/20)void clearNotifications ()/*** 获取MSP推送服务状态*/21)void getPushStatus ();/*** 获取MSP推送服务SDK版本(例如”2.1.0”)** @return SDKVersion*/22)String getSDKVersionCode ();/*** 获取MSP推送服务SDK名称** @return SDKVersionName*/23)String getSDKVersionName ();/*** 获取MSP推送服务MCS版本(例如“2400”)** @return PushVersionCode*/24)String getPushVersionCode ();/*** 获取MSP推送服务MCS版本(例如“2.4.0”)** @return PushVersionName*/25)String getPushVersionName ();/*** 设置允许推送时间 API** @param weekDays 周日为0,周一为1,以此类推* @param startHour 开始时间,24小时制* @param endHour 结束时间,24小时制*/26)void setPushTime (List< Integer > weekDays, int startHour, int start Min, int endHour, int endMin);/*** 弹出通知栏权限弹窗(仅一次)*/27)void requestNotificationPermission ();/*** 打开通知栏设置界面*/28)void openNotificationSetting ();/*** 获取通知栏状态,从callbackresultservice回调结果*/29)void getNotificationStatus ();/*** 打开应用内通知*@see ISetAppNotificationCallBackService*/30)void enableAppNotificationSwitch (ISetAppNotificationCallBackService callBackService);/*** 关闭应用内通知*@see ISetAppNotificationCallBackService*/31)void disableAppNotificationSwitch (ISetAppNotificationCallBackService callBackService);/*** 获取应用内通知开关*@see IGetAppNotificationCallBackService*/32)void getAppNotificationSwitch (IGetAppNotificationCallBackService callBackService);

4.2.2.接口说明
应用在没有获取到registerId时,需要先调用register进行注册,注册成功后才可以进行后续操作。如果调用register注册失败,可以调用getRegister使用上一次传入的参数进行重试。
调用requestNotificationPermission显示通知权限弹窗,用户可通过弹窗自行选择是/否打开应用的通知权限。建议在Activity的onResume方法中调用该接口以避免和其他弹窗重叠。重复调用该接口,弹窗也仅会显示一次。

4.3.ICallBackResultService

4.3.1.接口定义

//注册的结果,如果注册成功,registerID就是客户端的唯一身份标识
void onRegister(int responseCode, String registerID);//反注册的结果
void onUnRegister(int responseCode);//获取当前的push状态返回,根据返回码判断当前的push状态,返回码具体含义可以参考[错误码]
void onGetPushStatus(int responseCode,int status);
public class PushStatus {public static final int PUSH_STATUS_START = 0;public static final int PUSH_STATUS_PAUSE = 1;public static final int PUSH_STATUS_STOP = 2;
}//获取当前通知栏状态,返回码具体含义可以参考[错误码]
void onGetNotificationStatus(int responseCode,int status);
public class NotificatoinStatus {public static final int STATUS_OPEN = 0;public static final int STATUS_CLOSE = 1;
}//获取设置推送时间的执行结果
void onSetPushTime(int responseCode, String pushTime)//错误码返回的接口(当前主要是用于调用频繁的回调,后续可做拓展)
void onError(int code, String msg)

4.3.2.接口说明
所有回调都需要根据responseCode来判断操作是否成功,0 代表成功,其他代码失败,失败具体原因可以查阅附录中的错误码列表。
onRegister接口返回的registerID是当前客户端的唯一标识,app开发者可以上传保存到应用服务器中,在发送push消息是可以指定registerID发送。

4.4.ISetAppNotificationCallBackService

4.4.1.接口定义

//设置应用内通知开关结果,如果成功返回0,失败返回非0,具体指参考错误码
void onSetAppNotificationSwitch(int responseCode);

4.4.2.接口说明
建议复用使用一个callBackService,避免后面对象覆盖调前面一个对象导致前面的callBackService无返回。

4.5.IGetAppNotificationCallBackService

4.5.1.接口定义

//获取应用内通知开关结果,如果成功返回0,失败返回非0,具体指参考错误码
//appSwich:0:未定义状态(不校验开关),1:打开状态,2:关闭状态
void onGetAppNotificationSwitch(int responseCode, int appSwitch);

4.5.2.接口说明
建议复用使用一个callBackService,避免后面对象覆盖调前面一个对象导致前面的callBackService无返回。

五、错误码定义说明

参考类com.coloros.mcssdk.mode.ErrorCode中的错误码定义进行处理,详细如下:

通用错误码:

Code 英文描述 中文描述
-5 ERROR_REGISTERID_CHECK_ERROR 监测registerId有误
-4 ERROR_APPPACKAGE_EMPTY 应用包名为空
-3 ERROR_DEVICEID_NULL 设备id为空
-2 ERROR 初始值
-1 SERVICE_CURRENTLY_UNAVAILABLE 服务不可用,请开发者稍候再试
0 SUCCESS 成功,只表明接口调用成功

应用注册接口错误码:

Code 英文描述 中文描述
11 Insufficient ISV Permissions 无此API调用权限,开发者权限不足
12 Http Action Not Allowed HTTP 方法不正确
13 App Call Limited 应用调用次数超限,包含调用频率超限
14 Invalid App Key 无效的AppKey参数
15 Missing App Key 缺少AppKey参数
16 Invalid Signature sign 校验不通过,无效签名
17 Missing Signature 缺少签名参数
18 Missing Timestamp 缺少时间戳参数
19 Invalid Timestamp 非法的时间戳参数
20 Invalid Method 不存在的方法名
21 Missing Method 缺少方法名参数
22 Missing Version 缺少版本参数
23 Invalid Version 非法的版本参数,用户传入的版本号格式错误,必需为数字格式
24 Unsupported Version 不支持的版本号,用户传入的版本号没有被提供
25 Invalid encoding 编码错误,一般是用户做http请求的时候没有用UTF-8编码请求造成
26 IP Black List IP黑名单
40 Missing Required Arguments 缺少必选参数 ,API文档中设置为必选的参数是必传的,请仔细核对文档
41 Invalid Arguments 参数错误,一般是用户传入参数非法引起的,请仔细检查入参格式、范围是否一一对应

onError错误码

Code 英文描述 中文描述
-1 ERROR_CODE_REGISTER_API_FREQUENTLY 注册频繁调用
-2 ERROR_CODE_UNREGISTER_API_FREQUENTLY 注销频繁调用
-3 ERROR_CODE_PAUSE_API_FREQUENTLY 停止推送频繁调用
-4 ERROR_CODE_RESUME_PUSH_API_FREQUENTLY 恢复推送频繁调用
-5 ERROR_CODE_GET_NOTIFICATION_STATUS_API_FREQUENTLY 获取通知栏状态频繁调用
-6 ERROR_CODE_SET_NOTIFICATION_TYPE_API_FREQUENTLY 设置通知栏tyye频繁调用
-7 ERROR_CODE_CLEAR_NOTIFICATION_TYPE_API_FREQUENTLY 清除通知栏type频繁调用
-8 ERROR_CODE_OPEN_NOTIFICATION_SETTINGS_API_FREQUENTLY 打开通知栏设置界面频繁调用
-9 ERROR_CODE_CLEAR_NOTIFICATIONS_API_FREQUENTLY 清除通知栏消息频繁调用
-10 ERROR_CODE_GET_PUSH_STATUS_API_FREQUENTLY 获取push状态频繁调用
-11 ERROR_CODE_SET_PUSH_TIME_API_FREQUENTLY 设置push时间频繁调用
-12 ERROR_CODE_REQUEST_NOTIFICATION_PERMISSION_API_FREQUENTLY 请求通知栏权限频繁调用
-13 ERROR_CODE_SEND_INSTANT_ACK_API_FREQUENTLY 发送ack频繁调用
-14 ERROR_CODE_STATISTIC_FREQUENTLY 埋点上报频繁调用
-15 ERROR_CODE_ENABLE_APP_NOTIFICATION_FREQUENTLY 关闭应用通知栏频繁调用
-16 ERROR_CODE_DISABLE_APP_NOTIFICATION_FREQUENTLY 开启应用通知栏频繁调用
-17 ERROR_CODE_GET_APP_NOTIFICATION_FREQUENTLY 获取应用通知栏状态频繁

六、性能指标和SDK包大小

1)性能指标:响应时间小于500毫秒
2)sdk包大小:500kb以内

OPPO推送服务客户端SDK接入相关推荐

  1. Android OPPO推送服务集成

    OPPO推送服务集成 前言 正文 一.创建AS应用 二.创建OPPO平台应用 三.编辑推送消息 1. SDK集成 2. AndroidManifest配置 3. 配置应用信息 4. 编辑推送消息 结语 ...

  2. IM推送Android客户端SDK之智能心跳

    1. 为什么TCP连接需要心跳? 因为运营商有一个NAT超时:因为IP v4的IP量有限,运营商分配给手机终端的IP是运营商内网的IP,手机要连接Internet,就需要通过运营商的网关做一个网络地址 ...

  3. Android开发之推送服务(三) 集成Oppo和vivo推送

    Oppo推送服务,也是在Oppo手机中使用的比较多.而且现在Oppo和Vivo两款手机最早提出美颜功能,所以这两款手机在市场上的占有率还是比较高的. Oppo推送目前已经开发注册,Vivo目前只对部分 ...

  4. 小米海量数据推送服务技术讲解

    11.11大促在即,随着移动端业务量的急剧提升,像小米推送这样的基础服务也经受了巨大的考验.去年的11月12日,小米的项目总监汪轩然在微博上宣布,"小米推送服务共发出9.65亿条消息,平均每 ...

  5. VIVO推送接入 OPPO推送接入 客户端+服务端

    老生常谈,推送接入已经不是什么难事,跟着文档走几小时就能搞定.不过我这里还是要记录一下,因为我在接入的时候还是有坑.希望这篇文章可以帮到你. VVIO客户端 厂商推送,无非就是收到推送拉起通知.所以在 ...

  6. 【FAQ】接入HMS Core推送服务过程中一些常见问题总结

    HMS Core 推送服务(Push Kit)是华为提供的消息推送平台,建立了从云端到终端的消息推送通道.开发者通过集成推送服务,可以向客户端应用实时推送消息,构筑良好的用户关系,提升用户的感知度和活 ...

  7. java集成oppo推送sdk

    准备工作 1.申请推送服务需要在oppo官网上架自己的app(比较蛋疼),需要一些资料,上架以后app评级为A/B的应用方可申请推送服务,获取到app_key和app_secret. 2.oppo官网 ...

  8. 物联网学习 第4讲 中移OneNET HTTP推送服务接入

    物联网开发 第4讲 中移OneNET HTTP推送服务接入 在使用OneNET平台时,如果我们自己开发应用,基本上会有获取设备的上下线信息以及设备上传的数据点的需求. 为了满足上述的需求,我们有以下两 ...

  9. 一加消息推送服务器,华为、荣耀、OPPO、realme、一加完成统一推送服务开发

    这意味着,符合联盟标准的统一推送服务,将覆盖华为.荣耀.OPPO.realme.一加五个品牌的手机. 具体来讲,华为.荣耀将首先在EMUI 10正式版中支持统一推送,华为和荣耀新发布机型全部支持,现有 ...

最新文章

  1. Python学习笔记(八)—使用正则获取网页中所需要的信息。
  2. java中的alert是什么意思_javascript 中如何使用alert?
  3. declspec(dllexport)与_declspec(dllimport) 异同
  4. Microsoft SharePoint Server 2010 的新增功能
  5. 谷歌Chrome 紧急修复已遭利用的两个0day
  6. TreeMap按key排序
  7. atitit.压缩算法 ZLib ,gzip ,zip 最佳实践 java .net php
  8. 抖音没有播放量怎么回事?是不是限流了?
  9. stm32F407 + FreeRTOS + FAT 文件系统移植
  10. 网易暴力裁员事件 网易员工疑遭网易暴力裁员
  11. 智能制造专业就业方向
  12. iPhone如何开启头部追踪功能 iPhone头部追踪功能使用方法
  13. 25 岁,毕业写前端的这三年,多益网络java面试
  14. 一道积分不等式的最优估计探索
  15. Mysql复制表结构、表数据以及修改主键
  16. Kafka学习笔记——使用Kafka记录APP的操作日志
  17. Android开源实战:简单好用、含历史搜索记录的智能搜索框
  18. php 获取qq头像,php通过QQ号获取用户QQ昵称、QQ头像、QQ邮箱等信息!
  19. FatFS文件系统的使用(STM32)
  20. linux设置java环境变量_linux配置java环境变量

热门文章

  1. html控制树莓派小车,用家里旧的红外遥控器控制树莓派小车
  2. 各排序算法最好最坏平均情况下的时间复杂度
  3. ToString()的用法
  4. unittest测试mms医药系统登录模块
  5. 如何修改Word文档里面的显示比例
  6. DevExpress官方汉化文件对界面进行汉化的过程
  7. vue2 + tracking 实现 PC 端的人脸识别
  8. Python实现生命游戏(Game of Life)
  9. Fresco的缓存机制
  10. c语言fmin最小公倍数,已知函式f(x)=2分之1cos的平方x加2分之根号3sinxcosx加1,X属于R 。求在[π/12,π/4]上的最大最小值...