1) https://github.com/onepf/OpenIAB/releases - скачуємо плагін

2) імпортуємо плагін в проект Assets/Import Package /Custom Package

3) на сцені повиннен бути скріпт OpenIABEventManager . Створюємо обєкт на сцені і "вішаєм" цей скріпт на нього

4) компілюємо і завантажуємо гру на Гугл Плей

5) в консолі розробника "Контент для продажу" створюємо продукт

6) копіюємо ліцензійний ключ у "Службах і API" , а також ідентифікатори продуктів в наший скріпт

 

7) . Компілюємо гру і заливаємо білд на Гугл Плей для тестування

8) Після модерації тестим

(тут гарно описаний порядок тестування) https://support.google.com/googleplay/android-developer/answer/3131213?hl=ru

Information contains in pdf-file and this link: https://github.com/onepf/OpenIAB-Unity-Plugin/tree/master/unity_plugin

 

Приклад коду який реалізує логіку купівлі


public event Action<bool> Purchase = delegate { };
public event Action<bool> Consume = delegate { };
private const string SKU500 = "sku_500"; // sku_500 - це індетифікатор продукту
private const string SKU1000 = "sku_1000";
private const string SKU10000 = "sku_10000";
private const string COINS500 = "buy_500_coins";
private const string COINS1000 = "buy_1000_coins";
private const string COINS10000 = "buy_10000_coins";
private bool isInitialized = false;
private void OnEnable()
{
OpenIABEventManager.billingSupportedEvent += OnBillingSupportedEvent;
OpenIABEventManager.billingNotSupportedEvent += OnBillingNotSupportedEvent;
OpenIABEventManager.purchaseSucceededEvent += OnPurchaseSucceededEvent;
OpenIABEventManager.purchaseFailedEvent += OnPurchaseFailedEvent;
OpenIABEventManager.consumePurchaseSucceededEvent += OnConsumePurchaseSucceededEvent;
OpenIABEventManager.consumePurchaseFailedEvent += OnConsumePurchaseFailedEvent;
}
private void OnDisable()
{
OpenIABEventManager.billingSupportedEvent -= OnBillingSupportedEvent;
OpenIABEventManager.billingNotSupportedEvent -= OnBillingNotSupportedEvent;
OpenIABEventManager.purchaseSucceededEvent -= OnPurchaseSucceededEvent;
OpenIABEventManager.purchaseFailedEvent -= OnPurchaseFailedEvent;
OpenIABEventManager.consumePurchaseSucceededEvent -= OnConsumePurchaseSucceededEvent;
OpenIABEventManager.consumePurchaseFailedEvent -= OnConsumePurchaseFailedEvent;
    if (isInitialized)
       OpenIAB.unbindService();
}
private void Start()
{
DontDestroyOnLoad(this);
#if UNITY_ANDROID
// Map skus for different stores
OpenIAB.mapSku(SKU500, OpenIAB_Android.STORE_GOOGLE, COINS500);
OpenIAB.mapSku(SKU1000, OpenIAB_Android.STORE_GOOGLE, COINS1000);
OpenIAB.mapSku(SKU10000, OpenIAB_Android.STORE_GOOGLE, COINS10000);
// Application public key
var publicKey = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiRlSkx6So01vVtRHIF8u2I9A+nRVfPklQOvTpmz5Z5EMsdW9cO6V9IKBoRB3dTZvi+Rd3c/HnDVJZmfyWVbBfAP0RH4LjmVBoQDV1MePYsONJNcve0tr9TFcOvc+10cQt0MICjSxo3QFODI/1uyIdckgJvyCkOJn7uZg1fSwuv7itWexZTo7+JBxwmhDwrCd98jIwOGPWoc9bw7dVBg5zv5n1THb/OTr+zBriyJxSQYGxXATyWE0+lanCEAXCoouMsXD9R858BZMyRQb82Vj1IGJN4xIPFRhHD+SDqCfGdwxwn+mc/p50xIRRAfBfdBN56+4YlUtafd8apIpr1aH4QIDAQAB"; // ліцензійний ключ
var options = new Options();
options.checkInventoryTimeoutMs = Options.INVENTORY_CHECK_TIMEOUT_MS * 2;
options.discoveryTimeoutMs = Options.DISCOVER_TIMEOUT_MS * 2;
options.checkInventory = true;
options.verifyMode = OptionsVerifyMode.VERIFY_EVERYTHING;
options.prefferedStoreNames = new[] { OpenIAB_Android.STORE_GOOGLE };
options.availableStoreNames = new[] { OpenIAB_Android.STORE_GOOGLE };
options.storeKeys = new Dictionary<string, string> { { OpenIAB_Android.STORE_GOOGLE, publicKey } };
options.storeSearchStrategy = SearchStrategy.INSTALLER_THEN_BEST_FIT;
// Transmit options and start the service
OpenIAB.init(options);
#endif
}
public void BuyCoins(int count)
{
if (!isInitialized)
return;
switch (count)
{
case 500:
OpenIAB.purchaseProduct(SKU500);
break;
case 1000:
OpenIAB.purchaseProduct(SKU1000);
break;
case 10000:
OpenIAB.purchaseProduct(SKU10000);
break;
default:
Debug.LogError("Unknown purchase data!");
break;
}
}
private void OnBillingSupportedEvent()
{
isInitialized = true;
Debug.Log("billingSupportedEvent");
}
private void OnBillingNotSupportedEvent(string error)
{
Debug.LogError("billingNotSupportedEvent: " + error);
}
private void OnPurchaseSucceededEvent(Purchase purchase)
{
Debug.Log("purchaseSucceededEvent: " + purchase);
switch (purchase.Sku)
{
case SKU500:
OpenIAB.consumeProduct(purchase);
break;
case SKU1000:
OpenIAB.consumeProduct(purchase);
break;
case SKU10000:
OpenIAB.consumeProduct(purchase);
break;
default:
Debug.LogError("Unknown SKU: " + purchase.Sku);
break;
}
EventSender.SendEvent(Purchase, true);
}
private void OnPurchaseFailedEvent(int errorCode, string errorMessage)
{
Debug.LogError("purchaseFailedEvent: " + errorMessage);
EventSender.SendEvent(Purchase, false);
}
private void OnConsumePurchaseSucceededEvent(Purchase purchase)
{
Debug.Log("consumePurchaseSucceededEvent: " + purchase);
EventSender.SendEvent(Consume, true);
}
private void OnConsumePurchaseFailedEvent(string error)
{
Debug.LogError("consumePurchaseFailedEvent: " + error);
EventSender.SendEvent(Consume, false);

Можливі проблеми: 

Для можливості коректного тестування покупок необхідно вибирати "Controlled by Google" при створенні покупки у консолі розробника.

http://stackoverflow.com/questions/14600664/android-in-app-purchase-signature-verification-failed