Skip to main content
PNLight Remote UI позволяет приложению отображать экраны, настроенные в дашборде. Используйте его для пейволов, подсказок, экранов обновления подписки и других элементов приложения, которые может понадобиться менять без выпуска новой версии.

Выбор Remote UI

Приложение запрашивает плейсмент с локалью и идентификатором пользователя. PNLight возвращает подходящую конфигурацию из дашборда, если плейсмент включён и для него есть доступная конфигурация. Создайте в разделе Remote UI каждый плейсмент, который может запросить приложение. При новом запросе к PNLight, например с параметром ignoreCache, UI не возвращается, если плейсмент отсутствует, отключён, удалён или для него нет подходящей конфигурации локали. Дашборд отслеживает:
  • Запросы: пользователи, запросившие плейсмент.
  • Показы: пользователи, получившие конфигурацию UI, которую можно было показать.
До возврата конфигурации PNLight также может применить таргетинг, правила однократного показа, защиту от записи экрана и подстановку значений во время выполнения. Элементы управления описаны в разделе Плейсменты Remote UI. Заполнители времени выполнения обрабатываются на сервере. SDK получает конечные значения конфигурации, например идентификаторы продуктов, после того как PNLight заменит токены вроде {{monthlyProductId}}.

Отображение плейсмента

RemoteUiView вызывает getUIConfig внутри. При первом запуске приложения с атрибуцией AppsFlyer подождите 4–5 секунд после инициализации AppsFlyer перед показом плейсмента, чтобы данные конверсии успели поступить. Если attributionRequired равно true, SDK также ожидает атрибуцию внутри перед запросом конфигурации.

Серверно-управляемые флоу

Remote UI может вернуть флоу вместо одной карточки. Флоу использует schemaVersion: 2, type: "flow", initial_route и объект routes, где каждый маршрут содержит полный документ UI. Отображайте флоу через ту же интеграцию RemoteUiView. SDK обрабатывает нативную навигацию и модальное представление внутри поверхности Remote UI, поэтому приложениям React Native и Flutter не нужна дополнительная настройка навигации для маршрутов PNLight. Используйте URL навигации PNLight внутри маршрутов флоу: PNLight обрабатывает эти URL навигации внутри валидного флоу. Используйте URL приложения, идентификаторы действий или пути действий, когда хост-приложение должно обработать действие через onAction.

Компоненты Remote UI

В разделе Компоненты Remote UI описано, как добавлять компоненты PNLight в конфигурацию и настраивать их свойства.

Версия схемы Remote UI

PNLight версионирует оболочку Remote UI отдельно от версий пакетов SDK. Укажите версию в корне документа.
  • Схема v2 добавляет flow, безопасные области, переменные масштабирования, haptics и диалоги.
  • Схема v3 сохраняет это поведение и добавляет pnlight.purchase, pnlight.progress_bar и pnlight.animated_number.
  • Схема v4 сохраняет поведение схемы v3 и добавляет действия on_fail и on_cancel для pnlight.purchase.
Существующие конфигурации схем v1 и v2 продолжают поддерживаться. Они не выполняют pnlight.purchase и не отображают компоненты схемы v3. Конфигурации схемы v3 по-прежнему запускают только on_success.

Обработка действий

Действия Remote UI передаются приложению. Используйте идентификаторы действий, пути или параметры запроса, чтобы определить, что оно должно сделать. Разные плейсменты могут возвращать разные действия, поэтому обрабатывайте их явно. Распространённые действия:
  • Начать покупку через pnlight.purchase или перейти в покупку на стороне приложения, если нужно собственное поведение.
  • Вернуть пользователя на главный экран приложения после успешной подписки.
  • Закрыть экран.
  • Открыть другой экран приложения.
  • Отследить взаимодействие с продуктом.
Всегда обрабатывайте неизвестные действия. Безопасный резервный вариант — закрыть экран Remote UI или проигнорировать действие.

Системное действие покупки

Используйте pnlight.purchase, когда кнопка Remote UI должна запустить покупку StoreKit через SDK PNLight. Документ должен объявлять "schemaVersion": 3 или "schemaVersion": 4.
params.product_id обязателен. Используйте явный App Store product ID или переменную продукта из плейсмента. Списки действий необязательны. Каждый принимает обычные словари действий DivKit:
  • on_success запускается после успешной покупки. Его поддерживают схемы v3 и v4.
  • on_fail запускается, если покупка завершилась ошибкой. Для этого нужна схема v4.
  • on_cancel запускается, если пользователь закрыл лист StoreKit. Для этого тоже нужна схема v4.
Ожидающая покупка StoreKit не запускает никаких действий. Текущий Remote UI остается на месте, потому что Apple ещё может подтвердить транзакцию позже. Повторные нажатия игнорируются, пока одно системное действие покупки уже выполняется. Конфигурации схемы v3 сохраняют исходное поведение: только on_success. Отмена или ошибка оставляют текущий Remote UI на месте. В предпросмотре дашборда pnlight.purchase открывает симулятор. Success запускает on_success. В схеме v4 Fail запускает on_fail, а Cancel или закрытие симулятора запускают on_cancel. В схеме v3 в предпросмотре по-прежнему только Success и Fail. Fail просто закрывает симулятор. В предпросмотре реальная транзакция StoreKit не выполняется. Используйте обработчик onPurchased в RemoteUiView, если приложению нужно обновить права доступа, открыть контент или изменить навигацию после покупки из Remote UI. Обработчик получает идентификатор купленного продукта. Он срабатывает только для покупок, запущенных этим RemoteUiView, и не срабатывает для ручных вызовов покупки через SDK.

Получение конфигураций вручную

Используйте getUIConfig, если нужно самостоятельно получить конфигурацию плейсмента. При первом запуске приложения, когда требуется атрибуция, вызывайте его после отправки атрибуции и подождите 4–5 секунд после инициализации AppsFlyer перед запросом. SDK всё равно ожидает атрибуцию внутри, если attributionRequired равно true.

Работа кеша конфигураций

По умолчанию конфигурации Remote UI сначала загружаются из кеша. Если кешированная конфигурация существует, SDK может сразу вернуть её и обновить в фоновом режиме с помощью запроса ETag. Благодаря этому повторные показы остаются быстрыми, а изменения из дашборда продолжают поступать. Используйте ignoreCache, когда приложение должно дождаться последнего ответа сервера, например во время QA или после изменения состояния пользователя, которое должно повлиять на таргетинг.

Обработка отсутствующих конфигураций и ошибок

При новом запросе к PNLight значение null или пустая конфигурация означает, что PNLight не вернул UI для плейсмента. Это может произойти, если плейсмента нет в разделе Remote UI, он отключён, условия таргетинга не совпали, правило однократного показа запретило показ, защита от записи экрана заблокировала пользователя, нет конфигурации для подходящей локали или не удалось обработать заполнитель времени выполнения. Оболочки React Native и Flutter сообщают об ошибках загрузки отдельно от отсутствующего UI. Используйте onError в RemoteUiView или обработайте ошибки getUIConfig при ручном запросе. Приложения Swift при ручном запросе могут использовать getUIConfigResult, чтобы различать все результаты:

Настройка в дашборде

Создавайте плейсменты и управляйте ими в разделе Remote UI. Процесс работы в дашборде описан в разделе Плейсменты Remote UI.