Я тестирую на внешнем iPhone, так как знаю, что push-уведомления не работают на симуляторе. Мои токены Expo не отправлялись в мою базу данных Firebase, поэтому я покопался в коде и обнаружил, что моя переменная status
из асинхронного вызова Permissions.askAsync(Permissions.NOTIFICATIONS)
возвращается как undetermined
. Все ответы, которые я видел на этом форуме, относятся к этой проблеме с симулятора, поэтому я не понимаю, почему это происходит.
- Когда я впервые открыл приложение на iPhone, я разрешил push-уведомления.
Вот соответствующий код, который я использую по существу прямо из документов:
import { Font, AppLoading, Permissions, Notifications } from 'expo';
и вызываемая функция componentDidMount()
registerForPushNotificationsAsync = async (user) => {
const { status: existingStatus } = await Permissions.getAsync(
Permissions.NOTIFICATIONS
);
let finalStatus = existingStatus;
// only ask if permissions have not already been determined, because
// iOS won't necessarily prompt the user a second time.
if (existingStatus !== 'granted') {
// Android remote notification permissions are granted during the app
// install, so this will only ask on iOS
const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
console.log(status);
finalStatus = status;
}
// Stop here if the user did not grant permissions
if (finalStatus !== 'granted') {
return;
}
// Get the token that uniquely identifies this device
let token = await Notifications.getExpoPushTokenAsync();
alert(token);
var updates = {}
updates['/expoToken'] = token;
database.ref('users').child(user.uid).update(updates)
}
Это журнал консоли состояния после Permissions.getAsync
Как вы видите, я записывал в консоль переменную состояния, и в этот момент она показывает неопределенный статус.
Как еще я могу помочь отладить эту проблему? Спасибо!