ios - 适用于 Android 的 Firebase 推送通知,但仅适用于 iOS 的 Firebase 控制台

标签 ios firebase push-notification

我已经完成了 Firebase 网站中针对 ios 和 Android 的推送通知的步骤。对于 Android,一切正常,但对于 ios,我只能接收通过 Firebase 控制台发送的推送通知,而不是来 self 的服务器端代码。知道可能出了什么问题吗?我研究了这个问题,发现了一个过时的 Firebase 配置解决方案,但我想知道是否有更新的解决方案。非常感谢!

这是我获得服务设置说明的链接。 https://firebase.google.com/docs/cloud-messaging/ios/client

这是我的通知 Swift 代码:

@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.
    FirebaseApp.configure()

    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, .badge, .sound], categories: nil)
        application.registerUserNotificationSettings(settings)
    }

    application.registerForRemoteNotifications()

    let token = Messaging.messaging().fcmToken
    print("***** MY FCM token: \(token ?? "")")

    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)
}

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 invalidate graphics rendering callbacks. Games should use this method to pause the game.
    FBSDKAppEvents.activateApp()
}

func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
}


}


@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

    // With swizzling disabled you must let Messaging know about the message, for Analytics
    // Messaging.messaging().appDidReceiveMessage(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, .badge, .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()
}
}


extension AppDelegate : MessagingDelegate {
// [START refresh_token]
func messaging(_ messaging: Messaging, didRefreshRegistrationToken fcmToken: String) {
    print("Firebase registration token: \(fcmToken)")
}
// [END refresh_token]

// [START ios_10_data_message]
// Receive data messages on iOS 10+ directly from FCM (bypassing APNs) when the app is in the foreground.
// To enable direct data messages, you can set Messaging.messaging().shouldEstablishDirectChannel to true.
func messaging(_ messaging: Messaging, didReceive remoteMessage: MessagingRemoteMessage) {
    print("Received data message: \(remoteMessage.appData)")
}
// [END ios_10_data_message]
}

最佳答案

我们可以看看您的通知结构是什么样的吗?我遇到了同样的问题,需要添加 priority: high 才能在 iOS 上工作。

关于ios - 适用于 Android 的 Firebase 推送通知,但仅适用于 iOS 的 Firebase 控制台,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51215211/

相关文章:

android - 如何在 Android 中使用身份验证 Uid 从 FirebaseUser 获取用户名?

c# - 带参数的推送通知不接收 Windows Phone

android - GCM 错误 - googleCloudMessaging.register

ios - 使用 UIBezierPath 时出现错误

ios - Alamofire:无论 timoutIntervalForRequest 如何,1 秒内为 'The request timed out'

ios - RxSwift 条件绑定(bind)

java - 从 Java 6 升级到 Java 7/8 后,Apple 无法推送

ios - 常规委托(delegate)和 ProxyDelegate RxSwift

firebase - 撤销实时数据库中的读取访问权限是否会立即断开事件监听器的连接?

ios - 将 [FIRApp configure] 添加到您的应用程序初始化错误中