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?
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?
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.
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!
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) {
}
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.