Firebase推送通知在iOS 13上无法工作

5

iOS 13上Firebase推送通知无法正常工作,但在iOS 12.4上可以正常工作。有解决方案吗?

编辑日期:2019年10月4日

iOS 13上静默推送通知无法工作。


你用哪个xCode生成构建? - Manish
我在13.2.1版本上也遇到了同样的问题,甚至无法收到Gmail应用程序的通知,但当我将iOS版本更新到13.3后,所有通知都开始接收,并且问题得到解决。 - Nitesh
8个回答

8

快速解决方案:

如果您在iOS 13.2.X版本上无法接收推送通知,则请按照以下步骤更改设备设置并再次检查:

设备 > 设置 > 搜索您的应用名称 > 通知 > Banner Style > 将其从“Temporary”更改为“Persistent”或反之一次。

现在再次发送推送通知即可开始接收。

enter image description here


1
这对我有用。你知道为什么会有效吗?不想强迫我的用户这样做。 - korrekorre
有没有想法如何在代码中实现这个功能?对于成千上万的用户来说,这不是一个可靠或可扩展的解决方案。:\ 不过,在我的测试中它确实起作用了。 - ChrisH

4
在iOS 13之前,我曾经因为没有在XCode中选择“签名和能力” -> “后台模式” -> “后台获取”而无法接收推送通知。在我选择后,一切都正常了。
在iOS 13之后,我再次遇到了同样的问题,无法接收推送通知。今天我发现,在XCode中,“后台获取”选项再次未被选中。可能是在更新XCode后出了些问题?
我还没有测试过,请你检查看这是否对你有用。

1
我认为这对我也起作用了!我需要添加背景模式1.远程通知和2.后台处理。远程通知一直被选中。关于后台处理,我不确定它是否被选中,然后不知何故被取消选择。但是启用两者后,推送消息再次正常工作。谢谢! - Sneek

3

请参考此处链接

Firebase推送示例正文

{
  "topic": "topic_test",
  "message": {
    "data": {
      "key": "some_value"
    },
    "notification": {
      "body": "description ~",
      "title": "title !"
    }
  },
  "options": {
    "mutableContent": true,
    "contentAvailable": true,
    "apnsPushType": "background"
  }
}

这个 "contentAvailable": true 对我很有用。谢谢。 - pajtimid

2
如果委托“didRegisterForRemoteNotificationsWithDeviceToken”触发失败,请尝试更改网络。我将其更改为蜂窝数据,它又开始工作了。
此外,如果您在 MAC 上使用互联网连接通过 USB 共享。请关闭它,并使用普通 wifi 或移动数据连接您的 IPhone。

2
也许这是iOS13的错误模式或更新问题,这将适用于iOS12和iOS13。
{
"to":"",
"priority":"high",
"content_available":true,
"data":{
    "abc":"abc"
    },
"notification":{
    "body":"abc"
    }
}

Or

{
"to":"",
"priority":"high",
"content_available":true,
"data":{
    "abc":"abc"
    }
}

1
希望您能添加通知委托和其他方法。
首先,您可以尝试使用以下链接在Postman中进行操作。

https://fcm.googleapis.com/fcm/send

在Postman的头部中:

1). Authorization = key="添加Firebase服务器密钥"

2). Content-Type = application/json

在Postman的请求体中:

{ "to" : "您的iPhone设备FCM令牌", "notification" : { "body" : "您的通知正文", "title": "您的通知标题", "sound": "default", "alert":"新" }, "priority": "high", "contentAvailable": true, "data" : { "body" : "数据中的通知正文", "title": "数据中的通知标题", "key_1" : "键1的值", "key_2" : "键2的值", } }

首先使用上述示例在Postman中尝试并检查iOS 13中的结果。


0

可能与从Data对象中提取推送令牌的方式有关。我对Firebase推送通知不是特别熟悉,但是如果您必须将推送令牌传递给Firebase,则可能需要更改获取令牌的方式。如果Firebase有一个处理此操作的SDK,则您可能需要更新它。

OneSignal在这里谈到了这个变化。


0

在更新我的Pods后,我遇到了同样的问题。从版本6.18.0开始:

通过shouldEstablishDirectChannel已弃用FCM直接通道消息传递。相反,使用APNs进行下行消息传递。如果您想继续使用旧版API,请在负载中添加content_available键,但我们强烈建议使用HTTP v1 API,因为它提供完整的APNs支持。弃用的API将在Firebase 7中删除(#4710)。发布说明

在我的AppDelegate中,我注释掉了两行代码:

func connectToFCM() {
//        Messaging.messaging().shouldEstablishDirectChannel = true
    }

func disconnectFCM() {
//        Messaging.messaging().shouldEstablishDirectChannel = false
    }

当我使用设备令牌向我的设备发送通知时,一切似乎都正常工作。然而,在将更新上传到应用商店后,我看到了以下内容:

0%的潜在用户有资格参加此活动:0

我重新从Firebase下载了GoogleService-Info.plist,并将其与xcworkspace中已有的进行了比较。GOOGLE_APP_ID已更改。因此,替换.plist即可解决问题。我不确定为什么.plist中的信息会更改。希望这可以帮助到您。

附注-当前Pods版本为6.23.0


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