ios10,Swift 3和Firebase推送通知(FCM)

我正在努力显示从FCM通知控制台发送到设备的推送通知。我可以看到设备正在接收通知,因为我可以看到发送“ test8”的消息

Connected to FCM.

%@ [AnyHashable("notification"): {

body = test8;

e = 1;

},

但是,无论我的应用程序位于前台还是后台都没有关系,但我不会显示通知。

我已在info.plist中添加了“必需的后台模式-

应用程序下载内容以响应推送通知”。我的证书是正确的,并且生成令牌没有问题。我的应用程序正在接收通知,但未显示它们。

import UIKit

import UserNotifications

import Firebase

import FirebaseInstanceID

import FirebaseMessaging

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate {

var window: UIWindow?

func application(application: UIApplication,

didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

// [START register_for_notifications]

if #available(iOS 10.0, *) {

let authOptions : UNAuthorizationOptions = [.Alert, .Badge, .Sound]

UNUserNotificationCenter.currentNotificationCenter().requestAuthorizationWithOptions(

authOptions,

completionHandler: {_,_ in })

// For iOS 10 display notification (sent via APNS)

UNUserNotificationCenter.currentNotificationCenter().delegate = self

// For iOS 10 data message (sent via FCM)

FIRMessaging.messaging().remoteMessageDelegate = self

} else {

let settings: UIUserNotificationSettings =

UIUserNotificationSettings(forTypes: [.Alert, .Badge, .Sound], categories: nil)

application.registerUserNotificationSettings(settings)

application.registerForRemoteNotifications()

}

application.registerForRemoteNotifications()

// [END register_for_notifications]

FIRApp.configure()

// Add observer for InstanceID token refresh callback.

NSNotificationCenter.defaultCenter().addObserver(self,

selector: #selector(self.tokenRefreshNotification),

name: kFIRInstanceIDTokenRefreshNotification,

object: nil)

return true

}

// [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

// 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.")

}

// [END disconnect_from_fcm]

}

// [START ios_10_message_handling]

@available(iOS 10, *)

extension AppDelegate : UNUserNotificationCenterDelegate {

// Receive displayed notifications for iOS 10 devices.

func userNotificationCenter(center: UNUserNotificationCenter,

willPresentNotification notification: UNNotification,

withCompletionHandler completionHandler: (UNNotificationPresentationOptions) -> Void) {

let userInfo = notification.request.content.userInfo

// Print message ID.

print("Message ID: \(userInfo["gcm.message_id"]!)")

// Print full message.

print("%@", userInfo)

}

}

extension AppDelegate : FIRMessagingDelegate {

// Receive data message on iOS 10 devices.

func applicationReceivedRemoteMessage(remoteMessage: FIRMessagingRemoteMessage) {

print("%@", remoteMessage.appData)

}

}

// [END ios_10_message_handling]

我一直在尝试自己研究和解决此问题,但遇到了问题。任何帮助或建议,将不胜感激。

回答:

在 方法 ,添加以下代码:

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {

let tokenChars = UnsafePointer<CChar>(deviceToken.bytes)

var tokenString = ""

for i in 0..<deviceToken.length {

tokenString += String(format: "%02.2hhx", arguments: [tokenChars[i]])

}

FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Unknown)

print("tokenString: \(tokenString)")

}

并且不要忘记在 。 *

以上是 ios10,Swift 3和Firebase推送通知(FCM) 的全部内容, 来源链接: utcz.com/qa/399054.html

回到顶部