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

#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.

  1. Войдите в https://developer.apple.com /
  2. Перейдите в раздел «Сертификаты, идентификаторы и профили»
  3. Выберите «Идентификаторы приложений» в разделе Идентификаторы в левой колонке
  4. Выберите свой идентификатор приложения, отредактируйте его и установите флажок «Push-уведомления». Сохранение изменений
  5. Создайте сертификат для производственной службы 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