Expo通知调用getExpoPushTokenAsync()后应用崩溃求助
解决Expo 47 + Notifications 0.17.0获取推送令牌后崩溃的问题
针对你遇到的调用Notifications.getExpoPushTokenAsync()获取令牌后应用崩溃、报错涉及@ide/backoff和util.types.isPromise的问题,以下是经过验证的解决方向:
1. 强制指定兼容的@ide/backoff版本
报错核心是@ide/backoff的computeNextBackoffInterval方法未找到,这是因为Expo 47与expo-notifications@0.17.0对@ide/backoff的版本依赖存在冲突。你需要手动锁定兼容版本:
- 在
package.json中添加或修改依赖:"dependencies": { "@ide/backoff": "2.2.1" } - 执行以下命令重新安装依赖:
rm -rf node_modules package-lock.json npm install
2. 清除Expo缓存并重建项目
Metro缓存或旧的构建文件可能导致模块加载异常,执行以下操作彻底清理:
expo r -c
该命令会清除Expo的缓存并重启开发服务器,确保所有依赖模块被正确解析。
3. 移除手动传入的devicePushToken
在Expo Go环境下,Notifications.getExpoPushTokenAsync()会自动处理设备令牌的获取与注册,手动传入devicePushToken可能触发内部逻辑冲突。简化代码为:
const expoPushTokenResponse = await Notifications.getExpoPushTokenAsync(); console.log('Expo Push Token:', expoPushTokenResponse.data);
4. 检查Babel配置是否为Expo默认设置
错误中的_$$_REQUIRE是Metro打包的模块引用标识,若Babel配置被修改,可能导致模块解析错误。确保babel.config.js保持默认:
module.exports = function(api) { api.cache(true); return { presets: ['babel-preset-expo'], }; };
内容的提问来源于stack exchange,提问作者ProvingBard
相关产品推荐
相关产品推荐

