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

Expo应用请求通知权限时触发异常问题求助

解决Expo通知权限请求报错:String resource ID #0xffffffff

你遇到的错误是Android端Expo通知模块的资源引用异常,通常和SDK版本、缓存或资源配置有关。先看你的原代码:

if (isDevice) {
    const { status: existingStatus } = await Notifications.getPermissionsAsync();
    let finalStatus = existingStatus;
    if (existingStatus !== "granted") {
        const { status } = await Notifications.requestPermissionsAsync();
        finalStatus = status;
    }
    if (finalStatus !== "granted") {
        Alert.alert("Falha ao obter permissão para notificações push!", "É necessário permitir o envio de notificações push para o aplicativo funcionar corretamente.");
        return "";
    }
    token = (await Notifications.getExpoPushTokenAsync()).data;
} else {
    alert("Para gerar o token de notificação você precisa estar em um dispositivo físico!");
}

排查和解决步骤:

  • 升级Expo SDK到稳定版:旧版本的ExpoNotificationPermissionsModule存在资源引用bug,执行expo upgrade将SDK及依赖更新到最新兼容版本。
  • 清除项目缓存:缓存损坏会导致资源加载异常,运行expo r -c清除缓存后重启项目。
  • 显式指定权限配置:调用requestPermissionsAsync时传入具体的权限参数,避免模块默认资源引用出错,修改后的调用如下:
    const { status } = await Notifications.requestPermissionsAsync({
      ios: {
        allowAlert: true,
        allowBadge: true,
        allowSound: true,
      },
      android: {
        allowAlert: true,
        allowBadge: true,
        allowSound: true,
        allowVibrate: true,
      },
    });
    
  • 确认Android权限声明:检查app.json中的Android配置,确保包含通知权限:
    "android": {
      "permissions": ["POST_NOTIFICATIONS"]
    }
    

修正后的完整代码:

if (isDevice) {
    const { status: existingStatus } = await Notifications.getPermissionsAsync();
    let finalStatus = existingStatus;
    if (existingStatus !== "granted") {
        // 显式指定权限配置
        const { status } = await Notifications.requestPermissionsAsync({
            ios: {
                allowAlert: true,
                allowBadge: true,
                allowSound: true,
            },
            android: {
                allowAlert: true,
                allowBadge: true,
                allowSound: true,
                allowVibrate: true,
            },
        });
        finalStatus = status;
    }
    if (finalStatus !== "granted") {
        Alert.alert("Falha ao obter permissão para notificações push!", "É necessário permitir o envio de notificações push para o aplicativo funcionar corretamente.");
        return "";
    }
    token = (await Notifications.getExpoPushTokenAsync()).data;
} else {
    alert("Para gerar o token de notificação você precisa estar em um dispositivo físico!");
}

内容的提问来源于stack exchange,提问作者Lucas Gardini Dias

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 21:21:47