FCM - 使用 expo(React Native)向 iOS 设备发送通知

问题描述 投票:0回答:3

我无法向使用 Expo.io 创建的 iOS 应用程序发送推送通知。

没有关于如何做到这一点的明确文档,所以这是我的试验和我所做的事情:

在以编程方式调用此端点之前,我尝试使用 POSTMAN 让它工作(就像我在 Android 上用了不到 1 小时所做的那样)

这就是我的电话:

方法:POST

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

身体:

{
  "to": "token (read about it at the end of the post",
  "priority": "high",
  "data": {
    "experienceId": "@expoAccount/projectSlug",
    "title": "Hello there",
    "message": "General kenobi",
    "content_available": true
  },
    "content_available": true
}

我已经测试了很多不同的身体结构(带有/不带“content_available”键或带有“通知”对象......因为所有身体结构都不同于 全部 那个 问题 或文档 我已经 阅读 到目前为止

所以我不确定我必须发送的正文...但是如果通知在 Android 上工作,它应该在 iOS 上工作,否则我不明白 FCM 的意义...

浅谈iOS使用的token

对于 iOS,我从

Notifications.getDevicePushTokenAsync()
(expo doc) 获得的令牌不是有效的 FCM 令牌,因为它以某种方式“连接”到某些沙箱或任何 Apple 称之为 shit 的行为。

如果没有这个线程我会迷失在虚空中......所以我使用的令牌是我在将沙箱令牌“转换”为调用谷歌api的“真实”令牌后获得的令牌:https://iid .googleapis.com/iid/v1:batchImport

我有时会遇到一些奇怪的行为,特别是在使用密钥发送时

"content_available": true
:令牌似乎是“强制未注册”。

我为什么这么说?因为第一次通话的结果是:

"results": [{ "error": "InvalidRegistration" }],
,所有接下来的通话答案都是:
"results": [{ "error": "NotRegistered" }],

并且在使用“sandboxToken”调用时,batchImport 会生成一个新令牌,当我收到一些成功返回值(取决于该主体结构)时,该令牌不会改变:

"results": [{"message_id": "0:1632152120739230%37bf04f1f9fd7ecd"}],

注:我有一些成功退货,但手机上根本没有任何通知。

ios push-notification firebase-cloud-messaging expo
3个回答
4
投票

目前 Expo 应用程序不支持 iOS 应用程序的 FCM。

“请注意,FCM 目前不适用于 Expo iOS 应用程序。” -> https://docs.expo.dev/push-notifications/using-fcm/

对于 iOS,目前您有 2 个选择:

  1. 致电APN,信息位于您指出的链接上。

  2. 使用世博会推送通知服务


0
投票

在这种情况下,您可以使用 expo eas build 来构建 ios,尽管您使用的是裸工作流程项目,然后 eas 将负责在 ios 上运行 expo 推送通知所需的所有配置


0
投票

据我了解,expo通过Apples APNs(Apple推送通知服务)传递IOS通知来处理IOS和Android的通知,通过FCM(Firebase Cloud Messaging)传递Android通知。

因此,当使用 expo 到

getDevicePushTokenAsync
时,您返回的令牌类型取决于设备。如果运行 Android 设备,您将获得一个可直接在 Firebase 控制台中使用的令牌来发送测试消息,但如果使用 Apple 设备,您获得的本机令牌只能与 Apple 推送服务器一起使用。这就是为什么从 expo 生成的设备推送令牌不能直接与 FCM 使用。

让事情变得更混乱的是,FCM 仍然可以通过 firebase 云消息传递调用的一些映射/魔法向 IOS 设备发送消息 swizzling,但是如果想使用它,您可能必须使用不同的本机插件,例如react-native-firebase,或通过 google create_registration_tokens_for_apns_tokens api

手动迁移 apns 令牌
© www.soinside.com 2019 - 2024. All rights reserved.