记录一个友盟统计与百度推送可能存在的冲突
前些天先集成了百度推送,测试一下,正常,后来就没管了。
为了快速实现分享和数据统计,又引入了友盟,测试一下,友盟也没有问题。
回头,后端说要改一下推送内容,让我测试一下,百度推送崩了!
在PushMessageReceiver
中打印信息,绑定成功,获取到了正确的appid。
po一下这个类
/**
* 描述:百度推送
* 创建者:admin
* 创建时间:2019-3-12 10:57:38
*/
/**
* Push消息处理receiver。请编写您需要的回调函数, 一般来说: onBind是必须的,用来处理startWork返回值;
* onMessage用来接收透传消息; onSetTags、onDelTags、onListTags是tag相关操作的回调;
* onNotificationClicked在通知被点击时回调; onUnbind是stopWork接口的返回值回调
*
* 返回值中的errorCode,解释如下:
* 0 - Success
* 10001 - Network Problem
* 30600 - Internal Server Error
* 30601 - Method Not Allowed
* 30602 - Request Params Not Valid
* 30603 - Authentication Failed
* 30604 - Quota Use Up Payment Required
* 30605 - Data Required Not Found
* 30606 - Request Time Expires Timeout
* 30607 - Channel Token Timeout
* 30608 - Bind Relation Not Found
* 30609 - Bind Number Too Many
*
* 当您遇到以上返回错误时,如果解释不了您的问题,请用同一请求的返回值requestId和errorCode联系我们追查问题。
*
*/
public class PushReceiver extends PushMessageReceiver {
/**
* 调用PushManager.startWork后,sdk将对push
* server发起绑定请求,这个过程是异步的。绑定请求的结果通过onBind返回。 如果您需要用单播推送,需要把这里获取的channel
* id和user id上传到应用server中,再调用server接口用channel id和user id给单个手机或者用户推送。
*
* @param context
* BroadcastReceiver的执行Context
* @param errorCode
* 绑定接口返回值,0 - 成功
* @param appid
* 应用id。errorCode非0时为null
* @param userId
* 应用user id。errorCode非0时为null
* @param channelId
* 应用channel id。errorCode非0时为null
* @param requestId
* 向服务端发起的请求id。在追查问题时有用;
* @return none
*/
@Override
public void onBind(Context context, int errorCode, String appid,
String userId, String channelId, String requestId){
String responseString = "onBind errorCode=" + errorCode + " appid="
+ appid + " userId=" + userId + " channelId=" + channelId
+ " requestId=" + requestId;
LogMessage.LogMsg(TAG, responseString);
UserCache.saveChannelId(channelId);//保存用户缓存数据
}
/**
* PushManager.stopWork() 的回调函数。
* @param context 上下文
* @param errorCode 错误码。0表示从云推送解绑定成功;非0表示失败。
* @param requestId 分配给对云推送的请求的id
*/
@Override
public void onUnbind(Context context, int errorCode, String requestId) {
}
/**
* setTags() 的回调函数。
*
* @param context 上下文
* @param errorCode 错误码。0表示某些tag已经设置成功;非0表示所有tag的设置均失败。
* @param successTags 设置成功的tag
* @param failTags 设置失败的tag
* @param requestId 分配给对云推送的请求的id
*/
@Override
public void onSetTags(Context context, int errorCode, List<String> successTags, List<String> failTags, String requestId) {
}
/**
* delTags() 的回调函数。
* @param context
* 上下文
* @param errorCode 错误码。0表示某些tag已经删除成功;非0表示所有tag均删除失败。
* @param successTags 成功删除的tag
* @param failTags 删除失败的tag
* @param requestId 分配给对云推送的请求的id
*/
@Override
public void onDelTags(Context context, int errorCode, List<String> successTags, List<String> failTags, String requestId) {
}
/**
* listTags() 的回调函数。
*
* @param context 上下文
* @param errorCode 错误码。0表示列举tag成功;非0表示失败。
* @param tags 当前应用设置的所有tag。
* @param requestId 分配给对云推送的请求的id
*/
@Override
public void onListTags(Context context, int errorCode, List<String> tags, String requestId) {
}
/**
* 接收透传消息的函数。
* @param context 上下文
* @param message 推送的消息
* @param customContentString 自定义内容,为空或者json字符串
*/
@Override
public void onMessage(Context context, String message, String customContentString) {
LogMessage.LogMsg("onMessage1",message);
LogMessage.LogMsg("onMessage2",customContentString);
}
/**
* 接收通知点击的函数。注:推送通知被用户点击前,应用无法通过接口获取通知的内容。
* @param context 上下文
* @param title 推送的通知的标题
* @param description 推送的通知的描述
* @param customContentString 自定义内容,为空或者json字符串
*/
@Override
public void onNotificationClicked(Context context, String title, String description, String customContentString) {
LogMessage.LogMsg("Notification",title);
LogMessage.LogMsg("Notification1",description);
LogMessage.LogMsg("Notification2",customContentString);
//如果HomePageActivity不存在说明没登录
if (AppManager.getAppManager().findActivity(HomePageActivity.class)) {
Intent intent = new Intent(context, HomePageActivity.class);
//启动
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
} else {
Toasts.showLong(App.getAppContext(), "请先登录");
}
}
@Override
public void onNotificationArrived(Context context, String s, String s1, String s2) {
LogMessage.LogMsg("Arrived1",s);
LogMessage.LogMsg("Arrived2",s1);
LogMessage.LogMsg("Arrived3",s2);
}
}
onNotificationArrived
是接收推送主要方法
onNotificationClicked
要点了才能收到
在 onNotificationArrived
中,s 是标题,s1 是预览内容,s2 是扩展数据,后端推过来的有用数据基本都在s2中。
但是啊,后端推送的信息死活收不到,去百度推送的后台发消息也收不到,新建个
应用再重新绑定,也获取到了正确的appid,但推送的信息死活就是收不到。
仔细想一下最近干了什么,发现,就只引入了个友盟的统计。
/**
* 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调
* 用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,
* UMConfigure.init调用中appkey和channel参数请置为null)。
*/
UMConfigure.init(this, "5c8f0xxxxxxxxxxxxx00097d", "Umeng", UMConfigure.DEVICE_TYPE_PHONE, null);
// 选用MANUAL页面采集模式
MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.MANUAL);
又在BaseActivity
中埋点
@Override
protected void onResume() {
super.onResume();
MobclickAgent.onResume(this);
}
@Override
protected void onPause() {
super.onPause();
MobclickAgent.onPause(this);
}
那就把引入的取消了试一下。
把代码注释掉,run一下,神了,可以收到了……后端传来的也能收到了……