@RitcheeQinG
2020-04-26T03:22:41.000000Z
字数 9114
阅读 1136
Android
基本功能 | 支持情况 |
---|---|
公信可推送数 | 累计用户数 < 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 以上
dependencies {
...
compile fileTree(include: ['*.jar'], dir: 'libs')
...
compile(name: 'com.heytap.msp', ext: 'aar')
...
}
android {
...
repositories {
flatDir {
dirs 'libs'
}
}
}
1) OPPO推送服务SDK 2.1.0版本支持的最低安卓版本为Android 4.4系统。
<uses-sdk android:minSdkVersion="19"/>
2) 权限列表(都要配置)
<uses-permission android:name="com.coloros.mcs.permission.RECIEVE_MCS_MESSAGE"/>
<uses-permission android:name="com.heytap.mcs.permission.RECIEVE_MCS_MESSAGE"/>
3) 推送服务组件注册(都要配置,如果有继承Service,则直接配置继承后的类)
<service
android:name="com.heytap.msp.push.service.CompatibleDataMessageCallbackService" 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:name="com.heytap.msp.push.service.DataMessageCallbackService" android:permission="com.heytap.mcs.permission.SEND_MCS_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> <!--兼容Q版本-->
1) 应用必须要调用init(...)接口,才能执行后续操作。
2) 由于不是所有平台都支持OPPO PUSH,提供接口HeytapPushManager.isSupportPush()方便应用判断是否支持,支持才能执行后续操作。
3) 通过调用HeytapPushManager.register(...)进行应用注册,注册成功后,您可以在ICallBackResultService的onRegister回调方法中得到regId,您可以将regId上传到自己的服务器,方便向其发消息。初始化相关参数具体要求参考详细API说明中的初始化部分。
4) 为了提高push的注册率,你可以在Application
的onCreate中初始化push。你也可以根据需要,在其他地方初始化push。如果第一次注册失败,第二次可以直接调用PushManager.getInstance().getRegister()进行重试,此方法默认会使用第一次传入的参数掉调用注册。
1.-keep public class * extends android.app.Service
2.-keep class com.heytap.msp.** { *;}
将文件夹下解压后所有jar文件放入项目工程的libs目录
代码参考demo下载:heytapPushDemo.rar(2.1.0版本)
留意以上两个链接为http而非https链接
整理一下Demo提供的代码
public class MainActivity {
private static final String APP_KEY = "asfkuhdsDgaFGHsdnkaD1837hfsjk";
private static final String APP_SECRET = "FsarqasDFgh512sfdsge33dfSa";
@Override
public void onCreate(Bundle savedInstanceState) {
// ...
if (HeyTapPushManager.isSupportPush()) {
startRegisterOppo();
}
// ...
}
private void startRegisterOppo() {
try {
/**
*初始化OPPO PUSH服务,创建默认通道
*@param context必须传入当前app的context
*@param needLog是否需要设置log
*/
HeyTapPushManager.init(this, true);
/**
* 注册OPPO PUSH推送服务
* @param applicatoinContext必须传入当前app的applicationcontet
* @param appKey 在开发者网站上注册时生成的,与AppKey相对应
* @param appSecret 与AppSecret相对应
* @param ICallBackResultService SDK操作的回调
*/
HeyTapPushManager.register(this, APP_KEY, APP_SECRET, new ICallBackResultService() {
// 注册的结果,如果注册成功,registerID就是客户端的唯一身份标识
@Override
public void onRegister() {
// 注册
if (code == 0) {
// 成功
} else {
// 失败
HeyTapPushManager.getRegister(); // 按上面的说法,如果注册失败,调用这个方法进行重试
}
}
// 注销的结果
@Override
public void onUnRegister(int code, String s) {
// 注销
if (code == 0) {
// 成功
String registerId = s;
} else {
// 失败
}
}
// 获取当前的push状态返回,根据返回码判断当前的push状态,返回码具体含义可以参考附录-错误码
@Override
public void onGetPushStatus(int code, int status) {
if (code == 0 && status == 0) {
// 成功
} else {
// 失败
}
}
// 获取当前通知栏状态,返回码具体含义可以参考附录-错误码
@Override
public void onGetNotificationStatus(int code, int status) {
if (code == 0 && status == 0) {
// 成功
} else {
// 失败
}
}
// 获取设置推送时间的执行结果
@Override
public void onSetPushTime(int code, String s) {
}
});
} catch(Exception e) {
e.printStackTrace();
}
/**
* 弹出通知栏权限弹窗(仅一次)
*/
HeyTapPushManager.requestNotificationPermission();
}
}
HeyTapPushManager
API:
/**
*初始化OPPO PUSH服务,创建默认通道
*@param context必须传入当前app的context
*@param needLog是否需要设置log
*/
void init(Context context, bool needLog)
/**
*判断是否手机平台是否支持PUSH
*@return true 表示手机平台支持PUSH, false表示不支持
*/
boolean isSupportPush()
/**
* 注册OPPO PUSH推送服务
* @param applicatoinContext必须传入当前app的applicationcontet
* @param appKey 在开发者网站上注册时生成的,与AppKey相对应
* @param appSecret 与AppSecret相对应
* @param ICallBackResultService SDK操作的回调
*/
void register(Context applicatoinContext, String appKey, String appSecret, ICallBackResultService ICallBackResultService );
/**
* 设置appKey等参数,可以覆盖register中的appkey设置
* @param appKey 在开发者网站上注册时生成的key
* @param appSecret
*/
void setAppKeySecret(String appKey, String appSecret);
/**
* 设置sdk操作回调处理,可以覆盖register中的ICallBackResultService设置
* @param ICallBackResultService sdk操作回调处理
*/
void setPushCallback(ICallBackResultService ICallBackResultService );
/**
* 解注册OPPO PUSH推送服务
*/
void unRegister();
/**
* 获取注册OPPO PUSH推送服务的注册ID
*/
void getRegister();
/**
* 暂停接收OPPO PUSH服务推送的消息
*/
void pausePush();
/**
* 恢复接收OPPO PUSH服务推送的消息,这时服务器会把暂停时期的推送消息重新推送过来
*/
void resumePush();
/**
* 获取OPPO PUSH推送服务状态
*/
void getPushStatus();
/**
* 获取OPPO PUSH推送服务SDK版本(例如”2.1.0”)
*
* @return SDKVersion
*/
String getSDKVersion();
/**
* 获取OPPO PUSH推送服务MCS版本(例如“2.4.0”)
*
* @return PushVersionCode
*/
String getPushVersionCode();
/**
* 获取OPPO PUSH推送服务MCS名称(例如“2400”)
*
* @return PushVersionName
*/
String getPushVersionName();
/**
* 设置允许推送时间 API
*
* @param weekDays 周日为0,周一为1,以此类推
* @param startHour 开始时间,24小时制
* @param endHour 结束时间,24小时制
*/
void setPushTime(List<Integer> weekDays, int startHour, int startMin, int endHour, int endMin);
/**
* 弹出通知栏权限弹窗(仅一次)
*/
void requestNotificationPermission();
/**
* 打开通知栏设置界面
*/
void openNotificationSetting();
/**
* 获取通知栏状态,从callbackresultservice回调结果
*/
void getNotificationStatus();
关于Service
均需要Manifest静态注册,注册方式见 SDK使用方式 - 安装 - 客户端
CompatibleDataMessageCallbackService
兼容 Android Q 以下
/**
* 如果应用需要解析和处理Push消息(如透传消息),则继承PushService来处理,并在Manifest文件中申明Service
* 如果不需要处理Push消息,则不需要继承PushService,直接在Manifest文件申明PushService即可
*/
public class PushMessageService extends CompatibleDataMessageCallbackService {
/**
* 透传消息处理,应用可以打开页面或者执行命令,如果应用不需要处理透传消息,则不需要重写此方法
*
* @param context
* @param dataMessage
*/
@Override
public void processMessage(Context context, DataMessage dataMessage) {
super.processMessage(context.getApplicationContext(), dataMessage);
String content = dataMessage.getContent();
TestModeUtil.addLogString(PushMessageService.class.getSimpleName(), "Receive SptDataMessage:" + content);
MessageDispatcher.dispatch(context, content);//统一处理
}
}
DataMessageCallbackService
Android Q 以上
public class AppPushMessageService extends DataMessageCallbackService {
/**
* 透传消息处理,应用可以打开页面或者执行命令,如果应用不需要处理透传消息,则不需要重写此方法
*
* @param context
* @param message
*/
@Override
public void processMessage(Context context, DataMessage message) {
super.processMessage(context, message);
String content = message.getContent();
TestModeUtil.addLogString(PushMessageService.class.getSimpleName(), "Receive SptDataMessage:" + content);
MessageDispatcher.dispatch(context, content);/统一处理
}
}
oppo 2.0.2版本的推送sdk和2.1.0使用上大同小异,区别在于:
HeyTapPushManager
在 2.0.2 中的使用方式为 PushManager.getInstance().xxx()
此外,2.0.2 版本的两个service为
PushService
和 AppPushSerivce
相比 2.1.0 版本多了2个方法,具体如下:
public class PushMessageService extends PushService {
/**
* 命令消息,主要是服务端对客户端调用的反馈,一般应用不用重写此方法
*/
@Override
public void processMessage(Context context, CommandMessage commandMesssage) {
super.processMessage(context, commandMessage);
}
/**
* 普通应用消息
*/
public void processMessage(Context context, AppMessage appMessage) {
super.processMessage(context, appMessage);
String content = appMessage.getContent();
}
/**
* 透传消息处理
*/
public void processMessage(Context context, SptDataMessage sptMessage) {
super.processMessage(context, sptMessage);
String content = sptMessage.getContent();
}
}
目前没法测试,所以不知道普通应用消息代表什么,是否代表能够在App进程被杀死,后台收到Push时触发回调。
关于这件事,目前能确定2.1.0版本的SDK应该是做不到的
包含平台使用方式,平台能力等
参考类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 参数错误,一般是用户传入参数非法引起的,请仔细检查入参格式、范围是否一一对应
绝大部分想要了解的内容能在这里找到