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: -
UNUserNotificationCenter
.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.
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 */
}
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;
}
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.