Unity Integration Plugin

OSP Unity Tool

To make the integration of OSP in Unity easier, we developed a group of scripts that allows the developers to add, remove, and manage Product IDs, and to place a button in Canvas with the OSP system implemented.

Video guide

Please note that some images from the video may be outdated due to periodical updates of the plug-in.

Installation

To use the scripts in Unity you need to download them here. The tool has multiple scripts that work together and need to be placed inside the folders Editor, Plugins, Resources, and Scripts:

  • Editor
    • IntegrationPluginCompiledEditor.dll
  • Plugins
    • Purchase Manager.cs
    • OspActivity.kt
    • Android
  • Resources
    • storage.json
  • Scripts
    • SetUid.cs
    • ShowSkuPrice.cs
  • Assets
    • IntegrationPluginCompiled.dll

Usage

Under the tab Services on the top bar of the editor you will find two options:

  • Add OSP Button - Add a button to canvas that executes the OSP flow when clicked.
  • OSP Catalog - Open a window to manage OSP configuration.
1628

Add OSP Button

When you add a new OSP Button on the canvas you will see something like the image below. The button has a dropdown to choose the ID of the product being bought by the user.

Alternatively, you can add the OSP Button as a script to your already existing buttons.

OSP Catalog

The OSP Catalog is where you can manage your product IDs and set your app domain and backend URL. You can see below what it looks like:

Purchase Manager

The Purchase Manager allows you to be notified when a purchase is completed by the users. When the wallet finishes the transaction, a message is sent to the PurchaseManager game object, which then executes a function. This function should be customized by you with the intended behavior. You should also create the PurchaseManager game object and associate the script to it.

SKU Price

The ShowSkuPrice.cs script demonstrates the implementation of the GetSkuLocalPriceLabel function, which is present in every OSP Button. This function fetches the consumer's location-specific price from the Catappult website. It can effortlessly be used to showcase the price within the button or adjacent labels.

Set UID

Although the plug-in has a default UID generation method, it is also possible to set how you wish to generate your UID. To do so, you need to add the script SetUID to a game object and change the code to define your UID generation method.

Create your web service URL

In order to handle the buy requests you will need a web service that receives them and returns a callback URL. The code below is an implementation example using Python and FastAPI. You can read more about how OSP works here.

@app.get("/get_url")
async def get_url(product: str, userId: str = None):
    callback_url = "https://mybackend.com/callback"
    if userId:
        callback_url = f"{callback_url}?user_id={userId}"
    encoded_callback_url = urllib.parse.quote(callback_url, safe="")
    url = f"https://apichain.catappult.io/transaction/inapp?product={product}&domain=com.apptech.unity&callback_url={encoded_callback_url}"

    secret_key = b'YOUR_SECRET_KEY'
    signature = hmac.new(secret_key, url.encode("utf-8"), hashlib.sha256).hexdigest()
    return {"url": url + "&signature=" + signature}

@app.post("/callback")
async def callback(request: dict, user_id: str = None):
    print(request, user_id)
    return "OK"

The user ID variable is a parameter in the OSPButton script and is not defined by default. You need to define it with your own method of player identification.

public class OSPButton : MonoBehaviour
{
    [HideInInspector]
    public int popupIndex = 0;
    [HideInInspector]
    public string popupValue;
    [HideInInspector]
    public string serverUrl;
    private AndroidJavaObject activity;
    private string userId;
    private static int MATCH_DEFAULT_ONLY_ANDROID_PM =  65536;
  ...