2016-09-15 84 views
6

我的應用程序在Appstore中。推送通知在iOS 9中工作正常,但在iOS 10中無法正常工作。我沒有收到iOS 10設備的任何推送通知。我檢查了服務器中的設備令牌和證書。全部正確。我還檢查了設置應用中的通知屬性。一切都很好。但我沒有收到任何通知。我只是關閉和打開我的應用程序的通知。我打開我的應用程序來檢查設備令牌是否正在更改。它被更改並更新到我的服務器。然後我正確地收到通知。現在對我的設備工作正常。推送通知不在iOS中接收10

我擔心這是否會影響所有用戶或只有我。任何人都可以找到合適的解決方案,請告訴我

在此先感謝

+0

嘗試這種類型的代碼:http://stackoverflow.com/questions/39382852/didreceiveremotenotification-not-called- ios-10/39383027#39383027 –

+0

我檢查了以前的解決方案。但我的應用沒有iOS 10 SDK。那麼它應該如何影響iOS 10。 –

+0

您正在下載或升級您的xcode 8可能會升級xcode。 –

回答

7

需要在Xcode 8 GM 您需要實現UserNotification.framework和他們的代表的方法來獲取推送通知的工作的一些變化對iOS的10。

我已使用新的UserNotification.framework解決了我的問題。 請點擊此鏈接:Push notification issue with iOS 10

+0

但它不適用於已經在AppStore中的Apps。 –

+0

面臨同樣的問題。所以我已經使用xCode 8 GM for iOS 10將我的應用程序重新提交給Appstore。 –

+0

@AshishShah無需實施'UserNotification'。它仍然可以通過'UIUserNotificationSettings'完成。您只需啓用推送通知的功能,即可在您的項目中創建一個'.entitlement'文件。 –

3

我們需要改變一些代碼爲iOS 10.

Appdelegate.h

#import <UserNotifications/UserNotifications.h> 

@interface AppDelegate : UIResponder <UIApplicationDelegate,UNUserNotificationCenterDelegate> 
@end 

檢查操作系統版本

#define SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending) 

註冊通知

- (void)registerForRemoteNotifications { 
    if(SYSTEM_VERSION_GRATERTHAN_OR_EQUALTO(@"10.0")){ 
     UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter]; 
     center.delegate = self; 
     [center requestAuthorizationWithOptions:(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge) completionHandler:^(BOOL granted, NSError * _Nullable error){ 
      if(!error){ 
       [[UIApplication sharedApplication] registerForRemoteNotifications]; 
      } 
     }]; 
    } 
    else { 
     // Code for old versions 
    } 
} 

亨德爾的委託方法

//foreground app. 
-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{ 
    NSLog(@"User Info : %@",notification.request.content.userInfo); 
    completionHandler(UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionBadge); 
} 

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{ 
    NSLog(@"User Info : %@",response.notification.request.content.userInfo); 
    completionHandler(); 
} 
+1

不需要,我們仍然可以在iOS 10中使用相同的'UIUserNotification'。唯一的區別是在功能中添加推送通知權利 –

1

在iOS上10是根據需要添加推送通知的權利,所以如果你在能力問題會自動解決「解決問題」。

5

UserNotifications」在iOS10中不是強制性的。 「UIUserNotificationSettings」仍然適用於iOS10。

如果您有以下代碼,它應該在iOS10中工作。

[[UIApplication sharedApplication] registerUserNotificationSettings:settings]; 

但如果你用Xcode8及以上的建設,可以確保你有你的權利以下條目。當您在「功能」中啓用「推送通知」後,此條目將自動添加。

<key>aps-environment</key> 
<string>development</string> 

在釋放分佈構建這將自動更改爲 以下

<key>aps-environment</key> 
<string>production</string>