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

Expo SDK 52 推送通知在Expo Go正常但APK构建无推送令牌且无法接收通知

Expo SDK 52 推送通知在Expo Go正常但APK构建无推送令牌且无法接收通知

我之前也踩过Expo推送在自定义构建包中失效的坑,结合你的代码和配置来看,大概率是环境差异导致的配置缺失或权限遗漏,咱们一步步来排查解决:

1. 补全Android 13+的推送权限

从Android 13(API 33)开始,系统要求单独申请推送通知权限,Expo Go会自动帮你处理这个权限的声明,但自定义APK构建需要你显式在配置里添加:
打开你的app.config.js,在android.permissions数组中加入:

"android.permission.POST_NOTIFICATIONS"

没有这个权限的话,即使你调用requestPermissionsAsync,也可能拿不到完整的推送权限,导致getExpoPushTokenAsync失败。

2. 给getExpoPushTokenAsync显式指定Project ID

在非Expo Go的自定义构建环境中,getExpoPushTokenAsync需要明确关联你的Expo项目,否则无法生成有效的推送令牌。修改你的registerPushToken函数:

// 替换原来的getExpoPushTokenAsync调用
const pushToken = (await Notifications.getExpoPushTokenAsync({
  projectId: '你的Expo项目ID' // 可在expo.dev控制台找到,或app.config.js里的expo.id字段
})).data;

Expo Go会自动读取app.config里的项目ID,但自定义构建包不会,所以必须显式传入这个参数。

3. 验证Firebase配置(FCM相关)

你已经添加了google-services.json,但要注意两个关键细节:

  • 确保这个文件对应的Firebase项目,已经添加了当前APK构建使用的证书指纹(SHA-1/SHA-256):
    你可以通过eas credentials命令查看构建用的证书信息,或者在EAS Build的构建详情页面找到指纹,然后到Firebase控制台的「项目设置」→「云消息传递」里添加这些指纹。
  • 确认google-services.json确实放在了项目根目录,EAS Build能正确读取它(Expo会自动处理,但如果路径错误会静默失败)。

4. 给APK加错误提示,定位具体问题

APK里的console.log无法直接查看,所以把错误信息用Alert弹出来,这样就能直观看到问题所在:
修改registerPushToken的catch块:

catch (err) {
  Alert.alert('Push Token Error', JSON.stringify(err));
  console.log('Push token error:', err);
}

重新构建APK后,如果出错,你就能直接看到错误详情(比如权限不足、projectId缺失等)。

5. 检查EAS Build的构建日志

每次构建完成后,去EAS Dashboard查看构建日志,搜索关键词notifications、google-services,看看有没有警告或错误,比如:

  • 是否提示找不到google-services.json
  • 是否有证书配置相关的问题
  • 是否有权限声明的警告

额外小提醒

你的registerPushToken函数接收了一个token参数,但函数内部并没有用到它,这可能是笔误?如果是多余的可以删掉,避免后续混淆。

按照上面的步骤逐一排查,应该就能解决APK里拿不到推送令牌、收不到通知的问题了。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 12:33:06