我正在关注firebase提供的sampler项目.
Firebase Cloud Messaging sammple
Firebase Cloud Messaging sammple
我的app代表是
import UIKit import Firebase import FirebaseMessaging import UserNotifications import FirebaseInstanceID //add firebase code app delegate code @UIApplicationMain class AppDelegate: UIResponder,UIApplicationDelegate { var window: UIWindow? let gcmMessageIDKey = "gcm.message_id" func application(_ application: UIApplication,didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool { // Override point for customization after application launch. // Register for remote notifications. This shows a permission dialog on first run,to // show the dialog at a more appropriate time move this registration accordingly. // [START register_for_notifications] if #available(iOS 10.0,*) { // For iOS 10 display notification (sent via APNS) UNUserNotificationCenter.current().delegate = self let authOptions: UNAuthorizationOptions = [.alert,.badge,.sound] UNUserNotificationCenter.current().requestAuthorization( options: authOptions,completionHandler: {_,_ in }) } else { let settings: UIUserNotificationSettings = UIUserNotificationSettings(types: [.alert,.sound],categories: nil) application.registerUserNotificationSettings(settings) } application.registerForRemoteNotifications() // [END register_for_notifications] FirebaseApp.configure() // [START set_messaging_delegate] Messaging.messaging().delegate = self // [END set_messaging_delegate] return true } // [START receive_message] func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable: Any]) { // 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. if let messageID = userInfo[gcmMessageIDKey] { print("Message ID: \(messageID)") } // Print full message. print(userInfo) } func application(_ application: UIApplication,didReceiveRemoteNotification userInfo: [AnyHashable: Any],fetchCompletionHandler completionHandler: @escaping (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. if let messageID = userInfo[gcmMessageIDKey] { print("Message ID: \(messageID)") } // Print full message. print(userInfo) completionHandler(UIBackgroundFetchResult.newData) } // [END receive_message] func application(_ application: UIApplication,didFailToRegisterForRemoteNotificationsWithError error: Error) { print("Unable to register for remote notifications: \(error.localizedDescription)") } // This function is added here only for debugging purposes,and can be removed if swizzling is enabled. // If swizzling is disabled then this function must be implemented so that the APNs token can be paired to // the InstanceID token. func application(_ application: UIApplication,didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) { print("APNs token retrieved: \(deviceToken)") // With swizzling disabled you must set the APNs token here. InstanceID.instanceID().setAPNSToken(deviceToken,type: InstanceIDAPNSTokenType.sandBox) } } // [START ios_10_message_handling] @available(iOS 10,*) extension AppDelegate : UNUserNotificationCenterDelegate { // Receive displayed notifications for iOS 10 devices. func userNotificationCenter(_ center: UNUserNotificationCenter,willPresent notification: UNNotification,withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) { let userInfo = notification.request.content.userInfo // Print message ID. if let messageID = userInfo[gcmMessageIDKey] { print("Message ID: \(messageID)") } // Print full message. print(userInfo) // Change this to your preferred presentation option completionHandler([.alert,.sound]) } func userNotificationCenter(_ center: UNUserNotificationCenter,didReceive response: UNNotificationResponse,withCompletionHandler completionHandler: @escaping () -> Void) { let userInfo = response.notification.request.content.userInfo // Print message ID. if let messageID = userInfo[gcmMessageIDKey] { print("Message ID: \(messageID)") } // Print full message. print(userInfo) completionHandler() } } // [END ios_10_message_handling] extension AppDelegate : MessagingDelegate { // [START refresh_token] func messaging(_ messaging: Messaging,didRefreshRegistrationToken fcmToken: String) { print("Firebase registration token: \(fcmToken)") print(fcmToken) resgisterNotificationToken(fcmToken: fcmToken) } // [END refresh_token] func application(received remoteMessage: MessagingRemoteMessage) { //get called when sending notification from POSTMAN and when app is open print("%@",remoteMessage.appData) print("%@",remoteMessage) } func resgisterNotificationToken(fcmToken:String){ //let deviceId = UIDevice.current.identifierForVendor!.uuidString //let parameters = ["OTY": AppConstants.init().OS_TYPE,"REGID": fcmToken] as Dictionary<String,String> } }
我可以收到从firebase控制台发送的通知.
我已将我的firebase库升级到最新的3.0版本.
我也得到了警告.
不推荐使用“InstanceIDAPNSTokenType”:改为使用FIRMessaging的APNSToken属性.
请提供代码解决方案,并给我服务器请求结构,以便我可以从邮递员测试它.
提前致谢.
解决方法
您可以尝试像这样设置apn令牌:
FIRInstanceID.instanceID() .setAPNSToken(deviceToken,type: FIRInstanceIDAPNSTokenType.unknown)
FIRInstanceID setAPNSToken
Set APNS token for the application. This APNS token will be used to register with Firebase Messaging using token or tokenWithAuthorizedEntity:scope:options:handler. If the token type is set to FIRInstanceIDAPNSTokenTypeUnknown InstanceID will read the provisioning profile to find out the token type.
它对我有用!
编辑:
使用Firebase 4.0.0版本的方法已经改变:
Messaging.messaging() .setAPNSToken(deviceToken,type: MessagingAPNSTokenType.unknown)