Автономное приложение Expo Expo возвращает «неопределенные» разрешения, но работает везде - PullRequest
1 голос
/ 09 апреля 2019

У меня есть приложение 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 Ответ

0 голосов
/ 20 июля 2019

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

Если вы получаете статус «неопределенный» при тестировании приложения черезTestFlight или фактической установки из App Store, затем вам нужно настроить сертификат push-уведомлений для производства .Я уверен, что вы также получили электронное письмо с сообщением о ITMS-90078: отсутствует право на push-уведомление .

Вам нужно сделать две или три вещи ...

Во-первых, вещи, упомянутые здесь :

Чтобы это исправить, вам нужно включить «Push-уведомления» для вашего приложения в магазине приложений.

  1. Войдите в систему https://developer.apple.com/
  2. Перейдите в раздел «Сертификаты, идентификаторы и профили»
  3. Выберите «Идентификаторы приложений» в разделе «Идентификаторы» в левом столбце
  4. Выберите идентификатор приложения, отредактируйте его и установите флажок «Push-уведомления».Сохраните изменения
  5. Создайте сертификат для рабочей службы push-уведомлений: перейдите в раздел «Сертификаты» и следуйте инструкциям помощника, чтобы добавить сертификат «Apple Push Notification Service SSL (Sandbox & Production)» для вашего приложения.Острые читатели заметят, что expo не нуждается в этом сертификате, поскольку он использует ключ для прямой связи с Apple

TL; DR: Expo необходимо включить службу «Push Notification» при создании приложения вApple Developer Portal

Во-вторых, я уверен, что вы уже опубликовали свое приложение, поэтому вам нужно изменить expo.ios.buildNumber в файле app.json изатем перестройте приложение с параметром профиля четкой инициализации следующим образом:

expo build:ios --clear-provisioning-profile

Таким образом, Expo создаст сборку с Push-уведомлениями, которые теперь активированы в вашем идентификаторе идентификатора приложения.

Наконец, снова загрузите его из загрузчика приложений.С вами все будет в порядке.

Надеюсь, это поможет.

ВАЖНО. Если очистка только файла обеспечения не работает, попробуйте очистить все с помощьюкоманда expo build:ios -c

...