0

Swift 3 IOS 10: J'ai recherché du code pour autoriser la notification push; Enfin, je pourrais trouver un précis utile de www.codementor.io. Cependant, je suis entré dans le puzzle. Je me demande si le code suivant fonctionnera avec la version inférieure ou plus récente d'iOS. Puisque Apple publiera sa version sans relâche, comment le code suivant sera capable de gérer les changements? Y a-t-il un moyen de régler le problème que j'ai mentionné?Autorisation des notifications push Contrôle de version

// iOS 10 support 

if #available(iOS 10, *) { 

UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in } 

application.registerForRemoteNotifications() 

} 

// iOS 9 support 

else if #available(iOS 9, *) { 

UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)) 

UIApplication.shared.registerForRemoteNotifications() 

} 

// iOS 8 support 

else if #available(iOS 8, *) { 

UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)) 

UIApplication.shared.registerForRemoteNotifications() 

} 

// iOS 7 support 

else { 

application.registerForRemoteNotifications(matching: [.badge, .sound, .alert]) 

} 
+0

Votre code est correct. Il suffit de combiner iOS 9, 8 et 7 en un seul bloc. iOS 10 dans un bloc séparé. – Basheer

+0

Si je le fais, que se passe-t-il si une nouvelle version d'iOS est utilisée, est-ce que ce code prendra effet? Merci pour votre réponse. –

+0

vous vérifiez la balise #available, qui vérifiera la version du système d'exploitation et exécutera le bloc. Depuis iOS 10 et jusqu'à présent (iOS 11), la classe UNUserNotification est toujours utilisée. Une fois que Apple a changé ce cadre, vous devez soutenir le nouveau cadre comme vous l'avez fait pour iOS 10. – Basheer

Répondre

0

Oui le code pour iOS fonctionnera 10 pour iOS 11 ainsi.

Fondamentalement, les #available macro vérifie l'OS minimum de sorte qu'il est aussi sûr de fusionner iOS 8 et 9.

//iOS 10+ 
if #available(iOS 10, *) { 
    UNUserNotificationCenter.current().requestAuthorization(options:[.badge, .alert, .sound]){ (granted, error) in 
     if (granted) { //check if authorization was granted before registering 
      application.registerForRemoteNotifications() 
     } 
    } 
} 

// iOS 8+ support 
else if #available(iOS 8, *) { 
    UIApplication.shared.registerUserNotificationSettings(UIUserNotificationSettings(types: [.badge, .sound, .alert], categories: nil)) 
    UIApplication.shared.registerForRemoteNotifications() 
} 

// iOS 7 support 
else { 
    application.registerForRemoteNotifications(matching: [.badge, .sound, .alert]) 
} 
0

Essayez ceci:

func setUpPushNotification(application: UIApplication) { 
     if #available(iOS 10.0, *) { 
     let notificationTypes: UNAuthorizationOptions = [.alert, .badge, .sound] 
     UNUserNotificationCenter.current().requestAuthorization(
      options: notificationTypes, 
      completionHandler: {_,_ in }) 
     // For iOS 10 display notification (sent via APNS) 
     UNUserNotificationCenter.current().delegate = self as? UNUserNotificationCenterDelegate 
     } 
     else{ 
      let notificationTypes: UIUserNotificationType = [.alert, .badge, .sound] 
      let pushNotificationSettings = UIUserNotificationSettings(types: notificationTypes, categories: nil) 
      application.registerUserNotificationSettings(pushNotificationSettings) 

     } 
      application.registerForRemoteNotifications() 
    } 
+0

Ce code peut-il être utilisé avec toutes les versions? –

0
if #available(iOS 10, *) 

se lit comme: si iOS de la version 10 ou supérieure est disponible .. Donc, si vous laissez votre code comme ça et que iOS 11, 12, etc arrive, ils vont tous dans cette branche if.

Votre code fonctionnera donc tant que l'API Push n'est pas modifiée. Si Apple change l'API à l'avenir (disons dans iOS 12) vous devrez ajouter une autre if-branche et re-soumettre votre application au magasin ...

(Si quelqu'un avec iOS 9 utilise votre application ils finira dans la deuxième branche if - parce que le premier ne s'applique pas.Par conséquent, l'ordre du if s garantit que la version iOS inférieure obtenir le bon code.)