雖然時(shí)間已經(jīng)過(guò)去一段時(shí)間了炕婶,當(dāng)初遇到這個(gè)問(wèn)題的時(shí)候快瘋了姐赡,因?yàn)檎娴暮芷孑狻F鋵?shí)具體的原因現(xiàn)在還是不是那么的確定柠掂,今天寫下來(lái)一是為了紀(jì)念下當(dāng)初的折磨项滑,二是想詢問(wèn)下各位大神有沒有知道準(zhǔn)確的原因的。
事情是這個(gè)樣子的涯贞,新升級(jí)了iOS9枪狂,安裝新打包的app,發(fā)現(xiàn)宋渔,收到一條遠(yuǎn)程推送州疾,會(huì)彈框兩次<很快的>,響兩次提示音惠昔。
然后展開調(diào)查矛市,首先肯定是查資料啊。百度上沒有饥努,甚至都沒有人問(wèn)這個(gè)問(wèn)題氧急。google了一下颗胡,還真有那么一個(gè)人在發(fā)問(wèn),但是那個(gè)哥們沒有解決吩坝。但是得到了一個(gè)信息就是毒姨,通知提醒類型設(shè)置成彈框模式就沒有問(wèn)題<收到一條推送,彈框一次钉寝,響一次>手素。
然后我就展開了各種嘗試的歷程。
1瘩蚪、首先嘗試了一下泉懦,修改推送的樣式
實(shí)驗(yàn)了一下,果然和網(wǎng)上說(shuō)的一樣疹瘦,但是絕大多數(shù)的人不可能用這種提醒方式吧崩哩,來(lái)了一條推送,直接彈出一個(gè)警示框。所以還是不知道問(wèn)題的所在邓嘹。
2酣栈、這個(gè)時(shí)候想到可能和我們的app使用了兩種推送有關(guān)系<信鴿推送+環(huán)信的遠(yuǎn)程推送>。
這里就不說(shuō)當(dāng)初怎么一點(diǎn)點(diǎn)試到那個(gè)方法了汹押,大家都知道在做遠(yuǎn)程推送的功能的時(shí)候要寫這么幾句話矿筝,注冊(cè)推送。
// 注冊(cè)推送
- (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 注冊(cè)APNS
if ([application respondsToSelector:@selector(registerForRemoteNotifications)]) {
[application registerForRemoteNotifications];
}else{
UIRemoteNotificationType notificationTypes = UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert;
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:notificationTypes];
}
#endif
}
因?yàn)槲疫@邊是兩個(gè)遠(yuǎn)程推送棚贾,所以這個(gè)方法調(diào)用了兩次窖维。
我感覺問(wèn)題就出在了這里。我把信鴿的注冊(cè)注冊(cè)的方法干掉妙痹,恢復(fù)正常铸史。
測(cè)試的相關(guān)的場(chǎng)景如下:
場(chǎng)景1:兩種遠(yuǎn)程推送<信鴿+環(huán)信>,把a(bǔ)pp卸掉,然后去登錄怯伊,會(huì)設(shè)置兩次彈窗監(jiān)聽方式琳轿,然后進(jìn)行推送消息,會(huì)收到兩次提醒耿芹,一次推送崭篡。
場(chǎng)景2:緊接著場(chǎng)景一把信鴿設(shè)置彈窗監(jiān)聽方式干掉,這樣信鴿就不會(huì)有相關(guān)的監(jiān)聽吧秕,但是依舊收到兩次提醒琉闪,一次推送。
場(chǎng)景3:卸掉app寇甸,把信鴿設(shè)置監(jiān)聽方式干掉的代碼干掉塘偎,信鴿不會(huì)設(shè)置彈窗監(jiān)聽的方式,登錄拿霉,進(jìn)行推送吟秩,會(huì)收到一次提醒,一次推送
場(chǎng)景4:緊接著場(chǎng)景三绽淘,把信鴿注冊(cè)推送代碼打開涵防,登錄推送消息,收到一條推送沪铭,一次提醒壮池。
也就是說(shuō)當(dāng)app第一次安裝的時(shí)候,第一次運(yùn)行設(shè)置兩次彈窗方式杀怠,在iOS9中就會(huì)標(biāo)記下兩次椰憋,所以當(dāng)有來(lái)推送消息的時(shí)候會(huì)彈兩次,但是只收到一條消息赔退。但是當(dāng)?shù)谝淮卧O(shè)置一次橙依,后面隨便怎么設(shè)置都沒有問(wèn)題证舟。
以上只是推測(cè)后修改的代碼,多次實(shí)驗(yàn)窗骑,當(dāng)?shù)谝淮芜\(yùn)行的時(shí)候不設(shè)置信鴿彈窗監(jiān)聽女责,以后該怎么設(shè)置怎么設(shè)置。結(jié)果就是创译,環(huán)信的遠(yuǎn)程推送和信鴿的遠(yuǎn)程推送都收到一次推送一次提醒抵知。這樣做也不會(huì)導(dǎo)致有一方受到意外而收不到,即使是有意外软族,下次自動(dòng)登錄的時(shí)候也會(huì)自動(dòng)的添加各自的監(jiān)聽而相互不受影響.刷喜。
但是之前的iOS9的安裝的用戶改變不了了。這種現(xiàn)象也不是很有規(guī)律互订,實(shí)驗(yàn)機(jī)型中iPone5S 系統(tǒng)9.1一點(diǎn)影響也沒有吱肌,但是6 6P的iOS9以上的就會(huì)有影響痘拆。
如有失誤請(qǐng)各位路過(guò)大神即時(shí)指點(diǎn)仰禽,或有更好的做法,也請(qǐng)指點(diǎn)一二纺蛆。