You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何限制Expo推送通知单次请求发送量不超过100条?

解决Expo推送通知单次超过100条的分批次发送问题

针对Expo限制单次请求最多发送100条推送的规则,你可以通过将令牌数组拆分为多个100条的分组,逐组调用SDK的推送方法来处理200名关注者的通知需求。

实现步骤

  1. 拆分令牌数组:把包含200个推送令牌的数组,切割成每100个元素为一组的子数组。
  2. 逐组验证与发送:对每个分组先过滤无效令牌,再构建推送消息并调用sendPushNotificationsAsync发送。

完整代码示例

const { Expo } = require('expo-server-sdk');

// 初始化Expo SDK实例
const expo = new Expo();

// 模拟200个关注者的推送令牌集合
const allPushTokens = Array.from({ length: 200 }, (_, i) => `ExponentPushToken[${Math.random().toString(36).substr(2, 15)}]`);

// 定义每批次发送的最大数量(符合Expo限制)
const MAX_PER_REQUEST = 100;

// 拆分令牌为多个批次
const tokenBatches = [];
for (let i = 0; i < allPushTokens.length; i += MAX_PER_REQUEST) {
  tokenBatches.push(allPushTokens.slice(i, i + MAX_PER_REQUEST));
}

// 统一的推送内容配置
const notificationContent = {
  title: '产品更新提醒',
  body: '我们完成了重要功能更新,立即打开应用查看详情!',
  data: { updateVersion: 'v2.1.0', updateUrl: '/update' }
};

// 批量发送通知的异步函数
async function sendBatchedNotifications() {
  for (const batch of tokenBatches) {
    // 过滤掉无效的Expo推送令牌
    const validTokens = batch.filter(token => Expo.isExpoPushToken(token));
    
    if (validTokens.length === 0) {
      console.log('当前批次无有效推送令牌,跳过发送');
      continue;
    }

    // 构建当前批次的推送消息数组
    const pushMessages = validTokens.map(token => ({
      to: token,
      ...notificationContent
    }));

    try {
      // 发送当前批次的通知
      const deliveryReceipts = await expo.sendPushNotificationsAsync(pushMessages);
      console.log(`批次发送完成,回执信息:`, deliveryReceipts);
      
      // 可选:处理推送失败的情况,比如记录无效令牌或重试
      deliveryReceipts.forEach((receipt, index) => {
        if (receipt.status === 'error') {
          console.error(`令牌 ${validTokens[index]} 推送失败,错误信息:`, receipt.message);
        }
      });
    } catch (error) {
      console.error(`当前批次发送失败:`, error);
    }
  }
}

// 执行批量发送
sendBatchedNotifications();

关键细节说明

  • 令牌验证:使用Expo.isExpoPushToken过滤无效令牌,避免因无效请求浪费资源或触发额外错误。
  • 错误隔离:每个批次的发送单独捕获异常,确保某一批次发送失败不会影响其他批次的执行。
  • 回执处理:可以通过返回的回执信息,跟踪推送成功/失败的状态,后续可对失败的推送进行重试或清理无效令牌。

内容的提问来源于stack exchange,提问作者learncode

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 15:32:27