汇总一下友盟推送的中遇到的问题。
一、友盟推送集成
1)申请友盟推送KEY
*申请友盟推送APPKEY。
如果应用已经存在了,只是新接入友盟推送。可以选择从已有应用添加。
添加时注意设置包名称。
添加成功以后,会显示应用相关信息:
APPKEY:客户端友盟+的应用APPKEY,这是KEY在友盟+是通用的,如果是新添加的应用,友盟统计会有应用相关数据;
Umeng Message Secret: 友盟推送秘钥,必须。在友盟推送初始化必须要使用到。
2)集成Push SDK
项目build.gradle设置依赖仓库
buildscript {
repositories {
google()
jcenter()
maven { url 'https://dl.bintray.com/umsdk/release' }
}
dependencies {
classpath 'com.android.tools.build:gradle:3.1.4'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
google()
jcenter()
mavenCentral()
maven { url 'https://dl.bintray.com/umsdk/release' }
}
}
在项目app模块添加项目配置,如果版本号>=3.0.0,请使用如下配置脚本添加远程依赖:
//PushSDK必须依赖基础组件库,所以需要加入对应依赖
implementation 'com.umeng.umsdk:common:1.5.4'
//PushSDK必须依赖utdid库,所以需要加入对应依赖
implementation 'com.umeng.umsdk:utdid:1.1.5.3'
//PushSDK
implementation 'com.umeng.umsdk:push:6.0.1'
注意:如果同时使用支付宝和友盟推送,会出现utdid冲突。去掉依赖库就行。
utdid这个是干什么用的呢?阿里提供的验证设备唯一性和有效性的工具。
3)友盟+初始化。
务必
在工程的自定义Application类的 onCreate()
方法中做SDK代码初始化工作。
// 在此处调用基础组件包提供的初始化函数 相应信息可在应用管理 -> 应用信息 中找到 http://message.umeng.com/list/apps
// 参数一:当前上下文context;
// 参数二:应用申请的Appkey(需替换);
// 参数三:渠道名称;
// 参数四:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机;
// 参数五:Push推送业务的secret 填充Umeng Message Secret对应信息(需替换)
UMConfigure.init(this, "替换为Appkey,服务后台位置:应用管理 -> 应用信息 -> Appkey", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "替换为秘钥信息,服务后台位置:应用管理 -> 应用信息 -> Umeng Message Secret");
4)添加设备注册
Push注册在UMConfigure.init方法之后注册,注册成功后可获取deviceToken,进行消息下发。调用代码如下所示:
UMConfigure.init(this, "替换为Appkey,服务后台位置:应用管理 -> 应用信息 -> Appkey", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, "替换为秘钥信息,服务后台位置:应用管理 -> 应用信息 -> Umeng Message Secret");
//获取消息推送代理示例
PushAgent mPushAgent = PushAgent.getInstance(this);
//注册推送服务,每次调用register方法都会回调该接口
mPushAgent.register(new IUmengRegisterCallback() {
@Override
public void onSuccess(String deviceToken) {
//注册成功会返回deviceToken deviceToken是推送消息的唯一标志
Log.i(TAG,"注册成功:deviceToken:--------> " + deviceToken);
}
@Override
public void onFailure(String s, String s1) {
Log.e(TAG,"注册失败:--------> " + "s:" + s + ",s1:" + s1);
}
});
设备注册成功,推送消息可以按照特定设备推送(device token)
5)应用数据统计接口
在所有的Activity 的onCreate 方法或在应用的BaseActivity的onCreate方法中添加:
PushAgent.getInstance(context).onAppStart();
6)验证APP接入友盟推送是否成功
启动APP,观看日志,确认设备是否注册成功。
2019-08-30 17:24:59.835 21498-21498/? I/UMLog_com.umeng.message.PushAgent: AndroidManifest配置正确、参数正确
2019-08-30 17:24:59.851 21498-21498/? D/NAccs.AccsClientConfig: build config:AccsClientConfig{Tag=umeng:5a3b6264f29d984c72000049, ConfigEnv=0, AppKey=umeng:5a3b6264f29d984c72000049, AppSecret=1f8d88bb2641b5020fb83338bf15fc43, InappHost=umengacs.m.taobao.com, ChannelHost=umengjmacs.m.taobao.com, Security=2, AuthCode=null, InappPubKey=11, ChannelPubKey=11, Keepalive=true, AutoUnit=false, DisableChannel=false, QuickReconnect=false}
2019-08-30 17:24:59.851 21498-21498/? D/NAccs.ACCSClient: init config:AccsClientConfig{Tag=umeng:5a3b6264f29d984c72000049, ConfigEnv=0, AppKey=umeng:5a3b6264f29d984c72000049, AppSecret=1f8d88bb2641b5020fb83338bf15fc43, InappHost=umengacs.m.taobao.com, ChannelHost=umengjmacs.m.taobao.com, Security=2, AuthCode=null, InappPubKey=11, ChannelPubKey=11, Keepalive=true, AutoUnit=false, DisableChannel=false, QuickReconnect=false}
2019-08-30 17:24:59.857 21498-21570/? I/UMLog_com.umeng.message.PushAgent: appkey:umeng:5a3b6264f29d984c72000049,secret:1f8d88bb2641b5020fb83338bf15fc43
2019-08-30 17:24:59.857 21498-21570/? I/NAccs.TaobaoRegister: register appKey:umeng:5a3b6264f29d984c72000049 configTag:umeng:5a3b6264f29d984c72000049
2019-08-30 17:24:59.867 21498-21570/? D/NAccs.Config: setAgooAppKey appkey:umeng:5a3b6264f29d984c72000049
2019-08-30 17:24:59.872 21498-21570/? D/NAccs.ACCSManager: getAccsInstance com.umeng.message.PushAgent$2.run() (PushAgent.java:170)
2019-08-30 17:24:59.877 21498-21570/? I/olankeji.suand: at void com.umeng.message.PushAgent$2.run() (PushAgent.java:170)
2019-08-30 17:24:59.908 21498-21570/? D/NAccs.InAppConn_umeng:5a3b6264f29d984c72000049: new connection
2019-08-30 17:24:59.916 21498-21570/? I/NAccs.ACCSMgrImpl_umeng:5a3b6264f29d984c72000049: bindApp appKey:umeng:5a3b6264f29d984c72000049
2019-08-30 17:24:59.947 21498-21570/?
2019-08-30 17:25:00.083 21498-21570/? D/NAccs.MsgRecv_umeng:5a3b6264f29d984c72000049: onResult command:1 erorcode:200
2019-08-30 17:25:00.086 21498-21565/? D/NAccs.MsgDistribute: distribute start appkey:umeng:5a3b6264f29d984c72000049 config:umeng:5a3b6264f29d984c72000049
2019-08-30 17:25:00.086 21498-21565/? D/NAccs.MsgDistribute: handleControlMsg configTag:umeng:5a3b6264f29d984c72000049 dataId: serviceId: command:1 errorCode:200 appReceiver:
2019-08-30 17:25:00.096 21498-21565/? I/UMLog_com.umeng.message.PushAgent: 注册成功:AtX20UK7LQNBzOQ_91oSgtIxjj7PbufMnNI2mI8Tptz_
2019-08-30 17:25:00.097 21498-21565/? I/wuchi: --->>> UMJobIntentService enqueueWork, cla is com.umeng.message.UmengMessageCallbackHandlerService
2019-08-30 17:25:00.552 21498-21606/com.xiaolankeji.suanda I/awcn.SessionCenter: |[seq:umeng:5a3b6264f29d984c72000049] [forground]
2019-08-30 17:25:00.552 21498-21606/com.xiaolankeji.suanda D/awcn.StrategyCenter: getSchemeByHost host:umengacs.m.taobao.com scheme:https
2019-08-30 17:25:00.553 21498-21606/com.xiaolankeji.suanda D/awcn.SessionCenter: |[seq:umeng:5a3b6264f29d984c72000049] getInternal u:https://umengacs.m.taobao.com sessionType:LongLink timeout:0
2019-08-30 17:25:00.553 21498-21606/com.xiaolankeji.suanda D/awcn.StrategyCenter: getSchemeByHost host:umengacs.m.taobao.com scheme:https
2019-08-30 17:25:00.555 21498-21606/com.xiaolankeji.suanda D/awcn.SessionRequest: |[seq:umeng:5a3b6264f29d984c72000049.AWCN1] SessionRequest start host:https://umengacs.m.taobao.com type:1
2019-08-30 17:25:00.556 21498-21606/com.xiaolankeji.suanda D/getConnStrategyListByHost: |[seq:host] umengacs.m.taobao.com:result [{203.119.215.108 443 http2_0rtt_acs}, {203.119.216.51 443 http2_0rtt_acs}, {203.119.215.108 80 http2_0rtt_acs}, {203.119.216.51 80 http2_0rtt_acs}, {203.119.215.108 443 spdy_0rtt_acs}, {203.119.216.51 443 spdy_0rtt_acs}, {203.119.215.108 80 spdy_0rtt_acs}, {203.119.216.51 80 spdy_0rtt_acs}, {203.119.215.108 443 https}, {203.119.216.51 443 https}]
com.xiaolankeji.suanda
2019-08-30 17:25:00.605 21498-21647/com.xiaolankeji.suanda I/wuchi: --->>> UmengMessageCallbackHandlerService register callback
2019-08-30 17:25:00.606 21498-21647/com.xiaolankeji.suanda I/UMLog_com.umeng.message.UmengMessageCallbackHandlerService: 注册:AtX20UK7LQNBzOQ_91oSgtIxjj7PbufMnNI2mI8Tptz_,状态:true
2019-08-30 17:25:00.615 21498-21647/com.xiaolankeji.suanda I/App.java: [ (App.java:152)#onSuccess ] umeng register device token: AtX20UK7LQNBzOQ_91oSgtIxjj7PbufMnNI2mI8Tptz_
2019-08-30 17:25:00.668 21498-21550/com.xiaolankeji.suanda D/com.umeng.message.proguard.m: appLaunchAt=1567127218888
确定设备注册成功信息:
2019-08-30 17:25:00.096 21498-21565/? I/UMLog_com.umeng.message.PushAgent: 注册成功:AtX20UK7LQNBzOQ_91oSgtIxjj7PbufMnNI2mI8Tptz_
二、测试友盟推送消息
2.1)添加测试设备:
在【友盟+】消息推送服务Push后台的“测试模式”中填写获取到的deviceToken,将该设备添加为测试设备:
设备的device token即日志输出中注册成功设备的device token。
2.2)创建测试消息
注意:按照上述步骤,推送消息是可能发送设备的。为什么呢?
设置友盟推送的BUG,怎么解决呢?
在第3步,设置发送策略的自定义参数,就能推送到设备端,显示通知消息了。
至此,友盟推送接入成功了。
三、定制推送消息处理
3.1) 友盟推送消息模板:
{
"msg_id": "uu481201399440513912",
"display_type": "notification",
"alias": "",
"random_min": 0,
"body": {
"title": "测试自定义参数",
"ticker": "测试自定义参数",
"text": "无",
"after_open": "go_app",
"url": "",
"activity": "",
"custom": "",
"play_vibrate": "true",
"play_sound": "true",
"play_lights": "true"
},
"extra": {
"key1": "value1",
"key2": "value2"
}
}
extra:即推送策略的自定义参数,key-value对。
body: 消息体。
url:跳转URL
title:消息标题。
ticker: 通知栏消息的消息标题
text: 通知栏显示消息内容
activity: 跳转页面Activity名
custom: 发送策略的自定义行为。
3.2) 自定义PUSH消息处理
消息到达时获取自定义参数。重写UmengMessageHandler类中的getNotification(Context context, UMessage msg)方法:
UmengMessageHandler messageHandler = new UmengMessageHandler() {
@Override
public Notification getNotification(Context context, UMessage msg) {
for (Map.Entry entry : msg.extra.entrySet()) {
Object key = entry.getKey();
Object value = entry.getValue();
}
return super.getNotification(context, msg);
}
};
mPushAgent.setMessageHandler(messageHandler);
在友盟初始化的时候添加注册。