Welcome to AdInMo’s SDK docume...
...
IAPBoost
Unity IAP v4 Integration Guide
15 min
requirements unity 2021 3 lts or newer adinmoplugin v3 14 or above unity iap (upm) v4 x x free adinmo developer account sign up here installation prerequisites 1\ install unity iap v4 open package manager window→ package manager select unity registry from the dropdown (top left) search for "in app purchasing" install version 4 x x (latest stable) 2\ create adinmo developer account sign up for a free account at adinmo developer portal login to your developer portal dashboard navigate to downloads section to access the latest sdk 3\ install adinmoplugin download the adinmoplugin package from your adinmo developer portal import the unitypackagefile assets→ import package→ custom package verify installation check that adinmopluginfolder appears in your assets confirm version ensure it's v3 14 or above in the package documentation integration guide for existing unity iap v4 users (recommended) if you already have unity iap v4 working, this is a simple 2 step upgrade step 1 add compiler symbol open player settings edit→ project settings→ player find script compilation section (scroll down) add to scripting define symbols adinmo unity store v4 click apply and wait for recompilation navigation path edit → project settings → player → script compilation → scripting define symbols add adinmo unity store v4 step 2 replace initialize call change just one line in your existing code before unitypurchasing initialize(this, builder); after unitypurchasingadinmoextensions initializewithadinmo(this, builder); your existing purchase handling logic remains completely unchanged complete implementation example required imports using unityengine; using unityengine purchasing; using unityengine purchasing security; full implementation public class myiapmanager monobehaviour, istorelistener { private istorecontroller storecontroller; private iextensionprovider extensionprovider; void start() { initializepurchasing(); } private void initializepurchasing() { if (isinitialized()) return; var builder = configurationbuilder instance(standardpurchasingmodule instance()); // add your products builder addproduct("premium upgrade", producttype nonconsumable); builder addproduct("gold coins 100", producttype consumable); builder addproduct("monthly subscription", producttype subscription); // initialize with adinmo integration unitypurchasingadinmoextensions initializewithadinmo(this, builder); debug log("unity iap initializing with adinmo extensions "); } private bool isinitialized() { return storecontroller != null && extensionprovider != null; } \#region istorelistener implementation public void oninitialized(istorecontroller controller, iextensionprovider extensions) { debug log("unity iap initialization successful adinmo integration active"); storecontroller = controller; extensionprovider = extensions; // your existing initialization logic here displayavailableproducts(); } public void oninitializefailed(initializationfailurereason error) { debug logerror($"unity iap initialization failed {error}"); switch (error) { case initializationfailurereason appnotknown debug logerror("app not configured in store"); break; case initializationfailurereason purchasingunavailable debug logerror("purchasing unavailable on this device"); break; case initializationfailurereason noproductsavailable debug logerror("no products available for purchase"); break; } // handle initialization failure in your ui showinitializationerror(error); } public purchaseprocessingresult processpurchase(purchaseeventargs args) { debug log($"processing purchase {args purchasedproduct definition id}"); // your existing purchase handling logic switch (args purchasedproduct definition id) { case "premium upgrade" unlockpremium(); debug log("premium upgrade unlocked"); break; case "gold coins 100" addcoins(100); debug log("added 100 gold coins"); break; case "monthly subscription" activatesubscription(); debug log("monthly subscription activated"); break; default debug logwarning($"unknown product {args purchasedproduct definition id}"); break; } // adinmo automatically tracks this purchase in the background return purchaseprocessingresult complete; } public void onpurchasefailed(product product, purchasefailurereason failurereason) { debug logerror($"purchase failed product {product definition storespecificid}, reason {failurereason}"); switch (failurereason) { case purchasefailurereason billingunavailable debug logerror("billing unavailable"); break; case purchasefailurereason usercancelled debug log("user cancelled purchase"); break; case purchasefailurereason paymentdeclined debug logerror("payment declined"); break; case purchasefailurereason duplicatetransaction debug logerror("duplicate transaction"); break; case purchasefailurereason productunavailable debug logerror($"product unavailable {product definition id}"); break; } // handle purchase failure in your ui showpurchaseerror(product, failurereason); } \#endregion \#region public purchase methods public void buypremiumupgrade() { buyproductid("premium upgrade"); } public void buygoldcoins() { buyproductid("gold coins 100"); } public void buysubscription() { buyproductid("monthly subscription"); } private void buyproductid(string productid) { if (!isinitialized()) { debug logerror("iap not initialized"); return; } product product = storecontroller products withid(productid); if (product != null && product availabletopurchase) { debug log($"purchasing product {product definition id}"); storecontroller initiatepurchase(product); } else { debug logerror($"product not available for purchase {productid}"); } } \#endregion \#region game logic (your implementation) private void displayavailableproducts() { // your ui logic to show available products foreach (product product in storecontroller products all) { if (product availabletopurchase) { debug log($"available {product definition id} {product metadata localizedpricestring}"); } } } private void unlockpremium() { // your game logic for premium unlock playerprefs setint("premiumunlocked", 1); } private void addcoins(int amount) { // your game logic for adding coins int currentcoins = playerprefs getint("goldcoins", 0); playerprefs setint("goldcoins", currentcoins + amount); } private void activatesubscription() { // your game logic for subscription activation playerprefs setstring("subscriptionactive", system datetime now\ tostring()); } private void showinitializationerror(initializationfailurereason error) { // your ui logic for showing initialization errors } private void showpurchaseerror(product product, purchasefailurereason reason) { // your ui logic for showing purchase errors } \#endregion } critical product id matching your unity iap product ids must exactly match your adinmo campaign skus unity code builder addproduct("premium upgrade", producttype nonconsumable); // product id "premium upgrade" adinmo dashboard campaign → sku id "premium upgrade" ← must match exactly (case sensitive) common matching issues ❌ "premium upgrade"vs "premium upgrade"(case mismatch) ❌ "premium upgrade"vs "premium upgrade"(separator mismatch) ❌ "com yourcompany premium upgrade"vs "premium upgrade"(prefix mismatch) troubleshooting common issues 1\ compiler symbol not applied symptom unitypurchasingadinmoextensionsnot found solution add adinmo unity store v4to scripting define symbols restart unity editor after adding the symbol wait for full recompilation 2\ sku mismatch symptom purchases work but don't appear in adinmo dashboard solution double check product id spelling (case sensitive) verify sku configuration in adinmo portal check for hidden characters or extra spaces 3\ missing dependencies symptom build errors or missing references solution ensure unity iap v4 is installed via package manager verify adinmoplugin v3 14+ is imported check that all required assemblies are referenced