#ios #react-native #push-notification #expo
#iOS #react-native #Push-уведомление #expo
Вопрос:
У меня есть приложение Expo, которое не получает разрешения на iOS. Я следую руководству expo, заставил expo сгенерировать мои сертификаты, использовал в основном точно код из документов push-уведомлений, разрешил push-уведомления в приложении, но iOS всегда возвращает «неопределенные» разрешения. Запуск моего приложения в приложении Expo на моем телефоне работает, работает Android, но не в самом приложении iOS. Из того, что я могу найти, в app.json не должно быть ничего об уведомлениях, верно?
Вот функция регистрации, просто для справки:
export async function registerForPushNotificationsAsync() {
const { status: existingStatus } = await Permissions.getAsync(
Permissions.NOTIFICATIONS
);
let finalStatus = existingStatus;
if (existingStatus !== 'granted') {
const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
finalStatus = status;
}
// Status is always 'undetermined' on iOS standalone app.
if (finalStatus !== 'granted') {
return;
}
// Get the token that uniquely identifies this device
let token = await Notifications.getExpoPushTokenAsync();
// POST the token to your backend server from where you can retrieve it to send push notifications.
return fetch(settings.api_url 'push-token', {
method: 'POST',
headers: {
Accept: 'application/json',
'Content-Type': 'application/json',
},
body: JSON.stringify({
push_token: token,
api_key: ui.user.api_key
}),
});
}
Другая информация:
- Expo SDK 32
- iPhone XR
Ответ №1:
Я знаю, что это старый вопрос, но поскольку на него не было ответа, я соберу общие шаги для исправления этого.
Если вы получаете статус «не определено» при тестировании приложения через TestFlight или при фактической установке из App Store, вам необходимо настроить сертификат push-уведомлений для производства. Я уверен, что вы также получили электронное письмо с сообщением о ITMS-90078: отсутствует право на получение push-уведомлений.
Вам нужно сделать две или три вещи…
Во-первых, упомянутые здесь вещи:
Чтобы исправить это, вам необходимо включить «Push-уведомления» для вашего приложения в app Store.
- Войдите в https://developer.apple.com /
- Перейдите в раздел «Сертификаты, идентификаторы и профили»
- Выберите «Идентификаторы приложений» в разделе Идентификаторы в левой колонке
- Выберите свой идентификатор приложения, отредактируйте его и установите флажок «Push-уведомления». Сохранение изменений
- Создайте сертификат для производственной службы push: перейдите в раздел «Сертификаты» и следуйте инструкциям помощника, чтобы добавить сертификат «службы push-уведомлений Apple SSL (изолированная среда и производство)» для вашего приложения. Проницательные читатели заметят, что expo не нуждается в этом сертификате, поскольку он использует ключ для прямого общения с Apple
TL; DR: Expo необходимо включить службу «Push-уведомлений» при создании приложения на портале разработчиков Apple
Во-вторых, я уверен, что вы уже опубликовали свое приложение, поэтому вам нужно изменить expo.ios.buildNumber
в своем файле app.json, а затем перестроить приложение с помощью параметра clear provisioning profile следующим образом:
expo build:ios --clear-provisioning-profile
Таким образом, Expo сгенерирует сборку с помощью push-уведомлений, которые теперь активированы в вашем идентификаторе App ID.
Наконец, загрузите его снова из загрузчика приложений. Все должно быть в порядке.
Надеюсь, это поможет.
ВАЖНО.Если очистка только файла подготовки не работает, попробуйте очистить все с помощью команды expo build:ios -c