下午的時候,我們的測試環境一直接收不到APNS的訊息(早上的時候收到了兩條)。經過處理最後解決了問題,記錄下,其他碼龍朋友看到的話,也可以參考參考下。
具體有如下幾條來排除問題的方案:
1.首先確保開啟當前APP的訊息推送允許設定。(Iphone設定裡面開啟,允許APP接收推送訊息)
2. 列印下deviceToken看看是否有值,或者直接在下面註冊成功的函數裡面打個斷點,看程式進不進來,單步調試下。
(一般來說,只要deviceToken有值,就說明APNS已經註冊成功了。否則的話,要去研究並且添加下APNS註冊函數。
同時應該注意,有deviceToken返回,也不一定即時收到APNS的推送訊息(因為我們牛逼的greatewall,或者網路丟包)。多推幾條資訊,就可以收到,一般來說APNS到達率還是可以的。)
我的程式沒有deviceToken列印出來,在下面這個函數裡面打斷點也沒有進來。
3.確保當前登陸的手機號唯一登陸APP,一個手機號多個APP登陸的話,有可能也會收不到。
4.重新推出APP,重新登入下。(意味著重新註冊下APNS)
5.實在還是沒有deviceToken的話,把當前的APP刪除,重新裝一下。---我是用這種辦法,有了deviceToken,然後有了APNS的推送
註冊成功後,Apple會返回一個全球唯一的deviceToken給手機用戶端,然後通過下面的函數,就可以捕獲。
- (void)application:(UIApplication *)applicationdidRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ //發送token給服務端 if (deviceToken) { currentDeviceToken = [[[[deviceToken description]stringByReplacingOccurrencesOfString:@"<" withString:@""]stringByReplacingOccurrencesOfString:@">" withString:@""]stringByReplacingOccurrencesOfString:@" " withString:@""]; // UIAlertView *alterView = [[UIAlertView alloc] initWithTitle:@"" message:currentDeviceToken delegate:nil cancelButtonTitle:nil otherButtonTitles:@"確定", nil];// [alterView show]; NSLog(@"deviceToken:________%@",currentDeviceToken); }}
註冊失敗,會通過下面的函數來返回註冊失敗的錯誤原因
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ NSLog(@"註冊推送失敗:%@",error);}