web-dev-qa-db-fra.com

Comment gérer les notifications Push en arrière-plan dans ios 10?

Je ne gère pas la notification Push en arrière-plan.

Pour gérer la notification Push en arrière-plan, suivez les étapes ci-dessous: -

  1. Dans Fonctions -> Activer la notification à distance.
  2. Dans Fonctions -> Mode d'arrière-plan -> Activer les notifications à distance.
  3. Dans didFinishLaunchingWithOptions, donnez toutes les autorisations pour iOS 10.
  4. Pour les notifications Push utilisées UNUserNotificationCenter.
  5. L'application au premier plan, puis la notification Push fonctionne correctement et en dessous de l'appel de méthode:

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

Mais mon problème est app en arrière-plan, alors n'appelle aucune méthode. Si quelqu'un a une idée ou une solution pour gérer les notifications Push en arrière-plan pour iOS 10, aidez-moi, s'il vous plaît.

Merci.

7
Divya Patel

willPresentNotification est appelé lorsque l'application est au premier plan. Regardez leur documentation

 - (void)userNotificationCenter:(UNUserNotificationCenter *)center
       willPresentNotification:(UNNotification *)notification
         withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
    // The method will be called on the delegate only if the application is in the foreground.
    // If the method is not implemented or the handler is not called in a timely manner then the notification will not be presented.
    // The application can choose to have the notification presented as a sound, badge, alert and/or in the notification list.
    // This decision should be based on whether the information in the notification is otherwise visible to the user.

}

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
didReceiveNotificationResponse:(UNNotificationResponse *)response
         withCompletionHandler:(void(^)())completionHandler {
    // The method will be called on the delegate when the user responded to the notification by opening the application,
    // dismissing the notification or choosing a UNNotificationAction.
    // The delegate must be set before the application returns from applicationDidFinishLaunching:.

}

Essayez de vous enregistrer didReceiveNotificationResponse, vous obtiendrez ce dont vous avez besoin.

AUSSISi besoin d'extraire des données ou un traitement, Activer l'extraction en arrière-plan en mode arrière-plan et utiliser la méthode ci-dessous

-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(nonnull void (^)(UIBackgroundFetchResult))completionHandler{

    completionHandler(UIBackgroundFetchResultNewData);
}

Traitement d'APNS sur la base des états d'application

   if(application.applicationState == UIApplicationStateInactive)
     {
        /* 
        # App is transitioning from background to foreground (user taps notification), do what you need when user taps here!
         */    
    }
    else if(application.applicationState == UIApplicationStateActive)
    {
        /*
         # App is currently active, can update badges count here
       */
    }
    else if(application.applicationState == UIApplicationStateBackground)
    {
        /* # App is in background, if content-available key of your notification is set to 1, poll to your backend to retrieve data and update your interface here */
    }
6
Abhishek Thapliyal

Lorsqu'une notification Push contenant la clé alert est reçue, iOS présentera la notification à l'utilisateur. Si l'utilisateur interagit avec l'alerte, votre application sera lancée en mode avant-plan.

Les notifications silencieuses sont des notifications Push contenant la clé content-available. Ces notifications sont non présentées à l'utilisateur et ne peuvent pas contenir les clés alert, sound ou badge. Lorsque iOS envoie une notification silencieuse, votre application est lancée en mode arrière-plan. L'application peut effectuer une quantité de travail très limitée en arrière-plan en réponse à la notification silencieuse.

Une notification silencieuse ressemble à ceci:

{
    "aps" : {
        "content-available" : 1
    },
    "com.yourcompany.something.something" : "something"
}

Lors de la livraison, la méthode de délégation d'application application:didReceiveRemoteNotification:fetchCompletionHandler: est appelée. Votre implémentation de cette méthode a 30 secondes pour appeler le bloc passé dans le paramètre fetchCompletionHandler.

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {  
    completionHandler(UIBackgroundFetchResultNoData);
    return;
}
1
quellish

C'était la solution pour moi: 

{  
    "aps" : {  
        "content-available" : 1  
    },  
    "acme1" : "bar",  
    "acme2" : 42  
}  

Ce qui est important est de mettre le contenu à la disposition de 1.

1
ΩlostA