Notifications.getExpoPushTokenAsync не работает на автономной iOS

#ios #react-native #expo

#iOS #react-native #выставка

Вопрос:

Я пытаюсь в своем проекте expo / react-native отправлять push-уведомления на мой сервер. Он работает на автономном Android, но не на автономном iPhone.

Автономное приложение для iPhone никогда не отправляет токен.

Поскольку приложение ничего не отправляет без ошибок, я попытался удалить:

if (finalStatus !== 'granted') { return; }

Это тоже не сработало.

 export async function registerForPushNotificationsAsync(token) {

  const { status: existingStatus } = await Permissions.getAsync(
    Permissions.NOTIFICATIONS
  );
  let finalStatus = existingStatus;

  // Only ask if permissions have not already been determined, for iOS.
  if (existingStatus !== 'granted') {
    const { status } = await Permissions.askAsync(Permissions.NOTIFICATIONS);
    finalStatus = status;
  }

  // Stop here if the user did not grant permissions
  if (finalStatus !== 'granted') {
    return;
  }

  // Get the push token that uniquely identifies this device
  let expoToken = await Notifications.getExpoPushTokenAsync();

  // Post new push token to backend for user
  return axios({
    method: 'POST',
    url: `${str.ROOT_URL}/account/push/`,
    headers: {
      Authorization: `Token ${token}`
    },
    data: {
      "token": expoToken,
      "status": finalStatus
    }
  });

}
  

Я ожидал, что токен будет отправлен на серверную часть, но в автономном приложении iOS ничего не отправляется.

Пожалуйста, дайте мне знать, если вы знаете обходной путь или сталкивались с этой проблемой раньше. Спасибо!

Комментарии:

1. Вы нашли решение? мой токен также не отправляется на серверную часть

Ответ №1:

Я думаю, что уже слишком поздно давать ответ, но я потратил 2 дня на его решение… Я надеюсь, что это кому-то поможет.

Вместо этого это:

 import * as Notifications from "expo-notifications";
  

Попробуйте это:

 import { Notifications } from "expo";
  

Комментарии:

1. Здравствуйте, я надеюсь, что вы сможете мне помочь. Я изменил свой импорт на импорт уведомлений из expo, но getDevicePushTokenAsync(), похоже, не решает проблему. Есть идеи, почему?

2. @kalculated Привет. Честно говоря, я не знаю. Убедитесь, что expo не удален, но я думаю, это неправильное предложение.

3. Не беспокойтесь, я обновил свой SDK и исправил ошибки