您如何识别 Expo Push Notification Token 所属的 Expo 项目?
Posted
技术标签:
【中文标题】您如何识别 Expo Push Notification Token 所属的 Expo 项目?【英文标题】:How do you identify the Expo project that an Expo Push Notification Token belongs to? 【发布时间】:2020-04-19 14:45:40 【问题描述】:前提
无论好坏,我将两个 Expo 帐户用于我的生产和开发环境。
Production Expo Account: prod-proj
Development Expo Account: dev-proj
我使用 Expo 的推送通知服务向我的用户发送推送通知。我将每个用户的 Expo Push Notification Token 存储在他们的用户文档中。即:
User
id: 1
name: Jimothy
token: ExponentPushToken[di3ja!-lk2^(24af]
通过一系列不幸的事件,我数据库中的大多数用户都使用prod-proj
Expo 项目创建了推送通知,但少数用户使用dev-proj
创建了推送通知。
问题
当我尝试分块并向我的所有用户发送推送通知时,我从 Expo 收到一个错误:
错误:同一个请求中的所有推送通知消息必须是针对同一个项目的;按项目分隔您的推送通知。
但是我的代币都搞混了!
如何按项目区分 Expo Push Notification Tokens?
【问题讨论】:
【参考方案1】:想出了这个问题的答案!
在 Expo 的expo-server-sdk
Node 客户端中,Expo 返回错误的details
字段包含有关哪些令牌属于哪些项目的所有信息。
示例代码
const Expo = require('expo-server-sdk');
const expo = new Expo();
const sendNotifications = async () =>
const notifications = [ ... ];
const chunks = expo.chunkPushNotifications(notifications);
for (const chunk of chunks)
try
await expo.sendPushNotificationsAsync(chunk)
catch (error)
console.log(JSON.stringify(error));
// The important part:
// error.details = EXPO_PROJECT_NAME: [ ExponentPushTokens ]
【讨论】:
【参考方案2】:我现在面临同样的问题,我们能做的最好的事情可能就是将 expo 推送令牌与体验 ID 一起发送到后端。从那里,按经验对令牌进行分组,然后像往常一样发送这些组。
import Constants from "expo-constants";
const experienceId = Constants.manifest.id; // @user/project-slug
【讨论】:
以上是关于您如何识别 Expo Push Notification Token 所属的 Expo 项目?的主要内容,如果未能解决你的问题,请参考以下文章
Expo Push Notifications - 在特定屏幕中禁用通知