[关闭]
@RitcheeQinG 2020-04-26T03:22:41.000000Z 字数 9114 阅读 1136

Android OppoPush 内容梳理

Android


oppo推送调研

Push服务开启

OPush推送运营平台

oppo开放平台

推送属性

基本功能 支持情况
公信可推送数 累计用户数 < 50000,最多100000条;累计用户数 >= 50000,最多累计用户数*2条
私信可推送数 不限量
收费情况 基础服务当前免费
应用要求 应用需在OPPO软件商店上架,且主营业务不为借贷类的应用
点击跳转 支持,仅支持在平台端或服务端指定跳转页面,具体见服务端相关文档
透传消息 不支持
推送测试及AB测试 支持,见 OPPO PUSH运营平台使用指南
推送方式 OPush平台或服务端SDK
推送通道 支持,不限通道数量,但需要登记和指定通道,见通道适配
长文本推送 API广播 支持,API单推 不支持,消息推送平台 支持
大图推送 API广播 支持,API单推 不支持,消息推送平台 支持
标签推送 API广播 支持,API单推 不支持,消息推送平台 不支持
别名推送 API广播 支持,API单推 支持,消息推送平台 不支持
声音、震动等 不支持,通知按系统默认
通知栏点击事件回调 不支持,由手机系统统一处理
到达率统计 仅支持push.oppo.com查看,不支持服务端API
是否支持自定义icon图标 通过API推送暂不支持。功能上线后会开放
数据统计 OPPO PUSH目前仅提供广播消息推送记录、目标数、有效数、推送数、到达数、展示数、点击数的数据统计;API单推消息仅能统计到达回执,展示、点击等数据不支持统计回传。
未启动收消息 不支持,没启动过的应用,无法收到消息。曾经启动过的应用,如果30天内该设备有联网行为,后续无需启动也可收到消息。

环境

客户端

aar 2.1.0 需要 Android 4.4 以上,目前绝大部分手机都应该满足了

另有一个 aar 2.0.2 版本,具体下面说


服务端

Java 1.7 以上

SDK使用方式

安装

客户端

OPPO PUSH 客户端SDK接口文档(2.1.0版本)

aar下载

1. 下载
  1. dependencies {
  2. ...
  3. compile fileTree(include: ['*.jar'], dir: 'libs')
  4. ...
  5. compile(name: 'com.heytap.msp', ext: 'aar')
  6. ...
  7. }
  8. android {
  9. ...
  10. repositories {
  11. flatDir {
  12. dirs 'libs'
  13. }
  14. }
  15. }
2. 配置 Manifest

1) OPPO推送服务SDK 2.1.0版本支持的最低安卓版本为Android 4.4系统。

  1. <uses-sdk android:minSdkVersion="19"/>

2) 权限列表(都要配置)

  1. <uses-permission android:name="com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE"/>
  2. <uses-permission android:name="com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE"/>

3) 推送服务组件注册(都要配置,如果有继承Service,则直接配置继承后的类)

  1. <service
  2. android:name="com.heytap.msp.push.service.CompatibleDataMessageCallbackService" android:permission="com.coloros.mcs.permission.SEND_MCS_MESSAGE">
  3. <intent-filter>
  4. <action android:name="com.coloros.mcs.action.RECEIVE_MCS_MESSAGE"/>
  5. </intent-filter>
  6. </service> <!--兼容Q以下版本-->
  7. <service
  8. android:name="com.heytap.msp.push.service.DataMessageCallbackService" android:permission="com.heytap.mcs.permission.SEND_MCS_MESSAGE">
  9. <intent-filter>
  10. <action android:name="com.heytap.mcs.action.RECEIVE_MCS_MESSAGE"/> <action android:name="com.heytap.msp.push.RECEIVE_MCS_MESSAGE"/>
  11. </intent-filter>
  12. </service> <!--兼容Q版本-->
3. 注册推送服务

1) 应用必须要调用init(...)接口,才能执行后续操作。

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

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

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

4. 混淆配置
  1. 1.-keep public class * extends android.app.Service
  2. 2.-keep class com.heytap.msp.** { *;}

服务端

OPush服务端java SDK接入指南

