目前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.注册并下载SDKAndroid的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系统。3.4.注册推送服务2)推送服务组件注册 //必须配置 (兼容Q版本,继承DataMessageCallbackService) (兼容Q以下版本,继承CompatibleDataMessageCallbackService)
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.1.接口定义
1)void init (Context context,bool needLog)
2)string getMcsPackageName ()
3)string getReceiveSdkAction ()
4)boolean isSupportPush (Context context)
//会在以后的版本逐渐废弃
5)void statisticMessage (Context context, MessageStat message)
6)void statisticMessage (Context context, List < MessageStat > messages)
8)String getRegisterID ()
9)void setRegisterID (String mRegisterID)
10)void register (Context applicatoinContext, String appKey, String appSecret, ICallBackResultService
ICallBackResultService );
11)void setAppKeySecret (String appKey, String appSecret);
12)ICallBackResultService getPushCallback ()
13)void setPushCallback (ICallBackResultService ICallBackResultService );
14)void unRegister ();
15)void getRegister ()
16)void pausePush ();
17)void resumePush ();
18)void setNotificationType ( int notificationType)
19)void clearNotificationType ()
20)void clearNotifications ()
21)void getPushStatus ();
22)String getSDKVersionCode ();
23)String getSDKVersionName ();
24)String getPushVersionCode ();
25)String getPushVersionName ();
26)void setPushTime (List< Integer > weekDays, int startHour, int start Min, int endHour, int endMin);
27)void requestNotificationPermission ();
28)void openNotificationSetting ();
29)void getNotificationStatus ();
30)void enableAppNotificationSwitch (ISetAppNotificationCallBackService callBackService);
31)void disableAppNotificationSwitch (ISetAppNotificationCallBackService callBackService);
32)void getAppNotificationSwitch (IGetAppNotificationCallBackService callBackService);
4.2.2.接口说明
应用在没有获取到registerId时,需要先调用register进行注册,注册成功后才可以进行后续操作。如果调用register注册失败,可以调用getRegister使用上一次传入的参数进行重试。
调用requestNotificationPermission显示通知权限弹窗,用户可通过弹窗自行选择是/否打开应用的通知权限。建议在Activity的onResume方法中调用该接口以避免和其他弹窗重叠。重复调用该接口,弹窗也仅会显示一次。
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.1.接口定义
//设置应用内通知开关结果,如果成功返回0,失败返回非0,具体指参考错误码 void onSetAppNotificationSwitch(int responseCode);
4.4.2.接口说明
建议复用使用一个callBackService,避免后面对象覆盖调前面一个对象导致前面的callBackService无返回。
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 | 获取应用通知栏状态频繁 |
1)性能指标:响应时间小于500毫秒
2)sdk包大小:500kb以内



