У меня есть приложение Expo, которое не получает разрешения на iOS. Я следую гид по выставкам, экспо сгенерировал мои сертификаты, использовал в основном точно код из документы 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
}),
});
}
Другая информация:
Я знаю, что это старый вопрос, но, поскольку на него нет ответа, я соберу общие шаги для его исправления.
Если вы получаете статус «неопределенно» при тестировании приложения через TestFlight или фактической установке из App Store, вам необходимо настроить файл сертификат push-уведомления для производства. Я уверен, что вы также получили электронное письмо, в котором говорилось что-то о ITMS-90078: Отсутствует право на push-уведомление.
Вам нужно сделать две-три вещи...
Во-первых, вещи, упомянутые здесь:
In order to fix this, you need to enable "Push notifications" for your app on the app store.
- Login to https://developer.apple.com/
- Go to the "Certificates, Identifiers and Profiles" section
- Select "App IDs" in the Identifiers section on the left column
- Choose your app ID, edit it and check "Push Notifications". Save changes
- Generate a certificate for the production push service: go to the "Certificates" section, and follow the assistant to add a "Apple Push Notification service SSL (Sandbox & Production)" certificate for your app. Acute readers will notice that expo does not need this certificate since it uses a key to talk to Apple directly
TL;DR: Expo needs to enable the "Push Notification" service when creating the app in the Apple Developer Portal
Во-вторых, я уверен, что вы уже опубликовали свое приложение, поэтому вам нужно изменить expo.ios.buildNumber
в вашем файле app.json, а затем перестроить приложение с параметром профиля очистки, например следующим образом:
expo build:ios --clear-provisioning-profile
Таким образом, Expo создаст сборку с push-уведомлениями, которые теперь активированы в вашем идентификаторе приложения.
Наконец, снова загрузите его из загрузчика приложений. Вы должны быть в порядке.
Надеюсь это поможет.
ВАЖНЫЙ. Если очистка только файла подготовки не работает, попробуйте очищая все с помощью команды expo build:ios -c