IAP в Unity3D

Колись давно, у часи Unity 4 додавання внутрішньоігрових покупок викликало деякі труднощі. Можна було йти двома шляхами: використати який-небудь плагін з вже існуючих або реалізовувати свою обгортку над нативними функціями для кожної платформи. В першому випадку було кілька рішень: Soomla, OpenIAB, Prime і багато-багато інших. Деякі з них були платними і стояли досить дорого: ціна Prime становила близько 70$. Деякі були безкоштовними і відмовлялися працювати в iOS: OpenIAB.

Unity3D 5.3
І ось у версії Unity3D 5.3 з'явилася підтримка in-app purchases як кажуть, «з коробки». Цей простий інструмент дозволяє легко впровадити в додаток покупки для найбільш популярних магазинів додатків.

Зараз підтримуються:

  • Amazon Apps
  • Google Play
  • iOS App Store
  • Mac App Store
  • Samsung GALAXY Apps
  • Tizen Store
  • Windows Store.
Інтеграція в проект
Для початку у вкладці Services необхідно клікнути по полю In-App Purchasing і включити цю функцію. Також автоматично включається сервіс аналітики, в якому потім можна подивитися Revenue, Average Revenue Per Paying User (ARPPU), Average Revenue Per Daily Active User (ARPDAU).



Далі необхідно натиснути на кнопку Import після чого, відбудеться імпорт всіх необхідних ассетов в проект.


In-App Manager
Тепер необхідно додати код для роботи з IAP. C# скрипт містить в собі наступні функції:

  • InitializePurchasing: ініціалізує IAP, додає предмети, які доступні для продажу і дозволяє обробляти необхідні події
  • BuyProductID: функція, яка дозволяє придбати необхідний предмет, використовуючи його индентификатор
  • BuyConsumable, BuyNonConsumable, BuySubscription: функції, які дозволяють купувати покупки різних типів. Багато магазини підтримують 3 типу покупок:

    1. Consumable — тип покупки, дані якої можуть витрачатися гравцем у грі (наприклад: монети, поповнення енергії);
    2. NonConsumable — тип покупки, дані якої залишаються у гравця назавжди (наприклад: унікальний меч, відключення реклами)

    3. Subscription — передплата;
  • RestorePurchases: — функція, яка дозволяє реалізувати механізм відновлення покупок. Потрібен iOS. Якщо в грі є NonConsumable купівля, то повинна бути і кнопка, яка виконує її відновлення
  • OnInitialize: викликається, коли додаток може підключитися до Unity IAP.
  • OnInitializeFailed: викликається, коли додатку не вдалося підключитися до Unity IAP. Повідомлення з помилкою пишеться в консоль
  • ProcessPurchase: викликається, коли купівля успішно здійснена
  • OnPurchaseFailed: функція викликається, коли покупка не вдалася і повідомлення з помилкою пишеться в консоль.
Використання у грі
Щоб було зрозуміліше як застосовувати скрипт, наведу приклад. Є дві покупки: одна NonConsumable — відключення реклами, друга Consumable — дає гравцеві 80 монет. Використовуються дві платформи: Google Play і AppStore. Для кожної покупки необхідно оголосити три константи, що містять в собі ідентифікатори покупок UnityIAP, Google Play і AppStore.

public const string pMoney80 = "money_80";
public const string pNoAds = "no_ads";

public const string pMoney80AppStore = "app_money_80";
public const string pNoAdsAppStore = "app_no_ads";

public const string pMoney80GooglePlay = "gp_money_80";
public const string pNoAdsGooglePlay = "gp_no_ads";

Після цього, у функцію ініціалізації, необхідно передати ці константи:

builder.AddProduct(pMoney80, ProductType.Consumable, new IDs() { { pMoney80AppStore, AppleAppStore.Name }, { pMoney80GooglePlay, GooglePlay.Name } });
builder.AddProduct(pNoAds, ProductType.NonConsumable, new IDs() { { pNoAdsAppStore, AppleAppStore.Name }, { pNoAdsGooglePlay, GooglePlay.Name } });

Тепер на кнопку купівлі предмета, необхідно повісити функцію BuyProductID з передачею їй як параметр ідентифікатора продається предмета.



А в функції PurchaseProcessingResult додати дії для кожної покупок.

if (String.Equals(args.purchasedProduct.definition.id pMoney80, StringComparison.Ordinal))
{
//Action for money
ResourceManager.Instance.Money += 80;
}
else if (String.Equals(args.purchasedProduct.definition.id pNoAds, StringComparison.Ordinal))
{
//Action for no ads
ResourceManager.Instance.NoAds = true;
}

От і все. Залишається тільки не забути створити покупки з такими ж ідентифікаторами в AppStore та Google Play.
Джерело: Хабрахабр

0 коментарів

Тільки зареєстровані та авторизовані користувачі можуть залишати коментарі.