如何注册展会推送通知设备

Posted

技术标签:

【中文标题】如何注册展会推送通知设备【英文标题】:How to register an expo push notification device 【发布时间】:2021-06-24 07:13:12 【问题描述】:

我正在试用 Expo 推送通知服务。我通过单击“在零食上尝试这个示例”运行code in the overview,然后将我的 iPad 指向二维码,该二维码将示例加载到 Expo Go 中。当我点击“Press to Send Notification”时,我确实看到了一条通知,一切都很好。

使用打印在 iPad 应用程序上的相同令牌(“您的 expo 推送令牌:ExponentPushToken[token-goes-here]”)我尝试通过在我的 PC 上运行 curl 命令来调用 Expo API 以触发推送使用HTTPS POST 远程通知,同时将应用程序保持在前台:

curl -H "Content-Type: application/json" -X POST "https://exp.host/--/api/v2/push/send" -d '
  "to": "ExponentPushToken[token-goes-here]",
  "title":"hallo",
  "body": "world"
'

但我明白了:

"data":"status":"error","message":"\"ExponentPushToken[token-goes-here]\" is not a registered push notification recipient","details":"error":"DeviceNotRegistered"

查看sendPushNotification(expoPushToken) 的代码,我发现它使用与fetch 相同的API:

// Can use this function below, OR use Expo's Push Notification Tool-> https://expo.io/notifications
async function sendPushNotification(expoPushToken) 
  const message = 
    to: expoPushToken,
    sound: 'default',
    title: 'Original Title',
    body: 'And here is the body!',
    data:  someData: 'goes here' ,
  ;

  await fetch('https://exp.host/--/api/v2/push/send', 
    method: 'POST',
    headers: 
      Accept: 'application/json',
      'Accept-encoding': 'gzip, deflate',
      'Content-Type': 'application/json',
    ,
    body: JSON.stringify(message),
  );

那么为什么它可以在 iPad 上运行,但在使用完全相同令牌的 PC 上却不行呢?顺便说一句,我仔细检查了令牌并尝试了基于 Web 的 push notifications tool 并收到“这不是有效的 Expo 推送令牌”错误。我错过了一步吗?我还没有进行任何实际的构建,但认为它会起作用。

【问题讨论】:

世博推送令牌长什么样?它应该看起来像 ExponentPushToken[*******************] 我已经使用过 expo 工具和 curl,它对我来说很好用。尝试使用 php 代码发送 CURL 请求。 是的,令牌就是这种格式。我已经离开了一段时间,但只是按照问题中发布的方式在命令行上再次尝试并且它有效,所以我想它一定是 3 个月前世博会方面的临时错误或故障。如果您想将其发布为答案,我很乐意接受。谢谢。 【参考方案1】:

问题中显示的方法后来起作用了。相同的curl 命令后来返回了"status":"ok",我在移动设备上收到了通知。这可能是世博会方面的临时问题。

如果再次发生这种情况,并且 API 没有更改,建议稍后再试或联系 Expo。

【讨论】:

以上是关于如何注册展会推送通知设备的主要内容,如果未能解决你的问题,请参考以下文章

如何在 aws sns 中注册 iOS 设备令牌以接收推送通知?

如何注册 iOS 设备以接收推送通知?

Android:推送机器人向某些注册设备组发送通知

如何注册 android 设备以通过 App Engine 后端接收推送通知?

推送示例android gcm,已注册设备但未收到推送通知

如何使用 GCM 和 java 向多个设备发送推送通知