友盟统计与百度推送

记录一个友盟统计与百度推送可能存在的冲突

前些天先集成了百度推送,测试一下,正常,后来就没管了。

为了快速实现分享和数据统计,又引入了友盟,测试一下,友盟也没有问题。

回头,后端说要改一下推送内容,让我测试一下,百度推送崩了!

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一下,神了,可以收到了……后端传来的也能收到了……

所以,这两个,到底存不存在冲突……反正改了就好了

没有更多推荐了,返回首页