我正在构建一个带有FCM推送通知的iOS应用程序。我遵循了Google Firebase文档和其他教程,但我的AppDelegate从未执行函数didReceiveRemoteNotification,因此当我从Firebase控制台发送通知时,它什么也不做。
我现在有这个:
应用委托.swift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
application.registerForRemoteNotifications()
FIRApp.configure()
connectToFcm()
return true
}
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
token = deviceToken.map { String(format: "%02.2hhx", $0) }.joined()
print("<-TOKEN->")
print(token)
}
func connectToFcm() {
FIRMessaging.messaging().connect { (error) in
if (error != nil) {
print("Unable to connect with FCM. (error)")
} else {
print("Connected to FCM.")
}
}
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
// Print message ID.
print("Message ID: (userInfo["gcm.message_id"]!)")
// Print full message.
print("%@", userInfo)
}
- 我还在我的CocoaPods文件中安装了Firebase。
- 我在 Firebase 控制台中使用相同的内部版本 ID 注册了该应用。
- 我有"必需的后台模式 ->应用程序下载内容作为响应在我的 info.plist 文件中推送通知">
- 我已创建 APNS 证书并将其上传到 Firebase 控制台中的设置中。
当我启动应用程序时,它会成功构建,并在控制台上打印我的这个:
[Firebase/Analytics][I-ACS023012] Firebase Analytics enabled
2017-05-29 12:10:56.101 incidenciasSifu[1811] <Notice> [Firebase/Analytics][I-ACS023012] Firebase Analytics enabled
Optional(Error Domain=com.google.fcm Code=2001 "FIRMessaging is already connected" UserInfo={NSLocalizedFailureReason=FIRMessaging is already connected})
<-TOKEN->
Optional("03545fbbb986e2ffdfa50ac9e3eb6fe07e6fe4694cdfd000d673a0bf5ea53f6a")
Connected to FCM.
我是 Swift 的新手,我不知道我是否忘记在 AppDelegate 中添加一些代码或其他东西。
请帮忙!我花了太多时间在这个:(
在注册推送通知之前,您需要要求用户授予您必要的权限。在didFinishLaunchingWithOptions方法中尝试以下代码:
if #available(iOS 10.0, *) {
UNUserNotificationCenter.current().requestAuthorization(options: [.badge, .alert, .sound]) { (granted, error) in
if granted {
application.registerForRemoteNotifications()
}
}
} else {
let notificationTypes: UIUserNotificationType = [.alert, .badge, .sound]
let settings = UIUserNotificationSettings(types: notificationTypes, categories: nil)
application.registerUserNotificationSettings(settings)
application.registerForRemoteNotifications()
}
检查应用程序启动的原因也很有用。在此方法中添加以下代码:
if let remoteNotification = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] {
self.application(application, didReceiveRemoteNotification: remoteNotification as! [AnyHashable : Any])
}
此外,您可以添加 didFailToRegisterForRemoteNotificationsWithError 方法,以了解可能错误的原因:
func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {
print ("Eror: (error.localizedDescription)")
}
在应用程序委托的didFinishLaunchingWithOptions
中注册通知。
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {
let center = UNUserNotificationCenter.current()
center.requestAuthorization(options:[.badge, .alert, .sound]) { (granted, error) in
// actions based on whether notifications were authorized or not
}
application.registerForRemoteNotifications()
return true
}