【问题标题】:Firebase notifications not working in iOS 11Firebase 通知在 iOS 11 中不起作用
【发布时间】:2018-03-02 21:34:18
【问题描述】:

我正在开发一个使用 Firebase 推送通知的应用。它运行良好,直到我在 iOS 11 中尝试。使用带有 ios 11 的 iphone 通知不会到达。这是我的代码:

- (void)application:(UIApplication *)application 
  didReceiveRemoteNotification:(NSDictionary *)userInfo
  fetchCompletionHandler:(void (^)
  (UIBackgroundFetchResult))completionHandler {
      //Manage notification
  }

- (void)userNotificationCenter:(UNUserNotificationCenter *)center
   willPresentNotification:(UNNotification *)notification
     withCompletionHandler:(void (^)(UNNotificationPresentationOptions))completionHandler{
    //Manage notification
}

这两个方法都没有被调用。

感谢您的帮助!

【问题讨论】:

  • 我在 iOS 11 上也遇到了问题。我没有要测试的 iOS 10 设备以确认这是操作系统问题,但推送现在可以正常工作,但事实并非如此。我可以在直接调用 APNs 服务器时收到通知,因此可能存在 firebase 错误。如果我收到回复,我会联系您并提供支持。
  • 是的,它可能是由 Firebase 引起的,也许他们会很快更新.. 感谢@Jeremiah 的回答

标签: ios firebase push-notification notifications ios11


【解决方案1】:

你需要实现UNUserNotificationCenterDelegate

 extension AppDelegate: UNUserNotificationCenterDelegate {
        func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
            completionHandler(.alert)
        }
    }

并将其设置为didFinishLaunchingWithOptions内的UNUserNotificationCenter对象

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
      UNUserNotificationCenter.current().delegate = self
      return true
}

【讨论】:

  • 这对我不起作用,通知在所有其他操作系统中都很好,除了 iOS 11
  • 应用关闭时也不会收到通知。
【解决方案2】:

在您的项目能力中检查这一点。它帮助了我)

【讨论】:

  • 我已经启用了该选项。我不认为这与 xcode 相关,而是与 firebase 相关。
  • @JaimeAlcántaraArnela 嗯,它现在适用于 iOS 10-11。你检查过这个example 吗?我认为问题可能出在您的实施中。
【解决方案3】:

这是 Firebase 的一个问题。这似乎与他们最近的更新有关,而不是与 iOS 11 有关。他们正在努力修复它。

与此同时,如果您将 pod 'FirebaseInstanceID', '2.0.0' 添加到您的 podfile 中,它会修复它。

您可以在这里阅读更多内容:https://github.com/firebase/quickstart-ios/issues/327#issuecomment-332655731

【讨论】:

  • 好的,谢谢。无论如何,我会保持打开状态,直到我们从 firebase 获得更新,如果你更新它,我会给你答案。这样我们就可以在这里保留正确的解决方案。
  • 为我提供帮助。但应该是 pod 'FirebaseInstanceID', '2.0.0'
【解决方案4】:

你可以试试这个

    Messaging.messaging().delegate = self
    Messaging.messaging().shouldEstablishDirectChannel = true

【讨论】:

  • 抱歉,我的记忆解决方案并不是真正的解决方案。当应用程序处于活动状态时,消息刚刚到达。
【解决方案5】:

我被卡住了 3 个小时,然后在网上找到了 2 个步骤帮助了我。

  1. 尝试像这样在外部调用 firebase 通知发送 - 只需将 ServerKey 替换为您的帐户 serverkey,将 FCM_TOKEN 替换为您的应用 fcm 令牌:
curl -X "POST" "https://fcm.googleapis.com/fcm/send" \
     -H "Authorization: key=ServerKey" \
     -H "Content-Type: application/json" \
     -d $'{
  "notification": {
    "body": "Testing with direct FCM API",
    "title": "Test Message",
    "badge": "0",
    "sound": "default"
  },
  "registration_ids": [
"FCM_TOKEN"
  ]
}'
  1. 您可能会收到一些错误响应。我有“InvalidApnsCredential”,这是由于 Firebase 和苹果开发者帐户中的 TeamID 不匹配(更具体地说是身份验证令牌密钥)->还要小心 firebase 在保存后确实更改了 TeamID 事件(它给了我许多无效的保存更改发生浏览器刷新后)

【讨论】:

    【解决方案6】:

    我也遇到过这个问题。我按照所有说明操作,但仍然无法在后台收到通知。

    当我存档并将构建发送到试飞(并得到苹果的批准)时,问题就消失了。不,我可以发送通知。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-06-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-04-24
      • 2018-05-20
      • 2018-03-05
      • 1970-01-01
      相关资源
      最近更新 更多