首页 文章

didReceiveRemoteNotification不叫swift

提问于
浏览
0

为什么我没有收到后台未收到的通知???

这是我使用Push Notifications时的第一次体验 . 我阅读了文档,并按照Google Firebase Doc的指南进行操作 . 我也实现了firebase/quickstart-ios的代码 . 之后我在firebase服务上创建了控制台,上传了我的证书并成功发送了我在前台收到的消息,所以在Backround也是如此 .

但是,当我更改从后端开发人员处获取的控制台时,我的应用程序停止在后台模式下执行推送通知 .

我在做什么:

  • 在功能推送通知设置为"ON"

  • 在功能背景模式下启用"Background fetch","Remote notification"

  • content_available设为"1"

  • 发送消息优先级设置为"High"

我无法理解为什么app停止在后台接收通知,如果之前运行良好 .

我也在stackoverflow上读了同样的问题,但没有找到我的问题的解决方案 .

请帮忙解决这个问题!

UPDATE:

其实我没有接受, didReceiveRemoteNotification 也不会打电话!

2 回答

  • 0

    您尚未添加任何代码,因此可能需要考虑以下几点:

    确保定义了fetchCompletionHandler,以便 content-available: true 能够在收到推送通知时唤醒应用程序 .

    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                       fetchCompletionHandler completionHandler:{ @escaping (UIBackgroundFetchResult) -> Void)
    fetchCompletionHandler(UIBackgroundFetchResultNewData);
    }
    

    FCM根据推送通知有效负载中包含的内容处理不同的通知 . 尝试使用推送通知,仅使用数据有效负载和仅通知负载,尝试并查看会发生什么 .

    {
      "to":"push_token",
        "content_available": true,
        "priority": "high",
        "notification": {
          "title": "New Message",
          "message": "Bob sent you a message",
        },
        "data": {
          "title": "New Message",
          "message": "Bob sent you a message",
        }
    }
    

    使用此CURL命令而不是使用firebase控制台来测试发送推送通知

    curl -X POST --header "Authorization: key=APIKEY" --Header "Content-Type: application/json" https://fcm.googleapis.com/fcm/send -d "@push_payload.json"
    
  • 0

    原因是当我从第一个控制台安装带有GoogleService-Info.list的应用程序时,我接受了接收通知 . 所以,如果您更改控制台,当然您更改了GoogleService-Info.list,您应该再次接受接收通知!如果你不接受, didReceiveRemoteNotification 将不会打电话!

    附:在我的变体中,我通过调配实现通知 . 如果您选择相同的方式,请确保在Info.plist文件中具有属性 FirebaseAppDelegateProxyEnabled ,其值设置为 YES

相关问题