Миграция Adapty React Native SDK на v3.14
Adapty React Native SDK 3.14.0 — это мажорный релиз, который содержит улучшения, требующие выполнения шагов миграции с вашей стороны:
- Метод
registerEventHandlersзаменён методомsetEventHandlers. - В
AdaptyOnboardingViewобработчики событий теперь передаются как отдельные пропсы вместо объектаeventHandlers - Введён новый упрощённый стиль импорта UI-компонентов
- Метод
logShowOnboardingудалён - Минимальная версия React Native обновлена до 0.73.0
- Стиль презентации iOS по умолчанию для пейволов и онбордингов изменился с page sheet на полноэкранный
Замените registerEventHandlers на setEventHandlers
Метод registerEventHandlers, используемый для работы с Adapty Paywall Builder и Onboarding Builder, заменён методом setEventHandlers.
Если вы используете Adapty Paywall Builder и/или Adapty Onboarding Builder, найдите registerEventHandlers в коде своего приложения и замените на setEventHandlers.
Изменение внесено для большей ясности в поведении метода: обработчики теперь работают по одному, поскольку каждый возвращает true/false, а наличие нескольких обработчиков для одного события делало итоговое поведение непредсказуемым.
Обратите внимание: при использовании React-компонентов AdaptyOnboardingView или AdaptyPaywallView вам не нужно возвращать true/false из обработчиков событий, так как видимость компонента управляется через собственный state. Возвращаемые значения нужны только при модальном показе экранов, где SDK сам управляет жизненным циклом представления.
Каждый новый вызов setEventHandlers перезаписывает переданные обработчики, заменяя как стандартные, так и ранее заданные для указанных событий.
- const unsubscribe = view.registerEventHandlers({
- // your event handlers
- })
const unsubscribe = view.setEventHandlers({
// your event handlers
})
Обновление путей импорта для UI-компонентов
В Adapty SDK 3.14.0 появился упрощённый стиль импорта UI-компонентов. Теперь вместо импорта из react-native-adapty/dist/ui можно импортировать напрямую из react-native-adapty.
Новый стиль импорта лучше соответствует стандартным практикам React Native и делает строки импорта чище. Если вы используете UI-компоненты вроде AdaptyPaywallView или AdaptyOnboardingView, обновите импорты, как показано ниже:
- import { AdaptyPaywallView } from 'react-native-adapty/dist/ui';
+ import { AdaptyPaywallView } from 'react-native-adapty';
- import { AdaptyOnboardingView } from 'react-native-adapty/dist/ui';
+ import { AdaptyOnboardingView } from 'react-native-adapty';
- import { createPaywallView } from 'react-native-adapty/dist/ui';
+ import { createPaywallView } from 'react-native-adapty';
- import { createOnboardingView } from 'react-native-adapty/dist/ui';
+ import { createOnboardingView } from 'react-native-adapty';
Для обратной совместимости старый стиль импорта (react-native-adapty/dist/ui) по-прежнему поддерживается. Однако мы рекомендуем использовать новый стиль импорта для единообразия и ясности.
Обновите обработчики событий онбординга в React-компоненте
Обработчики событий для онбордингов перенесены за пределы объекта eventHandlers в AdaptyOnboardingView. Если вы отображаете онбординги с помощью AdaptyOnboardingView, обновите структуру обработки событий.
Обратите внимание на рекомендуемый способ реализации обработчиков событий. Чтобы избежать пересоздания объектов при каждом рендере, используйте useCallback для функций, которые обрабатывают события.
import React, { useCallback } from 'react';
- import { AdaptyOnboardingView } from 'react-native-adapty/dist/ui';
+ import { AdaptyOnboardingView } from 'react-native-adapty';
+ import type { OnboardingEventHandlers } from 'react-native-adapty';
+
+ function MyOnboarding({ onboarding }) {
+ const onAnalytics = useCallback<OnboardingEventHandlers['onAnalytics']>((event, meta) => {}, []);
+ const onClose = useCallback<OnboardingEventHandlers['onClose']>((actionId, meta) => {}, []);
+ const onCustom = useCallback<OnboardingEventHandlers['onCustom']>((actionId, meta) => {}, []);
+ const onPaywall = useCallback<OnboardingEventHandlers['onPaywall']>((actionId, meta) => {}, []);
+ const onStateUpdated = useCallback<OnboardingEventHandlers['onStateUpdated']>((action, meta) => {}, []);
+ const onFinishedLoading = useCallback<OnboardingEventHandlers['onFinishedLoading']>((meta) => {}, []);
+ const onError = useCallback<OnboardingEventHandlers['onError']>((error) => {}, []);
+
return (
<AdaptyOnboardingView
onboarding={onboarding}
style={styles.container}
- eventHandlers={{
- onAnalytics(event, meta) { /* ... */ },
- onClose(actionId, meta) { /* ... */ },
- onCustom(actionId, meta) { /* ... */ },
- onPaywall(actionId, meta) { /* ... */ },
- onStateUpdated(action, meta) { /* ... */ },
- onFinishedLoading(meta) { /* ... */ },
- onError(error) { /* ... */ },
- }}
+ onAnalytics={onAnalytics}
+ onClose={onClose}
+ onCustom={onCustom}
+ onPaywall={onPaywall}
+ onStateUpdated={onStateUpdated}
+ onFinishedLoading={onFinishedLoading}
+ onError={onError}
/>
);
+ }
Для обратной совместимости проп eventHandlers по-прежнему поддерживается, но считается устаревшим. Рекомендуем перейти на отдельные пропы обработчиков событий, как показано выше.
Удалите logShowOnboarding
В Adapty SDK 3.14.0 метод logShowOnboarding удалён из SDK.
Если вы использовали этот метод, после обновления SDK до версии 3.14 и выше он будет недоступен.
Вместо него вы можете создавать онбординги в no-code конструкторе онбордингов Adapty. Аналитика для таких онбордингов отслеживается автоматически, а возможностей для кастомизации достаточно много.
Обновите React Native
Начиная с Adapty SDK 3.14.0, минимальная поддерживаемая версия React Native — 0.73.0. Если вы используете более раннюю версию, обновите React Native до 0.73.0 или выше, чтобы работа с Adapty SDK оставалась стабильной и предсказуемой.
Обновите стиль представления iOS для модальных пейволов и онбордингов
В Adapty SDK 3.14.0 стиль представления по умолчанию для пейволов и онбордингов, отображаемых с помощью метода view.present(), изменился с page sheet на полный экран на iOS.
Если вы хотите сохранить прежний стиль представления page sheet, передайте параметр iosPresentationStyle в метод present():
try {
await view.present({ iosPresentationStyle: 'page_sheet' });
} catch (error) {
// handle the error
}