javascript - Får feil ved forespørsel om tillatelse til varsling i Expo-app
Jeg har en enkel kode som ber om tillatelse til varsler som fungerte tidligere, men plutselig gir den meg denne feilen:
"Feil: Møtte en unntak mens kallte en native metode: Unntak oppstod under utføring av eksportert metode requestPermissionsAsync på modul ExpoNotificationPermissionsModule: String ressurs-ID #0xffffffff"
Kode :
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!");
}
Svar #1
På Android 13 må appbrukere aktivt gi samtykke for å motta varsler via en tillatelsesforespørsel som automatisk utløses av operativsystemet. Denne forespørselen vises ikke før minst én varslingskanal er opprettet. setNotificationChannelAsync må kalles før getDevicePushTokenAsync eller getExpoPushTokenAsync for å få en push-token. Du kan lese mer om den nye tillatelsesadferden for varsler på Android 13 i den offisielle dokumentasjonen.
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;
}
Tøm lagringsdata og avinstaller Expo Go-appen. Last den ned igjen, og appen skal be om tillatelse.
Svar #2
Samme historie her, det fungerte til nylig. Jeg så ikke engang på delen av koden som er ansvarlig for registrering for varsler. Siden det ikke er relatert til kodebasen, se etter kilde til problemet et annet sted. Telefonen min ble nylig oppdatert til ny OS-versjon, så jeg har avinstallert Expo og slettet all app-data/lager. Jeg har også oppdatert expo-cli og startet med en urørt kodebase på samme enhet. Jeg fikk en forespørsel om tillatelse for varsler, og denne delen av koden gikk igjennom. Selv om sikker lagring ikke fungerer nå :-). Uansett, det er et utgangspunkt for deg.
