Ometria помогает вашему отделу маркетинга понимать ваших клиентов и лучше взаимодействовать с ними, отправляя персонализированные электронные письма и push-уведомления.
Приложение преследует две ключевые цели:
Для вашего мобильного приложения это означает:
Разработчикам приложений, интегрирующихся с этим SDK, следует следовать приведенному ниже руководству. Вы также можете посмотреть образец приложения, который мы включили в качестве эталонной реализации.
См. раздел Настройка мобильного приложения с использованием учетных данных Firebase в справочном центре Ometria и следуйте инструкциям, чтобы получить ключ API.
Самый простой способ добавить Ometria в ваш проект ReactNative — использовать npm install
или yarn add
.
react-native-ometria
, используя npm install react-native-ometria
или yarn add react-native-ometria
Примечание. Если у вас возникли проблемы с установкой библиотеки, рассмотрите возможность исключения примера из конфигурации typescript, например:
{
...,
"exclude": ["example"]
}
Для iOS
вам необходимо установить pod install
Pods, чтобы создать локальное зеркало спецификации CocoaPods.
Если вы столкнулись с The Swift pod 'Ometria' depends upon 'FirebaseMessaging'
при запуске установки модуля, рассмотрите возможность добавления use_frameworks! :linkage => :static
.
Чтобы инициализировать Ometria SDK, вам необходимо ввести ключ API из номера 2. Прежде чем начать .
import Ometria from 'react-native-ometria' ;
await Ometria . initializeWithApiToken ( 'API_KEY' , {
notificationChannelName : 'Example Channel Name' , // optional, only for Android
appGroupIdentifier : 'group.com.ometria.sampleRN' , // optional, only for iOS
} ) ;
Начиная с версии 2.3.0 SDK позволяет повторно инициализировать экземпляр Ometria. Таким образом, вы можете вызвать этот метод позже в приложении, если вам нужно.
Вы можете указать собственное имя канала уведомлений Android во втором дополнительном параметре. Имя канала по умолчанию — <blank>
.
Вы также можете указать идентификатор группы приложений во втором необязательном параметре. См. этот раздел для iOS.
По умолчанию Ometria регистрирует любые ошибки, возникающие во время выполнения. Эти журналы доступны в консоли вашей среды разработки.
Вы можете включить расширенное ведение журнала, если хотите получить больше информации о том, что происходит в фоновом режиме. Просто добавьте следующую строку после инициализации библиотеки:
Ometria . isLoggingEnabled ( true ) ;
Вам необходимо знать о поведении пользователей на ваших платформах, чтобы понять их. Некоторое поведение обнаруживается автоматически, для отслеживания других событий требуется работа разработчика приложения.
Многие из этих методов имеют аналогичные события в трекере нашего сайта.
Например, событие «Идентификация клиента» принимает идентификатор клиента или адрес электронной почты — эти идентификаторы здесь должны быть такими же, как и в API данных. Если вы укажете и адрес электронной почты, и идентификатор клиента, они должны совпадать.
События объединяются на стороне Ometria в одно большое межканальное представление о поведении ваших клиентов. Если вы используете противоречивые адреса электронной почты/идентификаторы клиентов, это может привести к созданию дубликатов профилей или потере данных.
После инициализации SDK вы можете отслеживать событие, вызывая его специальный метод.
Пользователь приложения только что идентифицировал себя, т.е. вошел в систему.
Ometria . trackProfileIdentifiedByCustomerIdEvent ( 'test_customer_id' ) ;
Их идентификатор клиента — это их идентификатор пользователя в вашей базе данных.
Иногда пользователь указывает только свой адрес электронной почты, не войдя в систему или не имея учетной записи. В этом случае Ometria может профилировать сопоставление на основе электронной почты:
Ometria . trackProfileIdentifiedByEmailEvent ( '[email protected]' ) ;
Наличие идентификатора клиента делает сопоставление профилей более надежным.
Это не является взаимоисключающим с отправкой события по электронной почте; для оптимальной интеграции вам следует отправить любое событие, как только у вас появится информация. Эти два события имеют решающее значение для функционирования SDK, поэтому обязательно отправляйте их как можно раньше. Повторяем здесь, что эти идентификаторы должны быть такими же, как те, которые вы используете на своей платформе электронной коммерции и отправляете в Ometria (через API данных или другими способами). Если вы укажете и адрес электронной почты, и идентификатор клиента, они должны совпадать. Типичная ошибка, которую мы видим при интеграции, заключается в том, что приложение генерирует новый идентификатор клиента при каждом входе в систему (который не соответствует идентификатору клиента, хранящемуся в Ometria). Чтобы избежать этого, создавайте эти идентификаторы централизованно на своих серверах и отправляйте согласованные через мобильный SDK Ometria и API данных Ometria. Если создание согласованных идентификаторов нецелесообразно, мы предлагаем использовать только электронную почту для идентификации контактов.
Отменить событие ProfileIdentified. Вы можете использовать это, если пользователь выходит из системы.
Ometria . trackProfileDeidentifiedEvent ( ) ;
В настоящее время это событие удаляет сохраненные идентификаторы (адрес электронной почты и/или идентификатор клиента) из локального хранилища телефона. Никакого другого эффекта в Ометрии он не имеет.
Посетитель нажимает, нажимает, просматривает, выделяет или иным образом проявляет интерес к продукту.
Например, посетитель выполняет поиск по запросу и выбирает один из предварительных просмотров продукта из набора результатов или просматривает категорию одежды и нажимает на конкретную рубашку, чтобы увидеть увеличенное изображение.
Это мероприятие призвано привлечь внимание посетителей к этому продукту.
Ometria . trackProductViewedEvent ( 'product_id' ) ;
Посетитель просмотрел специальную страницу, экран или модальное окно с содержимым корзины покупок:
Ometria . trackBasketViewedEvent ( ) ;
Посетитель изменил корзину покупок:
const items : OmetriaBasketItem [ ] = [
{
productId : 'product-1' ,
sku : 'sku-product-1' ,
quantity : 1 ,
price : 12.0 ,
variantId : 'variant-1' ,
} ,
{
productId : 'product-2' ,
sku : 'sku-product-2' ,
quantity : 2 ,
price : 9.0 ,
variantId : 'variant-2' ,
} ,
{
productId : 'product-3' ,
sku : 'sku-product-3' ,
quantity : 3 ,
price : 20.0 ,
variantId : 'variant-3' ,
} ,
] ;
Ometria . trackBasketUpdatedEvent ( {
totalPrice : 12.0 ,
id : 'basket_id_eg' ,
currency : 'USD' ,
items ,
link : 'link_eg' ,
} ) ;
Это событие принимает в качестве параметра всю текущую корзину, а не только обновленные части.
Это помогает восстановиться после потери или рассинхронизации событий корзины: последнее обновление всегда является авторитетным.
OmetriaBasketItem — это объект, описывающий содержимое корзины покупок. Он может иметь свою собственную цену и количество в зависимости от различных правил и применяемых рекламных акций. Он имеет следующие свойства:
- ProductId : (
String
, обязательный) — строка, представляющая уникальный идентификатор этого продукта.- sku : (
String
, необязательно) — строка, представляющая единицу учета, которая позволяет идентифицировать конкретный товар.- количество : (
Int
, требуется) — количество элементов, которые представляет эта запись.- цена : (
Float
, обязательный) — значение с плавающей запятой, представляющее цену за один товар. Валюта устанавливается OmetriaBasket, содержащим этот элемент.- variandId : (
String
, необязательно) — идентификатор варианта продукта, связанного с этой позицией.
OmetriaBasket — это объект, описывающий содержимое корзины покупок и обладающий следующими свойствами:
- id : (
String
, необязательно) — уникальный идентификатор этой корзины.- валюта : (
String
, обязательная) — строка, представляющая валюту в трехбуквенном коде валюты ISO 4217, например"USD"
,"GBP"
- totalPrice : (
float
, обязательный) — значение с плавающей запятой, представляющее цену.- items : (
Array[OmetriaBasketItem]
) — массив, содержащий записи товаров в этой корзине.- link : (
String
) — глубокая ссылка на страницу в Интернете или в приложении для этой корзины. Может использоваться в уведомлении, отправляемом пользователю, например: «Забыли оформить заказ? Вот ваша корзина для продолжения: https://eg.com/basket_url». Переход по этой ссылке приведет их прямо на страницу корзины.
Отслеживайте, когда пользователь начал процесс оформления заказа. В настоящее время это используется только для подсчета просмотров страниц и не имеет никакого другого эффекта в Ometria.
Ometria . trackCheckoutStartedEvent ( 'order_id' ) ;
Заказ выполнен и оплачен:
const items : OmetriaBasketItem [ ] = [
{
productId : 'product-1' ,
sku : 'sku-product-1' ,
quantity : 1 ,
price : 12.0 ,
} ,
] ;
Ometria . trackOrderCompletedEvent ( 'order_id' , {
totalPrice : 12.0 ,
id : 'basket_id_eg' ,
currency : 'USD' ,
items ,
link : 'link_eg' ,
} ) ;
Используйте руководство по обработке взаимодействия с уведомлениями, содержащими URL-адреса, чтобы вручную отслеживать это событие, когда у вас будет достаточно информации об экране (или другом месте назначения), которое откроется приложением.
Ometria . trackDeepLinkOpenedEvent ( '/profile' , 'ProfileScreen' ) ;
Посетитель просматривает «домашнюю страницу» или целевой экран вашего приложения.
Ometria . trackHomeScreenViewedEvent ( ) ;
Посетитель нажимает/нажимает/просматривает/выделяет или иным образом проявляет интерес к списку продуктов. Этот тип экрана включает результаты поиска, списки продуктов в группе, категории, коллекции или любой другой экран, на котором представлен список продуктов.
Например, в магазине продается одежда, и посетитель нажимает на «Женская обувь», чтобы увидеть список товаров в этой категории, или он ищет «синий джемпер» и видит список товаров в этой категории.
Это событие должно быть инициировано:
Ometria . trackProductListingViewedEvent ( ) ;
Отслеживание независимых просмотров экрана посетителями помогает нам отслеживать их взаимодействие с приложением, а также то, на каком этапе пути они находятся.
Аналогичным событием на веб-сайте может быть отслеживание независимых просмотров страниц.
Все общие экраны электронной коммерции имеют свои собственные события верхнего уровня: просмотр корзины, список просмотренных продуктов и т. д.
Ваше приложение может иметь страницу определенного типа, на которой маркетологам будет полезно отслеживать взаимодействие.
Например, если вы проводите рекламную акцию и просмотр определенного экрана указывает на интерес к рекламной акции, за которым впоследствии может захотеть следить маркетолог.
Чтобы отслеживать эти пользовательские экраны, используйте событие «Просмотр экрана» :
Ometria . trackScreenViewedEvent ( 'OnboardingScreen' , { a : '1' , b : '2' } ) ;
Ваше приложение может иметь определенные потоки или страницы, которые представляют интерес для маркетинговой команды.
Например, отдел маркетинга может захотеть отправить электронное письмо или уведомление любому пользователю, который подписался на конкретную рекламную акцию или взаимодействовал с кнопкой или определенным элементом приложения.
Если вы отправите специальное событие, соответствующее этому действию, они смогут запустить по нему кампанию автоматизации.
Узнайте у маркетинговой команды подробности и то, что им может понадобиться. Особенно если они уже используют Ometria для электронной почты, они будут знать о кампаниях по автоматизации и специальных событиях.
Ometria . trackCustomEvent ( 'my_custom_type' , { } ) ;
Следующие события автоматически отслеживаются SDK.
Чтобы воспользоваться этими преимуществами, достаточно инициализировать SDK; дальнейшая интеграция не требуется (если не указано иное).
Событие | Описание |
---|---|
Приложение установлено | Приложение было только что установлено. Обычно его нельзя отправить, когда приложение фактически установлено, а вместо этого оно отправляется только при первом запуске приложения. |
Приложение запущено | Кто-то только что запустил приложение. |
Приложение на переднем плане | Приложение уже было запущено, но работало в фоновом режиме. Его только что выдвинули на передний план. |
Приложение в фоновом режиме | Приложение активно использовалось и только что было переведено в фоновый режим. |
Уведомление получено в состоянии выхода из приложения | Система получила push-уведомление, когда приложение находилось в состоянии закрытия. (требуется расширение службы уведомлений на iOS) |
Произошла ошибка | Произошла ошибка на стороне клиента. Мы стараемся обнаружить любые проблемы с фактической полезной нагрузкой уведомлений на нашей стороне, поэтому не ожидаем каких-либо ошибок, которые необходимо будет возвращать конечным пользователям. |
Чтобы снизить потребление энергии и пропускной способности, библиотека Ometria не отправляет события одно за другим, пока вы не попросите ее сделать это.
Вместо этого он формирует пакеты событий, которые отправляются на серверную часть во время выполнения приложения, когда происходит одно из следующих событий:
pushtokenRefreshed
)notificationReceived
appForegrounded
appBackgrounded
Вы можете попросить библиотеку отправить все оставшиеся события на серверную часть в любое время, вызвав:
Ometria . flush ( ) ;
Вы можете полностью очистить все события, которые были отслежены, но еще не удалены.
Для этого вызовите следующий метод:
Ometria . clear ( ) ;
Чтобы узнать, какие события были зафиксированы, вы можете проверить журналы, поступающие из Ometria SDK, если ведение журнала включено. Вы можете отфильтровать слово «Ометрия». SDK регистрирует все события по мере их возникновения, а также регистрирует сброс, т. е. когда они отправляются в API мобильных событий Ometria. Здесь также будут видны любые потенциальные ошибки при отправке (проблемы API или проблемы с проверкой событий).
Ometria использует Firebase Cloud Messaging для отправки push-уведомлений на мобильные устройства.
Поэтому вам придется добавить React-Native Firebase в качестве зависимости Ometria, используя следующие строки:
import firebase from '@react-native-firebase/app' ;
import messaging from '@react-native-firebase/messaging' ;
Для Android следуйте руководству по Firebase ReactNative. Firebase для Android. Для iOS следуйте инструкциям по Firebase ReactNative. Firebase для iOS.
Чтобы использовать push-уведомления, вам также необходимо выполнить действия, описанные в руководстве ReactNative по push-уведомлениям.
При правильной настройке Ometria может отправлять персонализированные уведомления для вашего мобильного приложения.
Выполните следующие действия:
Прежде чем продолжить, вы должны уже настроить:
Подробнее об этих шагах читайте в разделе 4. Инициализация библиотеки.
Для Android 13 (уровень API 33) и выше сначала необходимо объявить разрешение в файле AndroidManifest.xml:
< manifest ...>
< uses-permission android : name = " android.permission.POST_NOTIFICATIONS " />
< application ...>
...
</ application >
</ manifest >
Вам необходимо запросить разрешения для уведомлений. Вы можете использовать разрешения реагирования.
import { requestNotifications , RESULTS } from 'react-native-permissions' ;
...
await requestNotifications ( [ 'alert' , 'sound' , 'badge' ] ) . then ( ( { status } ) => {
if ( status === RESULTS . GRANTED ) {
console . log ( '? Push Notification permissions granted!' ) ;
}
} ) ;
Дополнительную информацию о разрешениях выполнения уведомлений на Android можно найти здесь.
После инициализации Ometria вы должны переслать токен push-уведомления Firebase (как для iOS, так и для Android).
Вам также необходимо пересылать токен push-уведомления в Ometria каждый раз, когда он обновляется.
import Ometria from 'react-native-ometria' ;
import messaging from '@react-native-firebase/messaging' ;
await Ometria . initializeWithApiToken ( 'API_KEY' , {
notificationChannelname : 'Example Channel Name' , // optional, only for Android
appGroupIdentifier : 'group.com.ometria.sampleRN' , // optional, only for iOS
} ) ;
messaging ( )
. getToken ( )
. then ( ( pushToken ) => Ometria . onNewToken ( pushToken ) ) ;
messaging ( ) . onTokenRefresh ( ( pushToken ) => Ometria . onNewToken ( pushToken ) ) ;
Подпишитесь на удаленные сообщения, которые ваше приложение получает, находясь в активном состоянии. Вы можете сделать это, используя метод onMessage
из пакета @react-native-firebase/messaging
.
В обратном вызове вы можете использовать Ometria.onNotificationReceived
, чтобы сообщить Ometria SDK о том, что удаленное сообщение получено, и будет запущено событие notificationReceived
. Используйте Ometria.parseNotification
, если вы хотите извлечь данные Ometria из удаленного сообщения.
messaging ( ) . onMessage ( async ( remoteMessage ) => {
Ometria . onNotificationReceived ( remoteMessage ) ;
const ometriaData = Ometria . parseNotification ( remoteMessage ) ;
// Use ometriaData
} ) ;
Если вы реализуете такое специальное решение, не забудьте вызвать Ometria.onNotificationOpenedApp
, чтобы позволить SDK, с которым осуществлялось взаимодействие с уведомлением, при обработке события взаимодействия с уведомлениями для уведомлений на переднем плане.
Чтобы Ometria могла точно отслеживать все уведомления, полученные в состоянии закрытия и фоновом режиме приложения на iOS, ей необходимо использовать возможности фоновой службы, которая имеет доступ ко всем уведомлениям.
Полное руководство по настройке расширения службы уведомлений см. в разделе Добавление целевого объекта расширения службы уведомлений.
Чтобы Ometria могла точно отслеживать все уведомления, полученные в состоянии выхода и фоновом режиме приложения на Android, вам необходимо заранее (в index.js
) подписаться на удаленные сообщения, которые ваше приложение получает, когда оно находится в состоянии выхода и фоновом режиме.
Ometria.onAndroidBackgroundMessage
сообщит Ometria SDK о том, что удаленное сообщение получено, и будет запущено событие NotificationReceived . Для инициализации SDK в фоновом режиме ему необходим токен Ometria.
Platform . OS === 'android' &&
messaging ( ) . setBackgroundMessageHandler ( async ( remoteMessage ) => {
Ometria . onAndroidBackgroundMessage ( {
ometriaToken : 'OMETRIA_KEY'
ometriaOptions : { } ,
remoteMessage ,
} ) ;
} ) ;
Начиная с версии 2.4.0 Ometria.setBackgroundMessageHandler
является устаревшим методом. Вместо этого используйте Ometria.onAndroidBackgroundMessage
.
Когда пользователь взаимодействует с уведомлением в фоновом режиме или в состоянии выхода, вы должны сообщить Ometria SDK, что с уведомлением взаимодействовали и приложение было открыто. Это можно сделать, вызвав Ometria.onNotificationOpenedApp
с удаленным сообщением в качестве параметра.
// Check if the app was opened from quit state by a notification
messaging ( )
. getInitialNotification ( )
. then ( ( remoteMessage ) => {
if ( remoteMessage ) {
Ometria . onNotificationOpenedApp ( remoteMessage ) ;
}
} ) ;
// Subscribe to the app being opened from background state by a notification
messaging ( ) . onNotificationOpenedApp ( ( remoteMessage ) =>
Ometria . onNotificationOpenedApp ( remoteMessage )
) ;
Начиная с версии 2.4.0 Ometria.onNotificationInteracted
является устаревшим методом. Вместо этого используйте Ometria.onNotificationOpenedApp
.
Ometria позволяет отправлять URL-адреса и информацию отслеживания вместе с push-уведомлениями и обрабатывать их на устройстве. Когда уведомление открыло приложение, вы можете проанализировать удаленное сообщение уведомления и проверить, содержит ли оно URL-адрес глубокой ссылки.
const notif = await Ometria . parseNotification ( remoteMessage ) ;
if ( notif ?. deepLinkActionUrl ) {
Ometria . trackDeepLinkOpenedEvent ( notif . deepLinkActionUrl , 'Browser' ) ;
Linking . openURL ( notif . deepLinkActionUrl ) ;
}
Ometria.parseNotification
возвращает объект типа OmetriaNotificationData
, который выглядит следующим образом:
type OmetriaNotificationData = {
campaignType?: 'trigger; // represents automation campaigns
deepLinkActionUrl?: string;
externalCustomerId?: string;
imageUrl?: string;
sendId?: string;
tracking: { // Can be overridden / added in your automation campaign's settings
utm_medium?: string; // default is "push"
utm_source: string;
utm_campaign: string; // generated from campaign hash and title
om_campagin: string; // generated from campaign hash, campaign version and node id
[key: string]: string | undefined; // additional tracking data you add
};
};
Расширение службы уведомлений преследует две цели:
Чтобы добавить расширение, выберите «Файл» > «Создать» > «Цель» и выберите «Расширение службы уведомлений» > «Далее» .
В вашем целевом списке отображается новый элемент:
Затем убедитесь, что Ometria SDK также доступен для этой новой цели, обновив свой подфайл, включив в него новую добавленную цель и указав Ometria в качестве зависимости.
# move this line before the App target
pod 'GoogleUtilities' , : modular_headers => true
use_frameworks! :linkage => :static
target 'sampleApp' do
# Pods for sampleApp
end
# Add the following lines
target 'NotificationService' do
use_frameworks! :linkage => :static
pod 'Ometria'
end
На этом этапе основное приложение и расширение функционируют как два отдельных объекта, единственным общим компонентом которых является код. Чтобы расширение могло получить доступ для чтения и записи к данным, имеющим отношение к SDK, оно должно находиться в той же группе приложений, что и основная цель. Это позволит основной цели и расширению обмениваться данными.
В навигаторе проектов выберите свой проект, затем перейдите в раздел «Подписание и возможности» и выберите «+ Возможности» в верхнем левом углу.
Как только вы это сделаете, под «Подписанием» появится новый раздел. Это позволит вам добавить новую группу приложений. Убедитесь, что вы выбрали соответствующий идентификатор (например, group.[BUNDLE_IDENTIFIER]
) и сохранили значение, так как оно понадобится вам при создании экземпляра Ometria. Повторите процесс для целевого объекта расширения службы уведомлений, и все готово.
Чтобы разрешить Ometria перехватывать уведомления, откройте класс NotificationService
, который был автоматически создан вместе с расширением, и замените его содержимое следующим:
import UserNotifications
import Ometria
class NotificationService : OmetriaNotificationServiceExtension {
override func instantiateOmetria ( ) -> Ometria ? {
Ometria . initializeForExtension ( appGroupIdentifier : " group.[BUNDLE_IDENTIFIER] " )
}
}
Наконец, вам необходимо использовать идентификатор группы приложений при инициализации Ometria в приложении ReactNative.
import Ometria from 'react-native-ometria' ;
// Ometria init
await Ometria . initializeWithApiToken ( 'API_KEY' , {
notificationChannelName : 'Example Channel Name' , // optional, only for Android
appGroupIdentifier : 'group.[BUNDLE_IDENTIFIER]' , // optional, only for iOS
} ) ;
Теперь ваше приложение будет генерировать событие notificationReceived
каждый раз, когда уведомление будет получено в состоянии выхода, и вы сможете отображать уведомления с богатым содержимым на iOS.
Полный пример и вариант использования см. в образце приложения.
Ometria отправляет персонализированные электронные письма с URL-адресами, указывающими на ваш веб-сайт. Чтобы открыть эти URL-адреса внутри вашего приложения, обязательно следуйте этому руководству.
Сначала убедитесь, что для вашей учетной записи настроен домен отслеживания Ometria с поддержкой SSL. Возможно, он у вас уже есть для ваших рассылок по электронной почте, но если нет, попросите своего контактного лица в Ometria настроить его, и он предоставит вам домен.
Следуйте документации ios для связанных доменов, затем создайте файл ассоциации apple-app-site-association и отправьте его своему контактному лицу в Ometria.
Последний шаг — обработать URL-адреса в вашем приложении и направить пользователя в соответствующие разделы приложения. Обратите внимание, что вам необходимо реализовать сопоставление URL-адресов вашего веб-сайта и экранов вашего приложения.
См. также Привязка push-уведомлений к экранам приложений.
Если вы имеете дело с обычными URL-адресами, указывающими на ваш веб-сайт, вы можете разложить их на различные компоненты пути и параметры. Это позволит вам получить необходимую информацию для перехода к нужному экрану вашего приложения.
Чтобы ReactNative определил, что URL-адрес открывает приложение, вам необходимо настроить файл AppDelegate.m из папки ios, добавив следующий код в AppDelegate.m из ./ios/ProjectName.
- ( BOOL )application:(UIApplication *)application openURL:( NSURL *)url
sourceApplication:( NSString *)sourceApplication annotation:( id )annotation
{
return [RCTLinkingManager application: application openURL: url
sourceApplication: sourceApplication annotation: annotation];
}
// Only if your app is using [Universal Links](https://developer.apple.com/library/prerelease/ios/documentation/General/Conceptual/AppSearch/UniversalLinks.html).
- ( BOOL )application:(UIApplication *)application continueUserActivity:( NSUserActivity *)userActivity
restorationHandler:( void (^)( NSArray * _Nullable))restorationHandler
{
return [RCTLinkingManager application: application
continueUserActivity: userActivity
restorationHandler: restorationHandler];
}
Для Android добавьте следующее:
< intent-filter android : autoVerify = " true " >
< action android : name = " android.intent.action.VIEW " />
< category android : name = " android.intent.category.DEFAULT " />
< category android : name = " android.intent.category.BROWSABLE " />
< data
android : host = " clickom.omdemo.net "
android : scheme = " https " />
</ intent-filter >
в /android/app/src/main/AndroidManifest.xml
Однако электронные письма Ometria содержат запутанные URL-адреса отслеживания, и их необходимо преобразовать обратно в исходный URL-адрес, указывающий на ваш веб-сайт, прежде чем отправлять сообщения.