美文网首页iOS 坑的集中营iOS开发移动开发
iOS9收到一条远程推送,弹框两次,提醒声响两次

iOS9收到一条远程推送,弹框两次,提醒声响两次

作者: 踩坑小分队 | 来源:发表于2016-10-14 14:47 被阅读2786次

    虽然时间已经过去一段时间了,当初遇到这个问题的时候快疯了,因为真的很奇葩。其实具体的原因现在还是不是那么的确定,今天写下来一是为了纪念下当初的折磨,二是想询问下各位大神有没有知道准确的原因的。

    事情是这个样子的,新升级了iOS9,安装新打包的app,发现,收到一条远程推送,会弹框两次<很快的>,响两次提示音。
    然后展开调查,首先肯定是查资料啊。百度上没有,甚至都没有人问这个问题。google了一下,还真有那么一个人在发问,但是那个哥们没有解决。但是得到了一个信息就是,通知提醒类型设置成弹框模式就没有问题<收到一条推送,弹框一次,响一次>。
    然后我就展开了各种尝试的历程。
    1、首先尝试了一下,修改推送的样式


    修改提醒样式.png

    实验了一下,果然和网上说的一样,但是绝大多数的人不可能用这种提醒方式吧,来了一条推送,直接弹出一个警示框。所以还是不知道问题的所在。
    2、这个时候想到可能和我们的app使用了两种推送有关系<信鸽推送+环信的远程推送>。
    这里就不说当初怎么一点点试到那个方法了,大家都知道在做远程推送的功能的时候要写这么几句话,注册推送。

    // 注册推送
    - (void)registerRemoteNotification{
        UIApplication *application = [UIApplication sharedApplication];
        application.applicationIconBadgeNumber = 0;
        
        if([application respondsToSelector:@selector(registerUserNotificationSettings:)])
        {
            UIUserNotificationType notificationTypes = UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert;
            UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:notificationTypes categories:nil];
            [application registerUserNotificationSettings:settings];
        }
        
    #if !TARGET_IPHONE_SIMULATOR
        //iOS8 注册APNS
        if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
            [application registerForRemoteNotifications];
        }else{
            UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge |
            UIRemoteNotificationTypeSound |
            UIRemoteNotificationTypeAlert;
            [[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
        }
    #endif
    }
    

    因为我这边是两个远程推送,所以这个方法调用了两次。
    我感觉问题就出在了这里。我把信鸽的注册注册的方法干掉,恢复正常。
    测试的相关的场景如下:

    场景1:两种远程推送<信鸽+环信>,把app卸掉,然后去登录,会设置两次弹窗监听方式,然后进行推送消息,会收到两次提醒,一次推送。

    场景2:紧接着场景一把信鸽设置弹窗监听方式干掉,这样信鸽就不会有相关的监听,但是依旧收到两次提醒,一次推送。

    场景3:卸掉app,把信鸽设置监听方式干掉的代码干掉,信鸽不会设置弹窗监听的方式,登录,进行推送,会收到一次提醒,一次推送

    场景4:紧接着场景三,把信鸽注册推送代码打开,登录推送消息,收到一条推送,一次提醒。

    也就是说当app第一次安装的时候,第一次运行设置两次弹窗方式,在iOS9中就会标记下两次,所以当有来推送消息的时候会弹两次,但是只收到一条消息。但是当第一次设置一次,后面随便怎么设置都没有问题。

    以上只是推测后修改的代码,多次实验,当第一次运行的时候不设置信鸽弹窗监听,以后该怎么设置怎么设置。结果就是,环信的远程推送和信鸽的远程推送都收到一次推送一次提醒。这样做也不会导致有一方受到意外而收不到,即使是有意外,下次自动登录的时候也会自动的添加各自的监听而相互不受影响.。
    但是之前的iOS9的安装的用户改变不了了。这种现象也不是很有规律,实验机型中iPone5S 系统9.1一点影响也没有,但是6 6P的iOS9以上的就会有影响。

    如有失误请各位路过大神即时指点,或有更好的做法,也请指点一二。

    相关文章

      网友评论

        本文标题:iOS9收到一条远程推送,弹框两次,提醒声响两次

        本文链接:https://www.haomeiwen.com/subject/jxngyttx.html