OPush_JAVA_SDK.zip

将文件夹下解压后所有jar文件放入项目工程的libs目录

使用

客户端

代码参考demo下载:heytapPushDemo.rar(2.1.0版本)

heytapPushDemo.rar(2.0.2版本)

留意以上两个链接为http而非https链接

整理一下Demo提供的代码

  1. public class MainActivity {
  2. private static final String APP_KEY = "asfkuhdsDgaFGHsdnkaD1837hfsjk";
  3. private static final String APP_SECRET = "FsarqasDFgh512sfdsge33dfSa";
  4. @Override
  5. public void onCreate(Bundle savedInstanceState) {
  6. // ...
  7. if (HeyTapPushManager.isSupportPush()) {
  8. startRegisterOppo();
  9. }
  10. // ...
  11. }
  12. private void startRegisterOppo() {
  13. try {
  14. /**
  15. *初始化OPPO PUSH服务,创建默认通道
  16. *@param context必须传入当前app的context
  17. *@param needLog是否需要设置log
  18. */
  19. HeyTapPushManager.init(this, true);
  20. /**
  21. * 注册OPPO PUSH推送服务
  22. * @param applicatoinContext必须传入当前app的applicationcontet
  23. * @param appKey 在开发者网站上注册时生成的,与AppKey相对应
  24. * @param appSecret 与AppSecret相对应
  25. * @param ICallBackResultService SDK操作的回调
  26. */
  27. HeyTapPushManager.register(this, APP_KEY, APP_SECRET, new ICallBackResultService() {
  28. // 注册的结果,如果注册成功,registerID就是客户端的唯一身份标识
  29. @Override
  30. public void onRegister() {
  31. // 注册
  32. if (code == 0) {
  33. // 成功
  34. } else {
  35. // 失败
  36. HeyTapPushManager.getRegister(); // 按上面的说法,如果注册失败,调用这个方法进行重试
  37. }
  38. }
  39. // 注销的结果
  40. @Override
  41. public void onUnRegister(int code, String s) {
  42. // 注销
  43. if (code == 0) {
  44. // 成功
  45. String registerId = s;
  46. } else {
  47. // 失败
  48. }
  49. }
  50. // 获取当前的push状态返回,根据返回码判断当前的push状态,返回码具体含义可以参考附录-错误码
  51. @Override
  52. public void onGetPushStatus(int code, int status) {
  53. if (code == 0 && status == 0) {
  54. // 成功
  55. } else {
  56. // 失败
  57. }
  58. }
  59. // 获取当前通知栏状态,返回码具体含义可以参考附录-错误码
  60. @Override
  61. public void onGetNotificationStatus(int code, int status) {
  62. if (code == 0 && status == 0) {
  63. // 成功
  64. } else {
  65. // 失败
  66. }
  67. }
  68. // 获取设置推送时间的执行结果
  69. @Override
  70. public void onSetPushTime(int code, String s) {
  71. }
  72. });
  73. } catch(Exception e) {
  74. e.printStackTrace();
  75. }
  76. /**
  77. * 弹出通知栏权限弹窗(仅一次)
  78. */
  79. HeyTapPushManager.requestNotificationPermission();
  80. }
  81. }

