Essential Kit Tutorials
DocumentationDownload
Latest(v3)
Latest(v3)
  • Introduction
  • Features Overview
  • Whats new in v3
    • Version 3 vs Version 2
    • Release Notes
    • Upgrade from V2
  • Plugin Overview
    • Settings
    • Folder Structure
    • Installation FAQ
    • Upgrade Guide
  • Features
    • πŸ“’Address Book
      • Setup
      • Usage
      • Testing
      • FAQ
    • App Shortcuts
      • Setup
      • Usage
    • πŸ†•App Updater
      • Setup
      • Usage
    • πŸ’²Billing Services
      • Setup
        • iOS
        • Android
      • Usage
      • Testing
        • iOS
        • Android
      • FAQ
    • ☁️Cloud Services
      • Setup
        • iOS
        • Android
      • Usage
      • Testing
      • FAQ
    • πŸ”—Deep Link Services
      • Setup
        • iOS
        • Android
      • Usage
      • Testing
      • FAQ
    • πŸ› οΈUtilities (Extras)
      • Usage
    • πŸ’―Game Services
      • Setup
        • iOS
        • Android
      • Usage
      • FAQ
    • πŸ“ΈMedia Services
      • Setup
      • Usage
      • FAQ
    • πŸ“†Native UI
      • Setup
      • Usage
      • FAQ
      • Examples
        • Login Dialog
    • Network Services
      • Setup
      • Usage
      • FAQ
    • ⏰Notification Services
      • Setup
        • iOS
        • Android
      • Usage
      • Examples
        • Nudge to come-back to the game
      • FAQ
    • ⭐Rate My App
      • Setup
      • Usage
      • FAQ
    • 🀝Sharing
      • Setup
      • Usage
        • Message Composer
        • Mail Composer
        • Social Share Composer
        • Share Sheet
      • FAQ
      • Examples
        • Add Attachment Example
    • Task Services
      • Setup
      • Usage
    • 🌏Web View
      • Setup
      • Usage
      • FAQ
      • Examples
        • Loading Pdf File
  • Notes
    • Resolving Android Gradle Build Errors
    • Google Play Services Authentication
    • Target API Level vs Min API Level
    • Handling Refunds for In-App Purchases (Billing Services)
Powered by GitBook
On this page
  • Why InitializeStore call returns empty product list in the callback ?
  • Why InitializeStore returns products in out of order?
  • Why on Android, purchases bought with an account are restored even when logged in with a different account in google play?
  • Are the testers charged for testing too?
  • How to do receipt verification with Appodeal?

Was this helpful?

Edit on GitHub
  1. Features
  2. Billing Services

FAQ

PreviousAndroidNextCloud Services

Last updated 1 month ago

Was this helpful?

If you haven't tried yet, now's the perfect time! Our plugin simplifies in-app purchases with support for Consumables, Non-Consumables, Subscriptions (with multiple offers), and Store Promotionsβ€”all through a unified API for iOS and Android.

And the best part? No analytics, no trackingβ€”just a privacy-focused solution built for game developers. πŸš€ !

Why InitializeStore call returns empty product list in the callback ?

This usually happens for two reasons.

  • There are no billing products set up in the Essential Kit Settings (Refer )

  • Platform specific issue

iOS

🟒 Make sure the Paid Agrements is in Active status

Android

Why InitializeStore returns products in out of order?

We always recommend to refer a product with its id rather than index. This is for one main reason

Products can be marked as inactive or delete in the future

If a product is deleted in the future versions, our plugin ordering the products will break older versions. For this reason we always recommend not to rely on the index, but instead on the product id to refer a product.

To get product details for a product id, you can make use of BillingServices.GetProductWithId method.

Why on Android, purchases bought with an account are restored even when logged in with a different account in google play?

This is usual behaviour on Android.

Purchases on Android aren't linked to the account which is logged into the google play app. They are "linked to the account which installs the app".

So, if you re-install the app with new account, thats when the restore purchases reflect the new account purchases and stops old purchases.

Are the testers charged for testing too?

On iOS, sandbox testers are not charged any time. For all test flight users, IAP are offered free by default (and they don't need to use sandbox tester accounts too)

How to do receipt verification with Appodeal?

IBillingTransaction transaction; //Get this value from the Transaction Change callback
//...
IDictionary rawData =  (IDictionary)ExternalServiceProvider.JsonServiceProvider.FromJson(transaction.RawData);
var originalTransaction = rawData != null ? rawData["transaction"] as string : null;
var signature = rawData != null ? rawData["signature"] as string : null;

#if UNITY_ANDROID
    var additionalParams = new Dictionary<string, string> { { "key1", "value1" }, { "key2", "value2" } };

    var purchase = new PlayStoreInAppPurchase.Builder(transaction.Product.Type == BillingProductType.Subscription ? PlayStorePurchaseType.Subs : PlayStorePurchaseType.InApp)
        .WithAdditionalParameters(additionalParams)
        .WithPurchaseTimestamp(new DateTimeOffset(transaction.DateUTC).ToUnixTimeSeconds())
        .WithDeveloperPayload("payload")
        .WithPurchaseToken(transaction.Receipt)
        .WithPurchaseData(originalTransaction)
        .WithPublicKey(BillingServices.UnitySettings.AndroidProperties.PublicKey)
        .WithSignature(signature)
        .WithCurrency(transaction.Product.Price.Code)
        .WithOrderId(transaction.Id)
        .WithPrice($"{transaction.Product.Price.Value}")
        .WithSku(transaction.Product.PlatformId)
        .Build();

    Appodeal.ValidatePlayStoreInAppPurchase(purchase, this);
#elif UNITY_IOS
    var additionalParams = new Dictionary<string, string> { { "key1", "value1" }, { "key2", "value2" } };

    var purchase = new AppStoreInAppPurchase.Builder(transaction.Product.Type == BillingProductType.Subscription ? AppStorePurchaseType.AutoRenewableSubscription : transaction.Product.Type == BillingProductType.Consumable ? AppStorePurchaseType.Consumable : AppStorePurchaseType.NonConsumable)
        .WithAdditionalParameters(additionalParams)
        .WithTransactionId(transaction.Id)
        .WithProductId(transaction.Product.PlatformId)
        .WithCurrency(transaction.Product.Price.Code)
        .WithPrice($"{transaction.Product.Price.Value}")
        .Build();

    Appodeal.ValidateAppStoreInAppPurchase(purchase, this);
#endif

If you have pending information that needs to be filled in Agreements, Tax, and Banking section of iTunes Connect.

If you haven't accepted the latest Apple Development Programme License Agreement.

If you have wrong package name or version code for the side-loaded apk

If the account is not a valid tester where he/she didn't opt to become a tester from

On Android, normal testers(who opt-in through test track url) are charged and will be refunded in 14 days. Where as won't be charged anytime.

πŸ’²
✍️
βœ…
❌
πŸ’β€β™‚οΈ
Essential Kit
Give it a try today
🀚
license testers
opt-in testing track link
Setup