OPPO推送服务客户端SDK接入

news/2024/11/2 0:24:19/

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

应用注册接口错误码:

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

onError错误码

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

六、性能指标和SDK包大小

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

 


http://www.ppmy.cn/news/658936.html

相关文章

Android OPPO推送服务集成

OPPO推送服务集成 前言正文一、创建AS应用二、创建OPPO平台应用三、编辑推送消息1. SDK集成2. AndroidManifest配置3. 配置应用信息4. 编辑推送消息 结语 前言 为了丰富应用推送的场景和国产大厂设备&#xff0c;在我有这个条件的情况下&#xff0c;相关机型的文章我都会写一遍…

力扣日记1186

1. 题目 LeetCode 1186. 删除一次得到子数组最大和 1.1 题意 给定数组&#xff0c;求一段连续子数组&#xff0c;选择是否删去其中一个值&#xff0c;使得和最大&#xff0c;求这个最大和 1.2 分析 时间复杂度可以到O( n ∗ l o g n n*logn n∗logn) 1 < arr.length <…

如何设计一个文件系统?需要考虑哪些因素?

文件系统的实现 在对文件有了基本认识之后&#xff0c;现在是时候把目光转移到文件系统的实现上了。之前用户关心的一直都是文件是怎样命名的、可以进行哪些操作、目录树是什么&#xff0c;如何找到正确的文件路径等问题。而设计人员关心的是文件和目录是怎样存储的、磁盘空间…

苹果怎么关闭自动更新系统_如何关闭系统自动更新?

苹果手机升级系统后越来越卡&#xff0c;不想升级&#xff0c;但经常推送更新&#xff0c;甚至已经自己下载完成了然后提醒你有软件更新。一旦点错或选择夜间更新&#xff0c;一觉醒来就更新完成了&#xff0c;如果夜间更新时没电就麻烦了。那么怎么永久屏蔽iphone系统更新呢&a…

怎样防止苹果系统更新_苹果手机如何不更新系统

现在很多朋友都在使用苹果手机&#xff0c;有时候不想更新系统该怎么办&#xff0c;下面就为大家介绍一下苹果手机如何不更新系统的方法。 苹果手机如何不更新系统 1、首先在【设置】-【通用】-【itunes store和app store】的选项中&#xff0c;将下面的自动跟更新&#xff0c;…

彻底关闭苹果系统更新_彻底关闭iPhone自动更新系统 亲测有效

系统升级&#xff0c;带来了越来越好的用户体验&#xff0c;具有更好的兼容&#xff0c;优化系统&#xff0c;优化电池管理、提升稳定性、安全性。随之而来的电池耗电速度也更快了。 iPhone升级&#xff0c;私自降频&#xff0c;升级到不能升级后&#xff0c;也就该换新手机了&…

苹果项目关闭服务器,iphone系统服务哪些可以关闭

1、减少使用定位的服务和APP 第一步&#xff0c;在“设置”应用中&#xff0c;点击“隐私”选项中的“定位服务”。 第二步&#xff0c;在“定位服务”页面&#xff0c;可以选择关闭一些App应用的定位服务功能。 第三步&#xff0c;在定位服务页面&#xff0c;点击进入“系统服…

手机老是弹出系统服务器更新,苹果手机为什么老是会弹出系统更新,是不是要更新呢...

原标题&#xff1a;苹果手机为什么老是会弹出系统更新&#xff0c;是不是要更新呢 苹果手机为什么老是会弹出系统更新&#xff0c;是不是要更新呢&#xff0c;更新会有什么好处吗&#xff1f;苹果6&#xff0c;系统提示更新 我看本次提问的是一个iPhone6的机主&#xff0c;如今…