HeyTapPushManager API:

  1. /**
  2. *初始化OPPO PUSH服务,创建默认通道
  3. *@param context必须传入当前app的context
  4. *@param needLog是否需要设置log
  5. */
  6. void init(Context context bool needLog)
  7. /**
  8. *判断是否手机平台是否支持PUSH
  9. *@return true 表示手机平台支持PUSH, false表示不支持
  10. */
  11. boolean isSupportPush()
  12. /**
  13. * 注册OPPO PUSH推送服务
  14. * @param applicatoinContext必须传入当前app的applicationcontet
  15. * @param appKey 在开发者网站上注册时生成的,与AppKey相对应
  16. * @param appSecret 与AppSecret相对应
  17. * @param ICallBackResultService SDK操作的回调
  18. */
  19. void register(Context applicatoinContext, String appKey, String appSecret, ICallBackResultService ICallBackResultService );
  20. /**
  21. * 设置appKey等参数,可以覆盖register中的appkey设置
  22. * @param appKey 在开发者网站上注册时生成的key
  23. * @param appSecret
  24. */
  25. void setAppKeySecret(String appKey, String appSecret);
  26. /**
  27. * 设置sdk操作回调处理,可以覆盖register中的ICallBackResultService设置
  28. * @param ICallBackResultService sdk操作回调处理
  29. */
  30. void setPushCallback(ICallBackResultService ICallBackResultService );
  31. /**
  32. * 解注册OPPO PUSH推送服务
  33. */
  34. void unRegister();
  35. /**
  36. * 获取注册OPPO PUSH推送服务的注册ID
  37. */
  38. void getRegister();
  39. /**
  40. * 暂停接收OPPO PUSH服务推送的消息
  41. */
  42. void pausePush();
  43. /**
  44. * 恢复接收OPPO PUSH服务推送的消息,这时服务器会把暂停时期的推送消息重新推送过来
  45. */
  46. void resumePush();
  47. /**
  48. * 获取OPPO PUSH推送服务状态
  49. */
  50. void getPushStatus();
  51. /**
  52. * 获取OPPO PUSH推送服务SDK版本(例如”2.1.0”)
  53. *
  54. * @return SDKVersion
  55. */
  56. String getSDKVersion();
  57. /**
  58. * 获取OPPO PUSH推送服务MCS版本(例如“2.4.0”)
  59. *
  60. * @return PushVersionCode
  61. */
  62. String getPushVersionCode();
  63. /**
  64. * 获取OPPO PUSH推送服务MCS名称(例如“2400”)
  65. *
  66. * @return PushVersionName
  67. */
  68. String getPushVersionName();
  69. /**
  70. * 设置允许推送时间 API
  71. *
  72. * @param weekDays 周日为0,周一为1,以此类推
  73. * @param startHour 开始时间,24小时制
  74. * @param endHour 结束时间,24小时制
  75. */
  76. void setPushTime(List<Integer> weekDays, int startHour, int startMin, int endHour, int endMin);
  77. /**
  78. * 弹出通知栏权限弹窗(仅一次)
  79. */
  80. void requestNotificationPermission();
  81. /**
  82. * 打开通知栏设置界面
  83. */
  84. void openNotificationSetting();
  85. /**
  86. * 获取通知栏状态,从callbackresultservice回调结果
  87. */
  88. void getNotificationStatus();

关于Service

均需要Manifest静态注册,注册方式见 SDK使用方式 - 安装 - 客户端

CompatibleDataMessageCallbackService 兼容 Android Q 以下

  1. /**
  2. * 如果应用需要解析和处理Push消息(如透传消息),则继承PushService来处理,并在Manifest文件中申明Service
  3. * 如果不需要处理Push消息,则不需要继承PushService,直接在Manifest文件申明PushService即可
  4. */
  5. public class PushMessageService extends CompatibleDataMessageCallbackService {
  6. /**
  7. * 透传消息处理,应用可以打开页面或者执行命令,如果应用不需要处理透传消息,则不需要重写此方法
  8. *
  9. * @param context
  10. * @param dataMessage
  11. */
  12. @Override
  13. public void processMessage(Context context, DataMessage dataMessage) {
  14. super.processMessage(context.getApplicationContext(), dataMessage);
  15. String content = dataMessage.getContent();
  16. TestModeUtil.addLogString(PushMessageService.class.getSimpleName(), "Receive SptDataMessage:" + content);
  17. MessageDispatcher.dispatch(context, content);//统一处理
  18. }
  19. }

DataMessageCallbackService Android Q 以上

  1. public class AppPushMessageService extends DataMessageCallbackService {
  2. /**
  3. * 透传消息处理,应用可以打开页面或者执行命令,如果应用不需要处理透传消息,则不需要重写此方法
  4. *
  5. * @param context
  6. * @param message
  7. */
  8. @Override
  9. public void processMessage(Context context, DataMessage message) {
  10. super.processMessage(context, message);
  11. String content = message.getContent();
  12. TestModeUtil.addLogString(PushMessageService.class.getSimpleName(), "Receive SptDataMessage:" + content);
  13. MessageDispatcher.dispatch(context, content);/统一处理
  14. }
  15. }

