# BlueStack SDK - Unity Plugin

## Introduction

[![Build Status](<https://teamcity.azerdev.com/app/rest/builds/buildType:(id:BlueStack_Sdk_Build_SDK_Unity)/statusIcon>)](https://teamcity.azerdev.com/viewType.html?buildTypeId=BlueStack_Sdk_Build_SDK_Unity&guest=1)

BlueStack unity plugin provides functionalities to integrate native(Android and iOS) BlueStack SDKs into unity project.
Using this plugin Game developer can display ads on their game from BlueStack and other third-party ad networks.
This SDK supports four types of Ads:

1. Banner Ads
2. Interstitial Ads
3. Rewarded Ads
4. Native Ads

## Prerequisites

-   Use Unity 2020 or higher
-   Android
    - Minimum Android API level of 21 or higher  
    - Target Android API level 31 or higher
-   iOS
    - Xcode 15.3 or higher  
    - iOS 12.2 or higher
    - [CocoaPods](https://guides.cocoapods.org/using/getting-started.html)

:::info
Android API level can be set in `Project Settings > Player > Android > Other Settings > Other Settings.`
:::

## Import the package

- Add scoped registries in `Edit -> Project Settings -> Package Manager -> Add Scoped Registry`

- Add npm registry for BlueStack

  ```showLineNumbers
  Name: Azerion
  URL: http://registry.npmjs.com
  Scope(s): com.azerion.bluestack
  ```

- BlueStack Unity package has a indirect dependency of **EDM4U** which need to be resolved using UPM.

  ```showLineNumbers
  Name: package.openupm.com
  URL: https://package.openupm.com
  Scope(s): com.google.external-dependency-manager
  ```

- Update `Packages/manifest.json`
  ```json showLineNumbers
  {
    "dependencies": {
      "com.azerion.bluestack": "3.0.0"
    }
  }
  ```

## Initialize the SDK

Before loading ads, you need to initialize the BlueStack SDK by calling `BlueStackAds.Initialize()` This needs to be done only once, ideally at app launch.
Here's an example:

```csharp showLineNumbers
...
using Azerion.BlueStack.API;

public class BlueStackAdController : MonoBehaviour
{
    public void Start()
    {
        Settings settings = new Settings(isDebugModeEnabled: true);
        // Initialize the BlueStack SDK.
        BlueStackAds.Initialize(appId, settings, HandleSDKInitCompleteAction);
    }

    // HandleSDKInitCompleteAction callback is called once SDK Initialization is complete.
    private void HandleSDKInitCompleteAction(SDKInitializationStatus sdkInitializationStatus)
    {
        bool isSuccess = sdkInitializationStatus.IsSuccess;
        string description = sdkInitializationStatus.Description;

        if (isSuccess)
        {
            Debug.Log("BlueStack SDK initialization success: " + description);
        }
        else
        {
            Debug.Log("BlueStack SDK initialization failed: " + description);
        }
    }
}
```

## Show ads
Here's an example of how to display a banner ad:

```csharp showLineNumbers
using Azerion.BlueStack.API;
using Azerion.BlueStack.API.Banner;

public class BlueStackAdsController : MonoBehaviour
{
...
    private BannerAd _bannerAd;
...

    // Create a new banner ad
    private void CreateBanner()
    {
        _bannerAd = new BannerAd(placementId, adPosition);
    }
    
    private void DisplayBanner()
    {
        // On banner Load, display the banner ad
        _bannerAd.OnBannerDidLoad += (sender, args) =>
        {
            _bannerAd?.Show();
        };
        
        // Load banner ad   
        _bannerAd?.Load(AdSize.Banner);
    }
}
```

## Documentation

-   [SDK Integration](https://developers.bluestack.app/unity)
-   [Displaying Ads](https://developers.bluestack.app/unity/ad-formats/)
