首次在新设备上开启app,极光推送根本不能成功

收不到消息
标签: #<Tag:0x00007fb83b1dd120>

(我的用户名) #1

手机初次安装app后,极光推动也注册成功了,别名也设置了,后台也传别名给他了,可是收不到推送消息,但是杀死app再次近入,推送一切就正常了,一直以为是后台的问题,后来才发现这是一个坑。

在我们首次首次进入app时我们会去极光注册登录,这个结果的返回是异步的,而设置别名时,注册登录还没返回成功,所以我们的别名是设置失败的(可在极光后台测试,会提示没有这个别名),第二次近入,因为已经注册登录成功了,所以一切就正常了

解决办法: 极光提供了登录成功的通知,我们可以收到通知后再去设置别名,这个时候就没有问题了

以上是ios出现的问题,我的是anroid,也出现同样的问题,在新设备上安装app,接收不到推送,退出或者再次切换下再次设置别名才能收到通知,以后不管是否卸载app就都没问题了,我查了好久,也就这一个解释了,设备注册时异步的,导致首次别名设置失败,可是我找不到android监听注册成功的方法,JPushInterface.ACTION_REGISTRATION_ID 判断这个获取的结果为空,可是不知道这个是开始注册就出数据还是成功后出的数据,忘解惑


#2

监听这个广播

能取到registrationID后再去设置别名


(我的用户名) #3
public class MyReceiver extends BroadcastReceiver {
    private static final String TAG = "JPush";

    @Override
    public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
        Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));

        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
            String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
            //send the Registration Id to your server...
            Intent intentMsg = new Intent();  //Intent就是我们要发送的内容
            intentMsg.putExtra("regId", regId + "");
            intentMsg.setAction(ApiConstants.FLAG_PUSH_REGID); 
            context.sendBroadcast(intentMsg);


主页面

 mRegIdReceiveBroadcast = new RegIdReceiveBroadcast();
                IntentFilter filterReg = new IntentFilter();
                filter.addAction(ApiConstants.FLAG_PUSH_REGID); 
                registerReceiver(mRegIdReceiveBroadcast, filterReg);


 /**
     * 广播接收器
     *
     * @author admin
     */
    public class RegIdReceiveBroadcast extends BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            String regId = intent.getStringExtra("regId");
            /**
             * 判断极光注册是否成功
             */
            if (Utils.notEmpty(regId)) {
           
                    JPushInterface.setAliasAndTags(HomeActivity.this, UserPersist.getUserBean().pushId, null, mAliasCallback);
            
        }
    }

是这样吗


#4

具体代码你写了自己跑一下额


(我的用户名) #5

不行啊,其他时候都没问题,就新设备首次进入,收不到 啊


(我的用户名) #6

对了,有没有办法清理这个id,我已经把公司的设备都试了一遍了,得清理下才能再次测试了


#7

registrationID是要注册成功后才有数据的,所以能取得这个ID是成功的标志


1、监听这个广播,监听到了数据再做其他设置别名等操作,这个广播也只有第一次才有,以后要获取ID,要调用API去取
2、获取不到registrationID,就设定几秒后再获取一次,知道取成功
3、在获取的API 和init之间 留一点时间差

重置ID:


(我的用户名) #8

一台设备只能注册一个别名是吗,要是多注册几次,是不是最后新的覆盖了旧的,我这边发了一个通知,收到了两个,有没有可能是设置了两个别名


#9

一个设备只能设置一个别名,可以设置多个标签

收到两个消息,客户端打印出的msgid是否一样,iOS还是Android


(我的用户名) #10

我是安卓端,我用极光推送网站测试了一下,收到的EXTRA_NOTIFICATION_ID都不一致,我是做android的


#11

1、给我提供你的客户端日志
2、需要你确认msgid!
3、是否用了react 插件?检查是否创建了本地通知做了重复提醒


(我的用户名) #13

07-20 18:07:18.084 31166-31166/com.yooeee.yanzhengqi E/HomeActivity$2.handleMessage(L:177): pushId== TC0ptP7o
07-20 18:07:29.513 31166-31166/com.yooeee.yanzhengqi E/MyReceiver.onReceive(L:37): [MyReceiver] pushid msgId==: 20266198538681698
07-20 18:07:29.514 31166-31166/com.yooeee.yanzhengqi E/MyReceiver.onReceive(L:56): [MyReceiver] pushid EXTRA_NOTIFICATION_ID 接收到推送下来的通知的ID: 526058377

看下,我的在极光上发送的别名是 是63xI3CgK ,别名为 TC0ptP7o的手机收到了


#14

提供设备的registrationID


(我的用户名) #15

接收Registration Id : 13065ffa4e39d5e4307
是这样,我在两个别名之间切换设置,频繁切换了几次,然后在另一个别名下收到了不是这个别名的推送


#16

说明:A设备此时设置了A别名,推送消息设定的A,然后你马上切换为B别名,那么A还是会收到这条消息
也就是说:在推送消息的这个时间点你App是什么别名,他就能收到这个别名的消息

麻烦你要测试的时候确定好时间差,知道推送消息的此时App别名是什么,那么频繁切换干什么?


(我的用户名) #17

您好,想问下,杀死进程以后,推送就收不到了是怎么回事