2.0.2 版本

oppo 2.0.2版本的推送sdk和2.1.0使用上大同小异,区别在于:

HeyTapPushManager 在 2.0.2 中的使用方式为 PushManager.getInstance().xxx()

此外,2.0.2 版本的两个service为

PushServiceAppPushSerivce

相比 2.1.0 版本多了2个方法,具体如下:

  1. public class PushMessageService extends PushService {
  2. /**
  3. * 命令消息,主要是服务端对客户端调用的反馈,一般应用不用重写此方法
  4. */
  5. @Override
  6. public void processMessage(Context context, CommandMessage commandMesssage) {
  7. super.processMessage(context, commandMessage);
  8. }
  9. /**
  10. * 普通应用消息
  11. */
  12. public void processMessage(Context context, AppMessage appMessage) {
  13. super.processMessage(context, appMessage);
  14. String content = appMessage.getContent();
  15. }
  16. /**
  17. * 透传消息处理
  18. */
  19. public void processMessage(Context context, SptDataMessage sptMessage) {
  20. super.processMessage(context, sptMessage);
  21. String content = sptMessage.getContent();
  22. }
  23. }

目前没法测试,所以不知道普通应用消息代表什么,是否代表能够在App进程被杀死,后台收到Push时触发回调。

关于这件事,目前能确定2.1.0版本的SDK应该是做不到的


服务端

SDK javadoc

接入文档 - 5. Demo

服务端API - 消息类型

服务端API - 请求地址及公共参数

服务端API - 鉴权

服务端API - 单点推送

服务端API - 图片上传

服务端API - 别名管理

服务端API -标签管理

服务端API - Feedback


平台端

OPPO PUSH运营平台使用指南

包含平台使用方式,平台能力等

附录

Push回调错误代码

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

1、ERROR = -2; //initvalue初始值

2、SERVICE_CURRENTLY_UNAVAILABLE = -1; //Service Currently Unavailable 服务不可用,此时请开发者稍候再试

3、SUCCESS = 0; //成功,只表明接口调用成功

4、INSUFFICIENT_ISV_PERMISSIONS = 11; //Insufficient ISV Permissions 无此API调用权限,开发者权限不足

5、HTTP_ACTION_NOT_ALLOWED = 12; //Http Action Not Allowed HTTP 方法不正确

6、APP_CALL_LIMITED = 13; //App Call Limited 应用调用次数超限,包含调用频率超限

7、INVALID_APP_KEY = 14; // Invalid App Key 无效的AppKey参数

8、MISSING_APP_KEY = 15; //Missing App Key 缺少AppKey参数

9、INVALID_SIGNATURE_SIGN = 16; //Invalid Signature sign校验不通过,无效签名

10、MISSING_SIGNATURE = 17; //Missing Signature 缺少签名参数

11、MISSING_TIMESTAMP = 18; //Missing Timestamp 缺少时间戳参数

12、NVALID_TIMESTAMP = 19; //Invalid Timestamp 非法的时间戳参数

13、INVALID_METHOD = 20; //Invalid Method 不存在的方法名

14、MISSING_METHOD = 21; //Missing Method 缺少方法名参数

15、MISSING_VERSION = 22; //Missing Version 缺少版本参数

16、INVALID_VERSION = 23; //Invalid Version 非法的版本参数,用户传入的版本号格式错误,必需为数字格式

17、UNSUPPORTED_VERSION = 24; //Unsupported Version 不支持的版本号,用户传入的版本号没有被提供

18、INVALID_ENCODING = 25; //Invalid encoding 编码错误,一般是用户做http请求的时候没有用UTF-8编码请求造成IP_BLACK_LIST = 26;//IP Black List IP黑名单

19、MISSING_REQUIRED_ARGUMENTS = 40; //Missing Required Arguments 缺少必选参数 ,API文档中设置为必选的参数是必传的,请仔细核对文档

20、INVALID_ARGUMENTS = 41; //Invalid Arguments 参数错误,一般是用户传入参数非法引起的,请仔细检查入参格式、范围是否一一对应

FAQ

绝大部分想要了解的内容能在这里找到

FAQ

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注