Код-ревью Middle Push-уведомления обновлено

Код-ревью: настройка уведомлений

Вопрос

Инициализация уведомлений в корне приложения. Найдите проблемы.

export function App() {
  useEffect(() => {
    (async () => {
      await Notifications.requestPermissionsAsync();
      const token = (await Notifications.getExpoPushTokenAsync()).data;
      if (!(await AsyncStorage.getItem('tokenSent'))) {
        await api.saveToken(token);
        await AsyncStorage.setItem('tokenSent', '1');
      }
    })();
    Notifications.addNotificationResponseReceivedListener((r) => {
      const order = JSON.parse(r.notification.request.content.data.order);
      navigationRef.navigate('Order', { order });
    });
  }, []);
  return <RootNavigator />;
}

Коротко

Разрешение после объясняющего экрана с проверкой результата, токен на сервер при каждом запуске с привязкой к пользователю, слушатели с очисткой, обработка холодного старта, в данных только тип и id, навигация после готовности и проверки входа.

Что должен найти ревьюер

  1. Стильстрока 4
    Системный запрос разрешения сразу при старте, без объяснения: высокий шанс отказа, а повторно iOS не спросит. Сначала свой экран с пользой.
  2. Ошибкастрока 5
    Результат запроса разрешения не проверяется: при отказе токен всё равно запрашивается, ошибки не обрабатываются.
  3. Ошибкастрока 6
    Токен отправляется один раз за всё время: при смене токена или смене пользователя сервер не узнает. Отправлять при каждом запуске и привязывать к текущему пользователю.
  4. Ошибкастрока 11
    Слушатель не удаляется в очистке эффекта, и не обработан холодный старт (начальное уведомление).
  5. Ошибкастрока 12
    Весь заказ передаётся в уведомлении и в параметры навигации: устаревшие данные, ограничение размера, персональные данные; JSON.parse упадёт на неожиданных данных. Передавать id.
  6. Ошибкастрока 13
    Навигация без проверки готовности navigationRef и авторизации.

Разбор

Разрешение после объясняющего экрана с проверкой результата, токен на сервер при каждом запуске с привязкой к пользователю, слушатели с очисткой, обработка холодного старта, в данных только тип и id, навигация после готовности и проверки входа.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.