Автономное приложение Expo для iOS возвращает «неопределенные» разрешения, но работает везде

У меня есть приложение 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
    }),
  });
}

Другая информация:

  • Экспо SDK 32
  • айфон хр
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
0
1 138
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Я знаю, что это старый вопрос, но, поскольку на него нет ответа, я соберу общие шаги для его исправления.

Если вы получаете статус «неопределенно» при тестировании приложения через 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.

  1. Login to https://developer.apple.com/
  2. Go to the "Certificates, Identifiers and Profiles" section
  3. Select "App IDs" in the Identifiers section on the left column
  4. Choose your app ID, edit it and check "Push Notifications". Save changes
  5. 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

Другие вопросы по теме