【问题标题】:How do you identify the Expo project that an Expo Push Notification Token belongs to?您如何识别 Expo Push Notification Token 所属的 Expo 项目?
【发布时间】: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?

【问题讨论】:

    标签: react-native push-notification expo


    【解决方案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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-11
        • 1970-01-01
        • 1970-01-01
        • 2018-12-23
        • 2016-08-28
        • 2021-08-17
        相关资源
        最近更新 更多