虽然时间已经过去一段时间了,当初遇到这个问题的时候快疯了,因为真的很奇葩。其实具体的原因现在还是不是那么的确定,今天写下来一是为了纪念下当初的折磨,二是想询问下各位大神有没有知道准确的原因的。
事情是这个样子的,新升级了iOS9,安装新打包的app,发现,收到一条远程推送,会弹框两次<很快的>,响两次提示音。
然后展开调查,首先肯定是查资料啊。百度上没有,甚至都没有人问这个问题。google了一下,还真有那么一个人在发问,但是那个哥们没有解决。但是得到了一个信息就是,通知提醒类型设置成弹框模式就没有问题<收到一条推送,弹框一次,响一次>。
然后我就展开了各种尝试的历程。
1、首先尝试了一下,修改推送的样式
实验了一下,果然和网上说的一样,但是绝大多数的人不可能用这种提醒方式吧,来了一条推送,直接弹出一个警示框。所以还是不知道问题的所在。
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以上的就会有影响。
如有失误请各位路过大神即时指点,或有更好的做法,也请指点一二。