Profil de développement et de version de Firebase Cloud Messaging

Je suis passé de Google Cloud Messaging à Firebase Cloud Messaging.

Avec GCM, j'ai dû choisir l'option sandbox. Comme décrit ici: https://developers.google.com/cloud-messaging/ios/client#obtain_a_registration_token voir point 3.

Pour recevoir des notifications push en mode debugging, je devais faire quelque chose comme ça

[[GGLInstanceID sharedInstance] startWithConfig:instanceIDConfig]; _registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, kGGLInstanceIDAPNSServerTypeSandboxOption:@YES}; 

Pour recevoir des notifications push dans une App de l'AppStore (par exemple TestFlight), je devais dire:

 kGGLInstanceIDAPNSServerTypeSandboxOption:@NO}; 

Maintenant, je ne peux pas find quelque chose comme ça dans Firebase. J'ai d'abord pensé que je ne pouvais plus changer ces valeurs stupides. Mais maintenant, je ne reçois plus de notifications push dans mes applications TestFlight.

Dans ma console de debugging lorsque je débogue sur l'appareil, une sortie est comme ceci:

 <FIRInstanceID/WARNING> APNS Environment in profile: development 

Ce qui est bon pour le debugging local, mais indésirable dans TestFlight. (Je ne sais pas si cela arrive pour les applications TestFlight, car je n'ai pas de console pour eux.)

Donc ma question est: Est-ce que quelqu'un sait si je peux modifier manuellement cette option Sandbox dans Firebase de toute façon?

Merci,

Simon

J'ai résolu le problème en ajoutant le code ci-dessous au projet.

FIRInstanceIDAPNSTokenType.Sandbox sera utilisé lorsque vous installerez l'application via TestFlight,
et FIRInstanceIDAPNSTokenType.Prod lorsque votre application est en ligne sur l'App Store.

 func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Prod) } 

J'ai suivi la documentation fournie et j'avais le même problème, puis j'ai essayé l'application de démarrage rapide et cela a fonctionné. La key semble être d'append la logique pour se connecter au FCM après l'obtention d'un jeton, cette étape est manquante dans la documentation d'installation. Après avoir fait cela, cela a fonctionné sur mon périphérique de développement en dehors de TestFlight sans aucun autre commutateur sandbox spécial.

https://github.com/firebase/quickstart-ios/blob/master/messaging/FCM/AppDelegate.m#L85

 // [START refresh_token] - (void)tokenRefreshNotification:(NSNotification *)notification { // Note that this callback will be fired everytime a new token is generated, including the first // time. So if you need to resortingeve the token as soon as it is available this is where that // should be done. NSSsortingng *refreshedToken = [[FIRInstanceID instanceID] token]; NSLog(@"InstanceID token: %@", refreshedToken); // Connect to FCM since connection may have failed when attempted before having a token. [self connectToFcm]; // TODO: If necessary send token to appliation server. } // [END refresh_token] // [START connect_to_fcm] - (void)connectToFcm { [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) { if (error != nil) { NSLog(@"Unable to connect to FCM. %@", error); } else { NSLog(@"Connected to FCM."); } }]; } // [END connect_to_fcm] - (void)applicationDidBecomeActive:(UIApplication *)application { [self connectToFcm]; } // [START disconnect_from_fcm] - (void)applicationDidEnterBackground:(UIApplication *)application { [[FIRMessaging messaging] disconnect]; NSLog(@"Disconnected from FCM"); } // [END disconnect_from_fcm] 

Il s'agit de la fonction setAPNSToken() . Vous devez définir FIRInstanceIDAPNSTokenType sur Prod lors de l'ajout du jeton de périphérique. J'utilise swift pour ça, le code que j'ai utilisé est celui-ci:

 func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) { FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Prod) } 

si vous souhaitez simplement supprimer l'avertissement, vous pouvez utiliser un profil d'approvisionnement de production.

Soyez prudent, utilisez ci-dessous:

  #if DEBUG FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .sandbox) #else FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .prod) #endif 

Ne définissez pas inutilement le jeton sandbox pour le type prod et vice versa.