Включение покупок с помощью пейволов в Unity SDK
Чтобы включить встроенные покупки, нужно понять три ключевых концепции:
- Продукты — всё, что пользователи могут купить (подписки, расходуемые покупки, пожизненный доступ)
- Пейволы — конфигурации, определяющие, какие продукты предлагать. В Adapty пейволы — единственный способ получить продукты, но благодаря этому вы можете менять предложения, цены и наборы продуктов, не трогая код приложения.
- Плейсменты — где и когда показывать пейволы в приложении (например,
main,onboarding,settings). Вы настраиваете пейволы для плейсментов в дашборде, а затем запрашиваете их по ID плейсмента в коде. Это упрощает проведение A/B-тестов и показ разных пейволов разным пользователям.
Adapty предлагает три способа включить покупки в приложении. Выберите подходящий в зависимости от требований вашего приложения:
| Реализация | Сложность | Когда использовать |
|---|---|---|
| Adapty Paywall Builder | ✅ Просто | Вы создаёте готовый к покупкам пейвол в no-code конструкторе. Adapty автоматически его отображает и берёт на себя весь сложный процесс покупки, валидацию чеков и управление подписками. |
| Пейволы, созданные вручную | 🟡 Средне | Вы реализуете UI пейвола в коде приложения, но всё равно получаете объект пейвола из Adapty для гибкости в управлении предложениями. Смотрите гайд. |
| Observer mode | 🔴 Сложно | У вас уже есть собственная инфраструктура обработки покупок, и вы хотите её использовать. Учтите, что observer mode имеет ограничения в Adapty. Смотрите статью. |
Описанные ниже шаги показывают, как реализовать пейвол, созданный в Adapty Paywall Builder.
Если вы не хотите использовать Paywall Builder, смотрите гайд по обработке покупок в пейволах, созданных вручную.
Чтобы отобразить пейвол, созданный в Adapty Paywall Builder, в коде приложения вам нужно только:
- Получить пейвол: Получите пейвол из Adapty.
- Отобразить пейвол — Adapty возьмёт на себя покупки: Покажите контейнер пейвола в вашем приложении.
- Обработать действия кнопок: Свяжите взаимодействия пользователя с пейволом с реакцией приложения на них. Например, открывайте ссылки или закрывайте пейвол при нажатии кнопок.
Прежде чем начать
Перед началом выполните следующие шаги:
- Подключите приложение к App Store и/или Google Play в дашборде Adapty.
- Создайте продукты в Adapty.
- Создайте пейвол и добавьте в него продукты.
- Создайте плейсмент и добавьте в него пейвол.
- Установите и активируйте Adapty SDK в коде приложения.
Самый быстрый способ выполнить эти шаги — следовать quickstart-гайду или создать пейволы и плейсменты с помощью Developer CLI.
1. Получите пейвол
Ваши пейволы привязаны к плейсментам, настроенным в дашборде. Плейсменты позволяют запускать разные пейволы для разных аудиторий или проводить A/B-тесты.
Чтобы получить пейвол, созданный в Adapty Paywall Builder, необходимо:
-
Получить объект
paywallпо ID плейсмента с помощью методаGetPaywallи проверить, является ли это пейволом, созданным в конструкторе, с помощью свойстваHasViewConfiguration. -
Создать представление пейвола с помощью метода
CreatePaywallView. Представление содержит элементы UI и стили, необходимые для отображения пейвола.
Чтобы получить конфигурацию представления, необходимо включить переключатель Show on device в Paywall Builder. В противном случае вы получите пустую конфигурацию представления, и пейвол не будет отображён.
Adapty.GetPaywall("YOUR_PLACEMENT_ID", (paywall, error) => {
if(error != null) {
// handle the error
return;
}
// Create paywall view parameters
var parameters = new AdaptyUICreatePaywallViewParameters();
// Create the paywall view
AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
if(error != null) {
// handle the error
return;
}
// view - the paywall view ready to be presented
});
});
Этот quickstart содержит минимальную конфигурацию, необходимую для отображения пейвола. Подробнее о расширенных настройках смотрите в гайде по получению пейволов.
2. Отобразите пейвол
Теперь, когда у вас есть конфигурация пейвола, достаточно добавить несколько строк для его отображения.
Чтобы показать пейвол, используйте метод view.Present() на объекте view, созданном методом CreatePaywallView. Каждый объект view можно использовать только один раз. Если нужно показать пейвол снова, вызовите CreatePaywallView ещё раз, чтобы создать новый экземпляр view.
view.Present((error) => {
// handle the error
});
Подробнее об отображении пейвола смотрите в нашем гайде.
3. Обработайте действия кнопок
Когда пользователи нажимают кнопки в пейволе, Unity SDK автоматически обрабатывает покупки и восстановление. Однако другие кнопки имеют пользовательские или предопределённые идентификаторы и требуют обработки действий в вашем коде.
Например, в вашем пейволе, скорее всего, есть кнопка закрытия и ссылки для открытия (например, условия использования и политика конфиденциальности). Чтобы обработать эти действия, ваш класс должен реализовывать интерфейс AdaptyPaywallsEventsListener и зарегистрироваться как слушатель.
public class YourClass : MonoBehaviour, AdaptyPaywallsEventsListener
{
void Start()
{
// Register this class as the paywall events listener
Adapty.SetPaywallsEventsListener(this);
}
// AdaptyPaywallsEventsListener method - handles button actions
public void PaywallViewDidPerformAction(
AdaptyUIPaywallView view,
AdaptyUIUserAction action
) {
switch (action.Type) {
case AdaptyUIUserActionType.Close:
view.Dismiss(null);
break;
case AdaptyUIUserActionType.OpenUrl:
Application.OpenURL(action.Value);
break;
default:
break;
}
}
}
Следующие шаги
Есть вопросы или возникли проблемы? Загляните на наш форум поддержки, где можно найти ответы на распространённые вопросы или задать свой. Наша команда и сообщество всегда готовы помочь!
Ваш пейвол готов к отображению в приложении. Протестируйте покупки в песочнице App Store или в Google Play Store, чтобы убедиться, что тестовая покупка через пейвол проходит успешно.
Теперь вам нужно проверить уровень доступа пользователей, чтобы убедиться, что вы показываете пейвол или открываете доступ к платным функциям нужным пользователям.
Полный пример
Вот как все эти шаги можно интегрировать в приложение вместе.
using System;
using UnityEngine;
using AdaptySDK;
public class PaywallManager : MonoBehaviour, AdaptyPaywallsEventsListener
{
[SerializeField] private string placementId = "YOUR_PLACEMENT_ID";
private AdaptyUIPaywallView currentPaywallView;
void Start()
{
// Register for paywall events
Adapty.SetPaywallsEventsListener(this);
GetAndDisplayPaywall();
}
private void GetAndDisplayPaywall()
{
Adapty.GetPaywall(placementId, (paywall, error) => {
if (error != null) {
Debug.LogError("Error getting paywall: " + error.Message);
return;
}
if (paywall.HasViewConfiguration) {
CreateAndPresentPaywallView(paywall);
} else {
Debug.LogWarning("Paywall was not created using the builder");
}
});
}
private void CreateAndPresentPaywallView(AdaptyPaywall paywall)
{
var parameters = new AdaptyUICreatePaywallViewParameters();
AdaptyUI.CreatePaywallView(paywall, parameters, (view, error) => {
if (error != null) {
Debug.LogError("Error creating paywall view: " + error.Message);
return;
}
currentPaywallView = view;
view.Present((presentError) => {
if (presentError != null) {
Debug.LogError("Error presenting paywall: " + presentError.Message);
return;
}
Debug.Log("Paywall presented successfully");
});
});
}
// AdaptyPaywallsEventsListener implementation
public void PaywallViewDidPerformAction(
AdaptyUIPaywallView view,
AdaptyUIUserAction action
) {
switch (action.Type) {
case AdaptyUIUserActionType.Close:
Debug.Log("Close button pressed");
view.Dismiss(null);
break;
case AdaptyUIUserActionType.OpenUrl:
Application.OpenURL(action.Value);
break;
default:
break;
}
}
// Required interface methods (implement as needed)
public void PaywallViewDidAppear(AdaptyUIPaywallView view) { }
public void PaywallViewDidDisappear(AdaptyUIPaywallView view) { }
public void PaywallViewDidSelectProduct(AdaptyUIPaywallView view, string productId) { }
public void PaywallViewDidStartPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product) { }
public void PaywallViewDidFinishPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyPurchaseResult purchasedResult) { }
public void PaywallViewDidFailPurchase(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
public void PaywallViewDidStartRestore(AdaptyUIPaywallView view) { }
public void PaywallViewDidFinishRestore(AdaptyUIPaywallView view, AdaptyProfile profile) { }
public void PaywallViewDidFailRestore(AdaptyUIPaywallView view, AdaptyError error) { }
public void PaywallViewDidFailRendering(AdaptyUIPaywallView view, AdaptyError error) { }
public void PaywallViewDidFailLoadingProducts(AdaptyUIPaywallView view, AdaptyError error) { }
public void PaywallViewDidFinishWebPaymentNavigation(AdaptyUIPaywallView view, AdaptyPaywallProduct product, AdaptyError error) { }
public void ShowPaywall()
{
GetAndDisplayPaywall();
}
void OnDestroy()
{
if (currentPaywallView != null) {
currentPaywallView.Dismiss(null);
}
}
}