La nuit dernière, j'ai testé la notification push en utilisant FCM dans mes applications et il est tombé en panne (il fonctionnait il y a quelques jours). Je l'ai testé en utilisant le menu de notification dans la console Firebase. J'étudie en outre le format de la charge utile de notification a été modifié et n'inclut pas le format iOS comme le Apple Documentation.Firebase Cloud Messaging Notification n'envoie pas de format de charge utile iOS
Je re-vérifier mon certificat APNs et le développement était parti, j'essaye de re-télécharger le certificat et il a obtenu l'erreur semblable like this one.
J'ai soumis un commentaire à l'équipe Firebase et j'ai dit que c'était un problème à leur fin. (Note: je poste également la réponse de l'équipe Firebase dans le lien ci-dessus). Mon certificat Dev APNs est de retour, mais le format reste le même.
est ici la charge utile je suis arrivé (de la fonction Swift Imprimer)
{
"collapse_key" = "com.xxx.xxx";
from = xxx;
notification = {
badge = 3;
body = "Firebase console";
e = 1;
title = Test;
};
}
Et cette charge font iOS ne sera pas afficher la notification push.
Et sur la base this FCM documentation for iOS
le code suivant fera l'application plantait lors de la notification venir
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject],
fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// Print message ID.
print("Message ID: \(userInfo["gcm.message_id"]!)")
// Print full message.
print("%@", userInfo)
}
- J'essaie déjà de re-télécharger mon certificat Dev APNs mais l'erreur
- J'ai aussi envoyer un autre commentaire mais l'équipe Firebase ne répond pas encore
Ai-je raté quelque chose?
Edit:
Comme je l'ai dit ci-dessus, il a été travaux il y a quelques jours, et il devient plantage lors this issue apparaît. En particulier, cette ligne va faire planter l'application, et je suppose que c'est parce que le format de la charge utile a changé (la charge utile aps est manquante).
print("Message ID: \(userInfo["gcm.message_id"]!)")
Le code fonctionne bien lorsque l'enlever (et produire ci-dessus), mais je ne suis pas le format de la charge utile aps si la notification ne sera jamais pop lorsque les applications en arrière-plan. Aussi mon gestionnaire de notification ne fonctionnera pas lorsque les applications en premier plan.
Edit 2:
J'enregistre déjà une notification dans mon AppDelegate
let setting = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge] , categories: nil)
application.registerUserNotificationSettings(setting)
application.registerForRemoteNotifications()
Je suis conscient de cela et déjà permis notification Push et en arrière-plan de la notification à distance.
Modifier 28 Juin 2016:
J'ai essayé de pousser à nouveau la notification de la console firebase, et encore je le même format de charge utile comme celui-ci
%@ [notification: {
badge = 2;
body = "Test Message";
e = 1;
sound = default;
sound2 = default;
title = Test;
}, collapse_key: com.xxx, from: 717xxxxxx]
Ma FCM Firebase Console Le réglage ressemble à ceci:
Modifier 8 Juillet 2016:
Ceci est mon code AppDelegate
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Firebase
let setting = UIUserNotificationSettings(forTypes: [.Sound, .Alert, .Badge] , categories: nil)
application.registerUserNotificationSettings(setting)
application.registerForRemoteNotifications()
FIRApp.configure()
print(FIRInstanceID.instanceID().token())
FIRAnalytics.logEventWithName(kFIREventAppOpen, parameters: nil)
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(tokenRefreshNotificaiton), name: kFIRInstanceIDTokenRefreshNotification, object: nil)
return true
}
// MARK - Firebase
func connectToFcm() {
FIRMessaging.messaging().connectWithCompletion { (error) in
if (error != nil) {
print("Unable to connect with FCM. \(error)")
} else {
print("Connected to FCM.")
}
}
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject]) {
// If you are receiving a notification message while your app is in the background,
// this callback will not be fired till the user taps on the notification launching the application.
// TODO: Handle data of notification
// Print message ID.
// print("Message ID: \(userInfo["gcm.message_id"]!)")
// Print full message.
print("%@", userInfo)
var body = ""
var title = "20Fit"
guard let aps = userInfo["aps"] as? [String : AnyObject] else {
print("Error parsing aps")
return
}
if let alert = aps["alert"] as? String {
body = alert
} else if let alert = aps["alert"] as? [String : String] {
body = alert["body"]!
title = alert["title"]!
}
let banner = Banner(title: title, subtitle: body, image: nil, backgroundColor: UIColor.blackColor(), didTapBlock: nil)
banner.show(duration: 5.0)
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .Sandbox)
}
func tokenRefreshNotificaiton(notification: NSNotification) {
let refreshedToken = FIRInstanceID.instanceID().token()!
print("InstanceID token: \(refreshedToken)")
sendTokenToServer()
// Connect to FCM since connection may have failed when attempted before having a token.
connectToFcm()
}
func applicationWillResignActive(application: UIApplication) {
// Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.
// Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.
}
func applicationDidEnterBackground(application: UIApplication) {
// Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.
// If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.
FIRMessaging.messaging().disconnect()
print("Disconnected from FCM")
}
func applicationWillEnterForeground(application: UIApplication) {
// Called as part of the transition from the background to the active state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(application: UIApplication) {
connectToFcm()
// Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
}
func applicationWillTerminate(application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
FIRAnalytics.logEventWithName("app_terminated", parameters: nil)
}
}
Voici le journal complet de mes applications
2016-07-08 19:26:48.022 20FIT Member[2525:1122556] WARNING: Firebase Analytics App Delegate Proxy is disabled. To log deep link campaigns manually, call the methods in FIRAnalytics+AppDelegate.h.
2016-07-08 19:26:48.273 20FIT Member[2525:1122556] Configuring the default app.
2016-07-08 19:26:48.318 20FIT Member[2525:] <FIRAnalytics/DEBUG> Debug mode is on
2016-07-08 19:26:48.338 20FIT Member[2525:] <FIRAnalytics/INFO> Firebase Analytics v.3200000 started
2016-07-08 19:26:48.338 20FIT Member[2525:] <FIRAnalytics/INFO> To enable debug logging set the following application argument: -FIRAnalyticsDebugEnabled (see google link)
2016-07-08 19:26:48.343: <FIRInstanceID/WARNING> Failed to fetch APNS token Error Domain=com.firebase.iid Code=1001 "(null)"
2016-07-08 19:26:48.350: <FIRMessaging/INFO> FIRMessaging library version 1.1.0
2016-07-08 19:26:48.339 20FIT Member[2525:] <FIRAnalytics/DEBUG> Debug logging enabled
2016-07-08 19:26:48.365 20FIT Member[2525:] <FIRAnalytics/DEBUG> Uploading data. Host: https://play.googleapis.com/log
2016-07-08 19:26:48.366 20FIT Member[2525:] <FIRAnalytics/DEBUG> Firebase Analytics is monitoring the network status
Optional("cXwsIWfiJas:APA91bGjUnL-oztH9LntO4EaKdJxPQN_-Za5ydC-hPR-_HPZXNm4m_mzqSztvbBG7HczNN5Jr7Btr8h4ETF5FyOOUn8Ombk4c3RoTL6GDFrh6BnG0ECs_r_Hqx1dnVHeJVwLQo4JInn2")
2016-07-08 19:26:48.406 20FIT Member[2525:] <FIRAnalytics/DEBUG> Successfully parsed a configuration. Version: 1464617411301000
2016-07-08 19:26:48.429 20FIT Member[2525:] <FIRAnalytics/DEBUG> Firebase Analytics is ready to receive events
2016-07-08 19:26:48.432 20FIT Member[2525:] <FIRAnalytics/DEBUG> No network. Upload task will not be scheduled
2016-07-08 19:26:48.434 20FIT Member[2525:] <FIRAnalytics/DEBUG> Cancelling background upload task.
2016-07-08 19:26:48.437 20FIT Member[2525:] <FIRAnalytics/DEBUG> Scheduling user engagement timer
2016-07-08 19:26:48.438 20FIT Member[2525:] <FIRAnalytics/DEBUG> Timer scheduled to fire in approx. (s): 3600
2016-07-08 19:26:48.441 20FIT Member[2525:] <FIRAnalytics/INFO> Firebase Analytics enabled
2016-07-08 19:26:48.445 20FIT Member[2525:] <FIRAnalytics/DEBUG> Logging event: origin, name, params: app, app_open, {
"_o" = app;
}
2016-07-08 19:26:48.477 20FIT Member[2525:] <FIRAnalytics/DEBUG> Scheduling user engagement timer
2016-07-08 19:26:48.478 20FIT Member[2525:] <FIRAnalytics/DEBUG> Canceling active timer
2016-07-08 19:26:48.479 20FIT Member[2525:] <FIRAnalytics/DEBUG> Timer scheduled to fire in approx. (s): 3600
2016-07-08 19:26:48.562 20FIT Member[2525:] <FIRAnalytics/DEBUG> Network status has changed. code, status: 2, Connected
2016-07-08 19:26:48.566 20FIT Member[2525:] <FIRAnalytics/DEBUG> Network status has changed. code, status: 2, Connected
2016-07-08 19:26:48.618 20FIT Member[2525:] <FIRAnalytics/DEBUG> Event logged. Event name, event params: app_open, {
"_o" = app;
}
2016-07-08 19:26:48.635 20FIT Member[2525:] <FIRAnalytics/DEBUG> Timer scheduled to fire in approx. (s): 3143.319384038448
2016-07-08 19:26:48.636 20FIT Member[2525:] <FIRAnalytics/DEBUG> Upload task scheduled to be executed in approx. (s): 3143.319384038448
2016-07-08 19:26:48.637 20FIT Member[2525:] <FIRAnalytics/DEBUG> Do not schedule an upload task. Task already exists
2016-07-08 19:26:48.710 20FIT Member[2525:] <FIRAnalytics/DEBUG> Received SSL challenge for host. Host: https://play.googleapis.com/log
2016-07-08 19:26:49.408 20FIT Member[2525:] <FIRAnalytics/DEBUG> Uploading data. Host: https://play.googleapis.com/log
Connected to FCM.
2016-07-08 19:26:49.869 20FIT Member[2525:] <FIRAnalytics/DEBUG> Received SSL challenge for host. Host: https://play.googleapis.com/log
2016-07-08 19:26:50.206 20FIT Member[2525:] <FIRAnalytics/DEBUG> Uploading data. Host: https://play.googleapis.com/log
2016-07-08 19:26:50.723 20FIT Member[2525:] <FIRAnalytics/DEBUG> Received SSL challenge for host. Host: https://play.googleapis.com/log
%@ [notification: {
badge = 2;
body = "Test Message";
e = 1;
sound = default;
sound2 = default;
title = Yoiii;
}, collapse_key: com.xxx.xxx, from: 717xxxx]
Error parsing aps
Hey j'ai le même problème. Ma clé aps est également manquante. Avez-vous trouvé une solution? – MrDank
malheureusement pas encore, je contacte déjà le support Firebase mais malheureusement, ils sont lents à répondre (le statut est que nous étudions). –
Vérifie ma réponse. – MrDank