Il y a 2-3 raisons derrière cela.
- Firebase n'est pas configuré / initialisé à didFinishLaunchingWithOptions
- Le jeton FCM expire ou est invalide et l'observateur du jeton de rafraîchissement n'est pas ajouté
- Utilisation d'un GoogleService-Info.plist invalide/différent c'est-à-dire si vous utilisez 2 GoogleService-Info.plist dans le même projet pour le développement et la production. Assurez-vous donc que, au moment de l'installation de l'application, le bon GoogleService-Info.plist est pris en compte
pod 'Firebase/Messaging'
si vous utilisez également InAppMessagingDisplay, installez également ce pod
pod 'Firebase/InAppMessagingDisplay'
initialisation de Firebase à didFinishLaunchingWithOptions
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: CGRect(x: 0, y: 0, width: kDeviceWidth, height: kDeviceHeight))
FirebaseApp.configure()
NotificationCenter.default.addObserver(self, selector: #selector(tokenRefreshNotification), name: NSNotification.Name.InstanceIDTokenRefresh, object: nil)
Messaging.messaging().delegate = self
Messaging.messaging().shouldEstablishDirectChannel = true
UNUserNotificationCenter.current().delegate = self
if #available(iOS 10.0, *) {
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()
}
// [START refresh_token]
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String) {
//Vous sauvegardez ou envoyez le jeton FCM à votre serveur
}
//+++++++++++++++++++++++
// Le jeton FCM est rafraîchi
@objc func tokenRefreshNotification(_ notification: Notification) {
getFCMToken()
}
private func getFCMToken() {
InstanceID.instanceID().instanceID { (result, error) in
if error == nil {
if let result = result {
let fcmToken = result.token
//Sauvegardez ou envoyez à votre serveur
}
}
}
}
0 votes
J'ai le même problème. Avez-vous réussi à le résoudre?
0 votes
Oui mon problème a été résolu en ajoutant le pod étape 1 - #pod 'Firebase/InAppMessagingDisplay' étape 2 - Pod installer étape 3 - configurer firebase par le code Messaging.messaging (). shouldEstablishDirectChannel = vrai étape 3 - Supprimer l'application de l'iPhone et réinstaller - envoyer le jeton APNS à firebase