Управление сообщениями стора в React Native SDK

App Store и Google Play иногда должны показывать пользователям сообщения об их подписке:

  • App Store: Запрос на согласие с повышением цены, уведомление о проблеме с оплатой или win-back offer. По умолчанию StoreKit показывает эти сообщения самостоятельно, пока открыто ваше приложение.
  • Google Play: Уведомление о том, что платёж по подписке отклонён и необходимо обновить способ оплаты. По умолчанию SDK запрашивает эти сообщения каждый раз, когда запускается Activity вашего приложения.

В любом случае сообщение может появиться поверх флоу, онбординга или чекаута. Чтобы выбрать момент самостоятельно, переключите SDK в режим ручной обработки сообщений и вызывайте showStoreMessages тогда, когда сообщение не прервёт пользователя.

Warning

В ручном режиме стор не показывает сообщения самостоятельно. Если ваше приложение никогда не вызывает showStoreMessages, пользователи не увидят ни запрос на согласие с повышением цены, ни уведомление о проблеме с оплатой, ни уведомление об отклонённом платеже.

Перед началом работы

Вам потребуется:

  • Adapty React Native SDK 4.3.0 или новее: в более ранних версиях API стор-сообщений недоступно.
  • iOS 16 или новее для сообщений App Store: StoreKit не доставляет сообщения приложениям на более ранних версиях. На iOS 15 getPendingStoreMessageTypes и showStoreMessages возвращают ошибку, поэтому если ваше приложение поддерживает iOS 15, вызывайте их только на iOS 16 и новее.

Включение ручной обработки

Чтобы сообщения стора отображались только при явном вызове showStoreMessages в вашем приложении, установите storeMessagesHandling в значение 'manual' при активации SDK:

adapty.activate('YOUR_PUBLIC_SDK_KEY', {
  storeMessagesHandling: 'manual', // 'auto' is the default
});

На iOS SDK добавляет каждое сообщение App Store в список ожидания для текущей сессии приложения. На Android SDK прекращает самостоятельно запрашивать сообщения Google Play. При значении 'auto' по умолчанию SDK не перехватывает сообщения App Store, поэтому на iOS getPendingStoreMessageTypes и showStoreMessages не имеют ничего для возврата или отображения.

Получение типов ожидающих сообщений

На iOS, чтобы узнать, есть ли ожидающие сообщения App Store, вызовите getPendingStoreMessageTypes. Метод возвращает типы ожидающих сообщений, не показывая и не удаляя их:

const pendingTypes = await adapty.getPendingStoreMessageTypes();

if (pendingTypes === null) {
  // Android: Google Play decides whether a message applies when you show it
} else if (pendingTypes.includes('billing_issue')) {
  // For example, skip the upsell and show the billing message first
}

На Android этот метод возвращает null: Google Play не сообщает об ожидающих сообщениях заранее и принимает решение о применимости сообщения только при явном запросе от приложения. Пустой массив означает, что на iOS ожидающих сообщений нет.

Каждое сообщение App Store относится к одному из следующих типов:

ТипСообщение
genericОбщее сообщение App Store.
price_increase_consentЗапрос на согласие с повышением цены подписки.
billing_issueУведомление о проблеме с оплатой подписки. Доступно на iOS 16.4 и выше.
win_back_offerПодходящий win-back offer. Доступно на iOS 18 и выше.

Тип сообщения, который SDK не распознаёт, имеет значение storekit_<number>.

Показ сообщений

Когда ваше приложение достигает момента, в котором сообщение стора не прервёт пользователя — например, после того как пользователь закрыл флоу или завершил онбординг — вызовите showStoreMessages:

try {
  await adapty.showStoreMessages();
} catch (error) {
  // handle the error
}
  • iOS: SDK показывает ожидающие сообщения одно за другим. После того как StoreKit отображает сообщение, SDK удаляет его из списка ожидающих. Если StoreKit не может показать сообщение, SDK записывает ошибку в лог Adapty, оставляет сообщение для следующего вызова и переходит к остальным сообщениям.
  • Android: SDK запрашивает сообщения Google Play для текущего Activity. Google Play самостоятельно определяет, применимо ли сообщение к пользователю, поэтому запрос не всегда приводит к показу сообщения. Если пользователь исправляет способ оплаты через сообщение, SDK синхронизирует покупки пользователя с Adapty, и ваш слушатель профиля получает обновлённый уровень доступа.

В режиме 'auto' по умолчанию вы также можете вызвать showStoreMessages на Android — например, чтобы повторно запросить сообщение в Activity, которая уже запущена.

Показывать только некоторые типы сообщений

Чтобы отображать только некоторые из ожидающих сообщений App Store, передайте нужные типы в ios.filter. Остальные сообщения останутся в статусе ожидания:

await adapty.showStoreMessages({
  ios: { filter: ['billing_issue', 'price_increase_consent'] },
});

Без filter SDK показывает все ожидающие сообщения, включая типы, которые он не распознаёт. Android игнорирует filter и запрашивает все сообщения Google Play.

Ошибки

showStoreMessages выбрасывает AdaptyError с одним из следующих кодов:

КодНазваниеПричина
3201operationInProgressДругой вызов showStoreMessages ещё отображает сообщения. Дождитесь его завершения и попробуйте снова.
3202resolverFailureТолько iOS: SDK не нашёл активного оконного сцены на переднем плане для отображения сообщений. Вызовите метод снова, когда приложение находится на переднем плане.