Использование резервных пейволов в проекте Expo

Это руководство применимо к проектам на Expo. Если вы используете чистый React Native (без Expo), следуйте гайду по резервным пейволам для чистого React Native.

Чтобы поддерживать бесперебойный пользовательский опыт, важно настроить резервные пейволы для флоу, пейволов и онбордингов. Это позволит приложению продолжить работу при частичной или полной потере интернет-соединения.

  • Если приложение не может обратиться к серверам Adapty:

    Оно сможет отобразить резервный флоу или пейвол, а также использовать локальную конфигурацию онбординга.

  • Если приложение не может подключиться к интернету:

    Оно сможет отобразить резервный флоу или пейвол. Онбординги содержат удалённый контент и требуют интернет-соединения для работы.

Прежде чем следовать шагам этого гайда, скачайте файлы резервной конфигурации из Adapty.

SDK Adapty считывает резервный файл из нативного бандла — ресурса iOS внутри пакета .app или записи в android/app/src/main/assets/. В Expo-проекте команда npx expo prebuild --clean каждый раз пересоздаёт эти директории, поэтому добавлять файлы вручную не получится. Конфиг-плагин react-native-adapty автоматически подключает файл к нативному бандлу.

Полностью рабочий пример доступен в приложении FocusJournalExpo.

Настройка

  1. Разместите резервные JSON-файлы в любом месте проекта — как правило, рядом с другими ассетами:

    <your-project>/
    └── assets/
        ├── ios_fallback.json
        └── android_fallback.json
  2. Добавьте опцию fallbackFile в запись react-native-adapty в файле app.json (или app.config.js). Каждый ключ платформы необязателен — подключайте только нужные платформы:

   {
     "expo": {
       "plugins": [
         [
           "react-native-adapty",
           {
             "fallbackFile": {
               "ios": "./assets/ios_fallback.json",
               "android": "./assets/android_fallback.json"
             }
           }
         ]
       ]
     }
   }

Adapty экспортирует отдельный JSON резервного пейвола для каждой платформы — с идентификаторами продуктов Apple на iOS и Google Play на Android. Укажите для каждой платформы свой файл.

  1. Пересоздайте нативные проекты:
   npx expo prebuild

Плагин добавляет iOS-файл в ресурсы бандла Xcode и копирует Android-файл в android/app/src/main/assets/. В выводе prebuild появятся строки вида:

[react-native-adapty] Registered ios_fallback.json as iOS bundle resource
[react-native-adapty] Copied android_fallback.json to android assets/
  1. Зарегистрируйте файл в SDK во время выполнения:
   import { adapty } from 'react-native-adapty';

   await adapty.activate('PUBLIC_SDK_KEY');

   await adapty.setFallback({
     ios: { fileName: 'ios_fallback.json' },
     android: { relativeAssetPath: 'android_fallback.json' },
   });

Имена файлов, передаваемых в setFallback, должны совпадать с базовыми именами файлов, настроенных в fallbackFile.

setFallback должен выполняться до того, как SDK запросит целевой флоу, пейвол или онбординг.

Проверка

После выполнения npx expo prebuild проверьте обе платформы:

  • Android: просмотрите содержимое директории android/app/src/main/assets/. Файл, указанный в fallbackFile.android, должен присутствовать, а имя файла только для iOS — отсутствовать.
  • iOS: найдите в файле ios/<ProjectName>.xcodeproj/project.pbxproj имя файла только для iOS. Оно должно встречаться в PBXFileReference, группе Resources и PBXResourcesBuildPhase. Имя файла только для Android не должно появляться в project.pbxproj.