Coding Guidelines

Connect to a service

Connect InApp client to the billing services using the Connect method. Best practice is to do this on your app start.


As soon, connection flow finished  OnServiceConnected event is fired. See the code snippet bellow:

//subscribing to conection finish action
UM_InAppPurchaseManager.Client.OnServiceConnected += OnBillingConnectFinishedAction;

private void OnBillingConnectFinishedAction (UM_BillingConnectionResult result) {
	UM_InAppPurchaseManager.Client.OnServiceConnected -= OnBillingConnectFinishedAction;
	if(result.isSuccess) {
	} else {
		Debug.Log("Failed to connect");

You can also find out current connection state with the IsConnected property:


If a connection is failed (for example, no internet connection available) you can try to call the Connect method later, but you can't use any of billing API before UM_InAppPurchaseManager is successfully initialized. 

Retrieving In-App product info

After completing a Setup step you already filled info about your products. However, after you have successfully connected to a billing service you can get more information about your items. Like a localised price for example. 

List of all registred product models is available with the InAppProducts property of the UM_InAppPurchaseManager class. See the code snippet bellow:


You can also get product template using following  UM_InAppPurchaseManager methods:

static UM_InAppProduct GetProductById(string id);
static UM_InAppProduct GetProductByIOSId(string id);
static UM_InAppProduct GetProductByAndroidId(string id);
static UM_InAppProduct GetProductByAmazonId(string id);
static UM_InAppProduct GetProductByWp8Id(string id);

More information about loaded product template can be retrieved with UM_InAppProduct class. 

The code snippet bellow show's how to print a general products info:

foreach(UM_InAppProduct product in UM_InAppPurchaseManager.InAppProducts) {
	Debug.Log("Id: " +;
	Debug.Log("IsConsumable: " + product.IsConsumable);

	Debug.Log("Title: " + product.Title);
	Debug.Log("Description: " + product.Description);
	Debug.Log("Price: " + product.Price);

	Debug.Log("IOSId: " + product.IOSId);
	Debug.Log("AndroidId: " + product.AndroidId);
	Debug.Log("WP8Id: " + product.WP8Id);

Implementing a Purchase Flow

You purchase flow should look similar to the one bellow:

  • Start purchase using the Purchase method
  • Lock the user interface and wait for a complete event
  • If a complete event is succeeded, processed to a next step. Otherwise, show user and error message and finish the purchase flow. 
  • (Optional) Validate purchase info
  • Use Consume method  (only for the consumable items like coins, point, energy, etc..)
  • Reward your customer for a purchase
  • (Optional) Finish purchase flow

See the following code snippets as the example how to execute the steps described above.

Start purchase and subscribe to a complete event

UM_InAppPurchaseManager.Client.OnPurchaseFinished += OnPurchaseFlowFinishedAction;

private void OnPurchaseFlowFinishedAction (UM_PurchaseResult result) {
	UM_InAppPurchaseManager.Client.OnPurchaseFinished -= OnPurchaseFlowFinishedAction;
	if(result.isSuccess) {
		UM_ExampleStatusBar.text = "Product " + + " purchase Success";
	} else  {
		UM_ExampleStatusBar.text = "Product " + + " purchase Failed";

Consume a product


Tips and Tricks

You may always check if a product was already purchased with IsProductPurchased method.:

bool IsPurchased = UM_InAppPurchaseManager.Client.IsProductPurchased(YOUR_PRODUCT_ID);

The Ultimate Mobile combine API for a lot's of the different platform.  We created a wrapper that allows you to implement InApps API only once, and it will work on all supported platforms.

However, you should know about the differences and possibilities on other platforms.