55 votes

Notification Push problème avec iOS 10

J'ai développé une application que j'ai mis en place de notifications push. Actuellement, il est en direct sur l'apple store. Jusqu'à iOS 9 push fonctionne bien mais après iOS 10 il n'est pas de travail.

Quel est le problème avec le code?

117voto

Ashish Shah Points 2022

Pour iOS 10 à l'aide de xCode 8 GM.

J'ai résolu mon problème avec les étapes suivantes à l'aide de xCode pour iOS 8 GM 10:

1) Dans les cibles, en vertu de Capacités d'activer les Notifications Push pour ajouter des Notifications Push Droits.

2) Mettre En Œuvre UserNotifications.cadre de votre application. Importation UserNotifications.cadre dans votre AppDelegate.

#import <UserNotifications/UserNotifications.h>
@interface AppDelegate : UIResponder   <UIApplicationDelegate,UNUserNotificationCenterDelegate>

@end

3) Dans didFinishLaunchingWithOptions méthode attribuer UIUserNotificationSettings et de mettre en oeuvre UNUserNotificationCenter délégué.

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

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{

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];
         }
     }];  
}

return YES;
}

4) Maintenant, enfin, de mettre en œuvre ces deux délégué méthodes.

//============Pour iOS 10=============

-(void)userNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler{

    //Called when a notification is delivered to a foreground app. 

    NSLog(@"Userinfo %@",notification.request.content.userInfo);

    completionHandler(UNNotificationPresentationOptionAlert);
}

-(void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void(^)())completionHandler{

   //Called to let your app know which action was selected by the user for a given notification.

   NSLog(@"Userinfo %@",response.notification.request.content.userInfo);

}

S'il vous plaît rester le code tel qu'il est que vous utilisez pour iOS 9, Seulement ajouter des lignes de code à l'appui de notification Push pour iOS 10 à l'aide de UserNotifications.cadre.

24voto

AiOsN Points 967

Tout fonctionnait bien avant iOS 10, Dans mon cas, les capacités des paramètres de l'origine de ce problème.

Il doit être allumé pour que la notification push.

enter image description here

18voto

jakedunc Points 652

J'ai eu un problème avec iOS 10 silencieuse de notifications push. Dans iOS9 et plus tôt, l'envoi d'une notification push qui avaient des champs de données supplémentaires, mais avait un vide aps d'attribut dans les données a bien fonctionné. Mais dans iOS10 une notification push avec un vide aps attribut n'est pas de frapper la didReceiveRemoteNotification délégué d'application de la méthode, ce qui signifie que tous mes silencieux push notifications (notifications que nous venons d'utiliser en interne pour déclencher des actions, tandis que l'application est ouverte) a cessé de fonctionner en iOS10.

J'ai été en mesure de résoudre ce sans pousser une mise à jour de mon application par l'ajout d'au moins un attribut de l' aps le cadre de la notification, dans mon cas, j'ai juste ajouté badge: 0 et mon silence notifications push commencé à travailler à nouveau dans iOS 10. J'espère que cela aide quelqu'un d'autre!

7voto

Lucho Points 779

La swift 3 version de @Ashish Shah code est:

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

//notifications
        if #available(iOS 10.0, *) {
            let center  = UNUserNotificationCenter.current()
            center.delegate = self
            center.requestAuthorization(options: [.sound, .alert, .badge]) { (granted, error) in
                if error == nil{
                    UIApplication.shared.registerForRemoteNotifications()
                }
            }
        } else {
            // Fallback on earlier versions
        }

        return true
    }
    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {

    }

    @available(iOS 10.0, *)
    func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {

    }

0voto

Ashkan Ghodrat Points 316

N'oubliez pas, lors de l'essai, vous devez utiliser sandbox adresse pour vos notifications de travail.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X