在博览会应用程序上请求通知权限时收到错误

Luc*_*ias 10 javascript android typescript expo

我有一个简单的代码,要求过去有效的通知权限,但突然间,它给了我这个错误:

\n

“错误:调用本机方法时遇到异常:在模块 ExpoNotificationPermissionsModule 上执行导出方法 requestPermissionsAsync 时发生异常:字符串资源 ID #0xffffffff”

\n

代码:

\n
    if (isDevice) {\n        const { status: existingStatus } = await Notifications.getPermissionsAsync();\n        let finalStatus = existingStatus;\n        if (existingStatus !== "granted") {\n            const { status } = await Notifications.requestPermissionsAsync();\n            finalStatus = status;\n        }\n        if (finalStatus !== "granted") {\n            Alert.alert("Falha ao obter permiss\xc3\xa3o para notifica\xc3\xa7\xc3\xb5es push!", "\xc3\x89 necess\xc3\xa1rio permitir o envio de notifica\xc3\xa7\xc3\xb5es push para o aplicativo funcionar corretamente.");\n            return "";\n        }\n        token = (await Notifications.getExpoPushTokenAsync()).data;\n    } else {\n        alert("Para gerar o token de notifica\xc3\xa7\xc3\xa3o voc\xc3\xaa precisa estar em um dispositivo f\xc3\xadsico!");\n    }\n
Run Code Online (Sandbox Code Playgroud)\n

Irf*_*mad 17

在 Android 13 上,应用程序用户必须选择通过操作系统自动触发的权限提示来接收通知。至少创建一个通知通道后,才会出现此提示。必须在 getDevicePushTokenAsync 或 getExpoPushTokenAsync 之前调用 setNotificationChannelAsync 才能获取推送令牌。您可以在官方文档中阅读有关 Android 13 新通知权限行为的更多信息。

async function registerForPushNotificationsAsync() {
  let token;

  if (Platform.OS === 'android') {
    await Notifications.setNotificationChannelAsync('default', {
      name: 'default',
      importance: Notifications.AndroidImportance.MAX,
      vibrationPattern: [0, 250, 250, 250],
      lightColor: '#FF231F7C',
    });
  }

  if (Device.isDevice) {
    const { status: existingStatus } = await Notifications.getPermissionsAsync();
    let finalStatus = existingStatus;
    if (existingStatus !== 'granted') {
      const { status } = await Notifications.requestPermissionsAsync();
      finalStatus = status;
    }
    if (finalStatus !== 'granted') {
      alert('Failed to get push token for push notification!');
      return;
    }
    token = (await Notifications.getExpoPushTokenAsync()).data;
    console.log(token);
  } else {
    alert('Must use physical device for Push Notifications');
  }

  return token;
}
Run Code Online (Sandbox Code Playgroud)

清除存储数据并卸载 expo go 应用程序。再次下载,应用程序应该会提示许可。


小智 8

同样的故事在这里,直到最近才有效。甚至没有查看负责注册通知的代码部分。由于它与代码库无关,请在其他地方查找问题源。我的手机最近更新到了新的操作系统版本,因此我卸载了expo并清除了所有应用程序数据/存储。此外,我还更新了 expo-cli 并从使用相同设备的原始代码库开始。我收到通知许可的提示,这部分代码失败了。虽然安全存储现在不起作用:-)。无论如何,这对你来说是一个起点。