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

Expo Push Token在Android独立构建应用中无法获取问题求助

Expo Notifications独立Android构建Token获取失败与推送渠道说明

一、独立构建后无法获取ExpoPushToken的排查与解决

以下是几个关键排查点,按优先级逐一验证:

  1. 显式指定Project ID
    独立构建时,getExpoPushTokenAsync必须传入你的Expo项目ID,Expo Go会自动读取项目配置,但独立应用需要显式声明:
    const token = await Notifications.getExpoPushTokenAsync({
      projectId: '你的Expo项目ID', // 在app.json或expo.config.js中可找到
    });
    
  2. 确认权限流程完整
    需确保代码中完成了权限请求的完整流程,且权限状态为granted:
    const { status } = await Notifications.requestPermissionsAsync();
    if (status !== 'granted') {
      console.log('通知权限未授予');
      return;
    }
    
    同时检查app.json中是否配置了必要权限:
    "android": {
      "permissions": [
        "POST_NOTIFICATIONS",
        "ACCESS_NOTIFICATION_POLICY"
      ]
    }
    
  3. 验证FCM配置一致性
    • 确认Expo凭证平台中配置的FCM服务器密钥,与FCM控制台对应项目的服务器密钥完全一致,无多余空格或字符。
    • 检查FCM项目的包名(application ID),与Expo项目app.json中android.package字段完全匹配。
    • 查看EAS构建日志,搜索「FCM」「credentials」相关关键词,确认构建过程中无配置错误的警告或报错。
  4. 初始化顺序与时机
    确保在获取Token前已完成通知处理器的初始化,且流程在组件挂载时执行:
    useEffect(() => {
      Notifications.setNotificationHandler({
        handleNotification: async () => ({
          shouldShowAlert: true,
          shouldPlaySound: false,
          shouldSetBadge: false,
        }),
      });
    
      async function getToken() {
        // 权限请求 + Token获取逻辑
      }
      getToken();
    }, []);
    
  5. 网络环境验证
    独立应用获取Token需要与Expo服务器通信,确保测试设备未处于代理、防火墙环境,能正常访问Expo服务。

二、推送渠道说明

  • Expo服务器支持中转推送:你的业务服务器只需将消息发送到Expo推送API,Expo会负责将消息转发到FCM(Android)/APNs(iOS),最终推送到设备,无需直接对接FCM。此流程完全依赖ExpoPushToken,是官方推荐的方式。
  • 若需使用FCM高级功能(如自定义通道、静默推送等),也可直接对接FCM,但此时需自行获取FCM设备Token,脱离Expo Notifications的封装,权限和Token管理需自行实现。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 08:28:19