我有一个简单的代码,要求过去有效的通知权限,但突然间,它给了我这个错误:
“错误:调用本机方法时遇到异常:在模块 ExpoNotificationPermissionsModule 上执行导出方法 requestPermissionsAsync 时发生异常:字符串资源 ID #0xffffffff”
Code:
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!");
}
在 Android 13 上,应用程序用户必须选择通过操作系统自动触发的权限提示来接收通知。直到至少创建一个通知通道后才会出现此提示。必须在 getDevicePushTokenAsync 或 getExpoPushTokenAsync 之前调用 setNotificationChannelAsync 才能获取推送令牌。您可以在以下位置详细了解 Android 13 的新通知权限行为:官方文档 https://developer.android.com/develop/ui/views/notifications/notification-permission#new-apps.
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;
}
清除存储数据并卸载 expo go 应用程序。再次下载,应用程序应该会提示许可。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)