使用Firebase发送IOS通知。我点击我的iphone上的通知消息,启动应用程序并立即关闭应用程序。我不知道我做错了什么,你能帮忙解决这个问题吗?
这里有AppDelegate.swift的代码
import UIKit
import Firebase
import FirebaseMessaging
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
//add it for firebase
FIRApp.configure()
let notificationTypes : UIUserNotificationType = [UIUserNotificationType.Alert, UIUserNotificationType.Badge, UIUserNotificationType.Sound]
let notificationSettings = UIUserNotificationSettings(forTypes: notificationTypes, categories: nil)
application.registerForRemoteNotifications()
application.registerUserNotificationSettings(notificationSettings)
// Override point for customization after application launch.
return true
}
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.
}
func applicationWillEnterForeground(application: UIApplication) {
// Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.
}
func applicationDidBecomeActive(application: UIApplication) {
// 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:.
}
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
print("MessgaeID : \(userInfo["gcm_message_id"]!)")
print(userInfo)
}
}
2016-09-17 00:25:35.709 mediation [922:20184]配置默认应用。 2016-09-17 00:25:35.724 mediation [922:] Firebase Analytics v.3402000启动 2016-09-17 00:25:35.725 mediation [922:]要启用调试日志记录,请设置以下应用程序参数:-FIRAnalyticsDebugEnabled 2016-09-17 00:25:35.729:启用FIRInstanceID AppDelegate代理,将调配app委托远程通知处理程序。要禁用将“FirebaseAppDelegateProxyEnabled”添加到Info.plist并将其设置为NO 2016-09-17 00:25:35.729:无法获取APNS令牌Error Domain = com.firebase.iid Code = 1001“(null)” 2016-09-17 00:25:35.731:FIRMessaging库版本1.2.0 2016-09-17 00:25:35.734:启用了FIRMessaging AppDelegate代理,将调配app委托远程通知接收处理程序。将“FirebaseAppDelegateProxyEnabled”添加到Info.plist并将其设置为NO 2016-09-17 00:25:35.752 mediation [922:]自动成功创建Firebase Analytics App委托代理。要禁用代理,请在Info.plist中将标志FirebaseAppDelegateProxyEnabled设置为NO 2016-09-17 00:25:35.785 mediation [922:] Firebase Analytics已启用 2016-09-17 00:25:35.813:无法获取APNS令牌错误域= NSCocoaErrorDomain代码= 3010“REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION”UserInfo = {NSLocalizedDescription = REMOTE_NOTIFICATION_SIMULATOR_NOT_SUPPORTED_NSERROR_DESCRIPTION}
答案 0 :(得分:0)
我认为你的gcm_message_id不存在! gcm_message_id位于userInfo!
中MaxRequestSize
尝试打印您的userInfo以显示您收到的所有数据。 :)
答案 1 :(得分:0)
虽然我个人认为您的错误可能归因于错误拼写" MessageID "在你的代码中:
func application(application: UIApplication, didReceiveRemoteNotification userInfo: [NSObject : AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
print("MessgaeID : \(userInfo["gcm_message_id"]!)")
print(userInfo)
}
如果不是问题,请尝试:
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
// Let FCM know about the message for analytics
FIRMessaging.messaging().appDidReceiveMessage(userInfo)
// Print message ID.
print("Message ID: \(userInfo["gcm.message_id"]!)")
// Print full message.
print("%@", userInfo)
}
在任何情况下,您的 AppDelegate 应如下所示:
import UIKit
import Firebase
import FirebaseInstanceID
import FirebaseMessaging
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
var alertTitle: String?
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
// Continue to play users music from iTunes/Apple Music/ third party music streaming services
try! AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryAmbient)
// Register for remote notifications
if #available(iOS 8.0, *) {
// [START register_for_notifications]
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
// [END register_for_notifications]
} else {
// Fallback
let types: UIRemoteNotificationType = [.Alert, .Badge, .Sound]
application.registerForRemoteNotificationTypes(types)
}
FIRApp.configure()
// Add observer for InstanceID token refresh callback.
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(self.tokenRefreshNotification),
name: kFIRInstanceIDTokenRefreshNotification, object: nil)
return true
}
func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
print("didRegisterForRemoteNotificationsWithDeviceToken()")
// if FirebaseAppDelegateProxyEnabled === NO:
FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .Sandbox)
print("APNS: <\(deviceToken)>")
}
func application(application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: NSError) {
print("Registration for remote notification failed with error: \(error.localizedDescription)")
}
// [START receive_message]
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
// Let FCM know about the message for analytics
FIRMessaging.messaging().appDidReceiveMessage(userInfo)
// Print message ID.
print("Message ID: \(userInfo["gcm.message_id"]!)")
// Print full message.
print("%@", userInfo)
}
// [END receive_message]
// [START refresh_token]
func tokenRefreshNotification(notification: NSNotification) {
if let refreshedToken = FIRInstanceID.instanceID().token() {
print("InstanceID token: \(refreshedToken)")
}
// Connect to FCM since connection may have failed when attempted before having a token.
connectToFcm()
}
// [END refresh_token]
// [START connect_to_fcm]
func connectToFcm() {
FIRMessaging.messaging().connectWithCompletion { (error) in
if (error != nil) {
print("Unable to connect with FCM. \(error)")
} else {
print("Connected to FCM.")
}
}
}
// [END connect_to_fcm]
func applicationDidBecomeActive(application: UIApplication) {
connectToFcm()
}
// [START disconnect_from_fcm]
func applicationDidEnterBackground(application: UIApplication) {
FIRMessaging.messaging().disconnect()
print("Disconnected from FCM.")
}
func applicationWillEnterForeground(application: UIApplication) {
NSNotificationCenter.defaultCenter().postNotificationName("continueVideo", object: nil)
}
func applicationWillTerminate(application: UIApplication) {
// Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.
// Saves changes in the application's managed object context before the application temrinates.
}
}
要么应该工作。我还使用 FCM 在我的应用中通过Firebase控制台实施远程推送通知,并使用 Firebase版本3.5.2 这对我来说非常合适,事实上,我刚刚测试了上面的内容并在我的设备中运行它,我可以收到通知,轻扫并被引导回应用程序。