Firebase通知在iOS 11中无法正常工作

23

我正在开发一个使用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的错误。我已经联系了支持团队,并会告诉您我的回复。 - Jeremiah
是的,这可能是由Firebase引起的,也许他们很快会更新。感谢您的回答@Jeremiah。 - Jaime Alcántara Arnela
与 https://dev59.com/MqPia4cB1Zd3GeqP4dMw 相关。 - lal
6个回答

13

好的,谢谢。我会一直保持开放状态,直到我们从Firebase得到更新,然后如果您更新了它,我会给您答案。这样我们就可以在这里保持正确的解决方案。 - Jaime Alcántara Arnela
1
对我有帮助。但应该是 pod 'FirebaseInstanceID','2.0.0'。 - Vlad Pulichev

2

我卡在那里大约3个小时,然后在网上找到2个步骤帮助了我。

  1. 尝试像这样从外部调用Firebase通知发送 - 只需替换您的帐户ServerKey和应用程序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和苹果开发者帐户(更具体地说,是auth token key)中的TeamID不匹配->还要小心,即使保存后,Firebase也会真正更改TeamID(它给了我许多无效的保存更改,这些更改发生在浏览器刷新之后)。
最初的回答:您可能会收到一些错误响应。我遇到了“InvalidApnsCredential”的问题,这是由于Firebase和Apple开发者账户中的TeamID不匹配(更具体地说,是认证令牌密钥)。此外,请注意,即使保存后,Firebase也会真正更改TeamID(这导致我在浏览器刷新后出现了许多无效的保存更改)。

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之外的所有其他操作系统中,通知都很好。 - Sung
当应用程序关闭时,通知也无法传递。 - Jeremiah

1

在您的项目能力范围内检查此内容。它帮助了我) 输入图像描述


1
我已经打开了那个选项。我认为问题不在于Xcode,而是Firebase。 - Jaime Alcántara Arnela
1
@JaimeAlcántaraArnela 嗯,对于iOS 10-11,它现在对我来说运行良好。你有检查过这个示例吗?我认为问题可能出在你的实现上。 - SwiftyFinch

0

你能试试这个吗?

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

抱歉,我的记忆解决方案并不是真正的解决方案。当应用程序处于活动状态时,消息才会到达。 - pooopy

0

我也遇到了这个问题。我按照所有的指示去做,但仍然无法在后台收到通知。

当我将构建存档并发送到测试飞行(并且被苹果批准)时,问题就消失了。现在我可以发送通知了。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接