世博会推送通知令牌如何工作?ExponentPushToken[XYC]

Dim*_*iwa 6 javascript react-native expo

在expo SDK36中,我的目标是iOS和Android。

我正在尝试开发推送通知,在 Android 设备上,我的设备有:ExponentPushToken[XYZ]并且我的 iOS 设备有ExponentPushToken[ABC]

  • 这些生成的令牌是唯一的吗?
  • 它们是在客户端生成的吗?
  • 我可以安全地将它们添加到我的数据库中以识别我的设备吗?
  • 所有发布渠道(staging/preprod/prod)是否会对每个设备使用相同的令牌?

far*_*aza 11

接受的答案有一些过时的信息(截至 2021 年 9 月 3 日),所以这是最新的。

当您调用时,Expo 令牌会在客户端生成Notifications.getExpoPushTokenAsync()(Notifications 是一个 expo 库)。

即使应用程序更新,此令牌也将保持有效。根据世博会的文档

ExpoPushToken 将在应用程序升级过程中保持不变,并弹出到裸工作流程中。在 iOS 上,即使卸载应用程序并重新安装后,它也将保持不变(在 Android 上,这会导致推送令牌发生变化)

您应该将此令牌存储在服务器数据库上。它们是用于向特定设备发送推送通知的唯一标识符。来自世博会关于推送通知的概述:

如果推送通知是邮件,则 ExpoPushToken 是用户的地址

关于您关于不同发布渠道的不同令牌的问题,对于Android来说,没有区别。对于 iOS,Sandbox 与 Production 会有不同的标记。您应该传递一个参数getExpoPushTokenAsync表明您位于沙箱中


Blo*_*key 3

所有令牌都是唯一的,但每次重新安装应用程序时都会生成一个新令牌,因此每次构建(可能也包含商店更新),因此您必须处理它。您可以执行一些操作,例如在每个新构建中删除所有令牌。

据我所知,将令牌存储在数据库中是唯一的方法。确保他们的访问安全取决于您。

在 Android 构建中,您需要一个 firebase api 密钥来处理通知。请参阅https://docs.expo.io/push-notifications/using-fcm/