关于「进程保活」的需求总是很多,以往的解决办法也是层出不穷,但是随着Android系统的更新,99%的方法已经无效
现在普遍的做法是集成多个手机厂商的推送(小米,华为,魅族等),再加上一个第三方推送(个推,极光等),然后再添加白名单
####注册华为开发者
进入华为开发者联盟注册并实名认证,没啥可说的
####创建应用并点亮服务
keytool -list -v -keystore
####集成SDK
配置maven仓库
maven {
url 'http://developer.huawei.com/repo/'
}
配置项目依赖
implementation 'com.huawei.android.hms:push:{version-code}' //当日版本 2.6.0.301
####集成Agent并配置Manifest
####代码编写
#####自定义广播接收者
public class MyHMSReceiver extends PushReceiver {
@Override
public void onToken(Context context, String token, Bundle extras) {
Log.e(" =R= onToken:", "token:" + token);
}
@Override
public boolean onPushMsg(Context context, byte[] msg, Bundle bundle) {
//收到透传
try {
String content = new String(msg, "UTF-8");
Log.e(" =R= onPushMsg:", "content:" + content);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
public void onEvent(Context context, Event event, Bundle extras) {
//通知栏事件,可自定义
if (Event.NOTIFICATION_OPENED.equals(event) || Event.NOTIFICATION_CLICK_BTN.equals(event)) {
int notifyId = extras.getInt(BOUND_KEY.pushNotifyId, 0);
Log.e(" =R= onEvent:", "notifyId:" + notifyId);
if (0 != notifyId) {
NotificationManager manager = (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
manager.cancel(notifyId);
}
}
String message = extras.getString(BOUND_KEY.pushMsgKey);
Log.e(" =R= onEvent:", "message:" + message);
super.onEvent(context, event, extras);
}
@Override
public void onPushState(Context context, boolean pushState) {
Log.e(" =R= onPushState:", "pushState:" + pushState);
}
}
别忘了替换AndroidManifest.xml文件中配置的Receiver的name属性
#####application文件中初始化HMSAgent
HMSAgent.init(this);
别忘了在AndroidManifest.xml文件中替换application的name属性
#####应用启动时调用Connect
HMSAgent.connect(this, new ConnectHandler() {
@Override
public void onConnect(int rst) {
Log.e("onConnect:", "rst:" + rst);
}
});
#####连接后申请token
HMSAgent.Push.getToken(new GetTokenHandler() {
@Override
public void onResult(int rst) {
Log.e("getToken:", "rst:" + rst);
}
});
获取token后会调用MyHMSReceiver的onToken()方法
#####注销token
HMSAgent.Push.deleteToken("token", new DeleteTokenHandler() {
@Override
public void onResult(int rst) {
Log.e("deleteToken:", "rst:" + rst);
}
});
注销后,客户端将不会接收推送消息
#####查询Push连接状态
HMSAgent.Push.getPushState(new GetPushStateHandler() {
@Override
public void onResult(int rst) {
Log.e("getPushState:", "rst:" + rst);
}
});
查询后会调用MyHMSReceiver的onPushState()方法
#####是否允许接收Push透传消息
HMSAgent.Push.enableReceiveNormalMsg(enable, new EnableReceiveNormalMsgHandler() {
@Override
public void onResult(int rst) {
Log.e("enableReceiveNormalMsg:", "rst:" + rst);
}
});
#####是否接收Push通知栏消息
HMSAgent.Push.enableReceiveNotifyMsg(true, new EnableReceiveNotifyMsgHandler() {
@Override
public void onResult(int rst) {
Log.e("enableReceiveNotifyMsg:", "rst:" + rst);
}
});
#####查询华为Push用户协议
HMSAgent.Push.queryAgreement(new QueryAgreementHandler() {
@Override
public void onResult(int rst) {
Log.e("queryAgreement:", "rst:" + rst);
}
});
####相关文档
第一次启动应用会下载华为服务,剩余的工作就只有收到推送的处理了。