2017-09-21 4 views
1

C'est la première fois que je travaille sur Firebase en raison d'une exigence du backend, alors laissez-moi savoir si vous ne comprenez pas la question ou si elle ne l'est pas. ne veut rien dire.

Ce que je veux réaliser, c'est que j'ai besoin d'un Registration_ID qui est le jeton FCM lorsque l'utilisateur s'enregistre. Voilà donc comment je la mise en œuvre dans AppDelegate.swift>didFinishLaunchingWithOptionsComment obtenir un jeton FCM lorsque l'utilisateur a refusé l'accès pour autoriser les notifications

if #available(iOS 10.0, *) { 
      // For iOS 10 display notification (sent via APNS) 
      UNUserNotificationCenter.current().delegate = self 

      let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound] 
      UNUserNotificationCenter.current().requestAuthorization(
       options: authOptions, 
       completionHandler: {_, _ in }) 
     } else { 
      let settings: UIUserNotificationSettings = 
       UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil) 
      application.registerUserNotificationSettings(settings) 
     } 

     application.registerForRemoteNotifications() 

Après que AppDelegate.swift j'ai ajouté ces trois fonctions:

func application(_ application: UIApplication, 
        didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { 
     Messaging.messaging().apnsToken = deviceToken as Data 
    } 

    func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) { 
     print("Firebase registration token: \(fcmToken)") 
    } 

    func application(application: UIApplication, 
        didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { 
     Messaging.messaging().apnsToken = deviceToken as Data 
    } 

Non le problème est que quand il demande la permission de notification et l'utilisateur nient alors comment je vais obtenir FCM que je vais envoyer au backend lorsque l'utilisateur s'inscrire ou se connecter.

+0

pas possible d'obtenir jeton si l'autorisation est pas correctement réglée. –

Répondre

1

Si l'utilisateur n'accorde pas l'autorisation, vous ne pourrez pas envoyer de notification push. 3ème partie que vous utilisez ne peux pas changer cette autorisation (amazon, firebase). Pour la messagerie cloud Firebase, l'autorisation de notification Push est indispensable.

+0

Je comprends cela. Alors que dois-je faire si j'ai encore besoin de jeton? L'utilisateur ne recevra pas les notifications mais j'ai toujours besoin d'un jeton de rappel que vous pouvez dire. –

0

Un jeton FCM est généré indépendamment de la réponse de l'utilisateur à la demande d'autorisation - si la réponse est suffisamment longue, le jeton FCM sera généré avant que la réponse ne soit donnée.

Les notifications ne fonctionneront pas tant que l'utilisateur n'aura pas donné son autorisation mais que la génération du jeton FCM ne dépend pas de l'obtention de l'autorisation.

Veuillez noter: Je n'ai trouvé cela documenté nulle part, mais grâce à mes propres tests. J'ai testé sur iOS 10.3.1 et 11.0.

La première fois que le jeton est généré le didRefreshRegistrationToken de délégué Messaging est appelé, je soupçonne que le problème est que vous avez pas encore défini le délégué avec

Messaging.messaging().delegate = self