之前的文章介绍了OneWay广告的注册和测试设备的添加,这篇文章主要介绍如何将OneWay广告集成到游戏项目中去。由于我的游戏是使用Unity引擎开发的,所以主要介绍Unity版SDK的集成过程。
登录OneWay后台,点击技术对接,点击下载Unity版SDK。
压缩包解压后如下:
将OneWaySDK-Unity 2.3.5.unitypackage资源导入到项目工程中
但会报一个关于ios平台的错
由于我只出Android的apk,因此,将其报错误的脚本关于iOS的代码注释掉即可。
Android平台需要添加Android v4支持库到项目中,因此需要检查导入的SDK中是否有这份jar包
如此SDK导入工作完成,接下来开始封装调用广告的API。
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
/*
* Author:W
* OneWay广告管理
*/
//激励视频广告回调
public delegate void OnRewardedAdReadyEvent();
public delegate void OnRewardedAdShowEvent(string placementId);
public delegate void OnRewardedAdClickEvent(string placementId);
public delegate void OnRewardedAdCloseEvent(string placementId,string state);
//插屏视频广告回调
public delegate void OnInterstitialAdReadyEvent();
public delegate void OnInterstitialAdShowEvent(string placementId);
public delegate void OnInterstitialAdClickEvent(string placementId);
public delegate void OnInterstitialAdCloseEvent(string placementId, string state);
//插屏图片广告回调
public delegate void OnInterstitialImageAdReadyEvent();
public delegate void OnInterstitialImageAdShowEvent(string placementId);
public delegate void OnInterstitialImageAdClickEvent(string placementId);
public delegate void OnInterstitialImageAdCloseEvent(string placementId, string state);
public class OneWayAdManager : MonoBehaviour
{
private static OneWayAdManager _instance;
public static OneWayAdManager Instance
{
get
{
if (_instance == null)
{
_instance = new GameObject("OneWayAdManager").AddComponent<OneWayAdManager>();
DontDestroyOnLoad(_instance.gameObject);
}
return _instance;
}
}
#region 相关申请的ID
//Android 应用 id
public const string PublishID_Android = "ed2ba792d70941f8";
//后台申请的激励视频广告ID
public const string RewardAd_XXX = "T12WE4T93KK67QMX";
public const string RewardAd_CCC = "T12WE4T93KK67QMX";
//后台申请的插屏视频广告ID
public const string InterAd_XXX = "WLFJFVFI54OLEQJX";
public const string InterAd_CCC = "WLFJFVFI54OLEQJX";
//后台申请的插屏图片广告ID
public const string InterImgAd_XXX = "C4QT9THWMMR8Y14B";
public const string InterImgAd_CCC = "C4QT9THWMMR8Y14B";
#endregion
#region 广告相关回调
public OnRewardedAdReadyEvent OnRewardedAdReadyEvent;
public OnRewardedAdShowEvent OnRewardedAdShowEvent;
public OnRewardedAdClickEvent OnRewardedAdClickEvent;
public OnRewardedAdCloseEvent OnRewardedAdCloseEvent;
public OnInterstitialAdReadyEvent OnInterstitialAdReadyEvent;
public OnInterstitialAdShowEvent OnInterstitialAdShowEvent;
public OnInterstitialAdClickEvent OnInterstitialAdClickEvent;
public OnInterstitialAdCloseEvent OnInterstitialAdCloseEvent;
public OnInterstitialImageAdReadyEvent OnInterstitialImageAdReadyEvent;
public OnInterstitialImageAdShowEvent OnInterstitialImageAdShowEvent;
public OnInterstitialImageAdClickEvent OnInterstitialImageAdClickEvent;
public OnInterstitialImageAdCloseEvent OnInterstitialImageAdCloseEvent;
#endregion
void Awake()
{
_instance = this;
DontDestroyOnLoad(_instance.gameObject);
InitSDK();
}
/// <summary>
/// SDK初始化
/// </summary>
private void InitSDK()
{
//PublishId :您在我们的开发者平台创建时应用后,所获得的唯一应用ID(区分 iOS/Android)。
OneWaySDK.configure("PublishID_iOS", PublishID_Android);
//初始化激励广告【如果需要】
OneWaySDK.initRewardedAd();
OneWaySDK.onRewardedAdReadyEvent += () => {
Debug.Log("OneWaySDK RewardedAd Ready");
if (OnRewardedAdReadyEvent != null)
OnRewardedAdReadyEvent();
};
OneWaySDK.onRewardedAdShowEvent += (placeId) => {
Debug.Log("OneWaySDK RewardedAd Show for tag: " + placeId);
if (OnRewardedAdShowEvent != null)
OnRewardedAdShowEvent(placeId);
};
OneWaySDK.onRewardedAdClickEvent += (placeId) => {
Debug.Log("OneWaySDK RewardedAd Click for tag: " + placeId);
if (OnRewardedAdClickEvent != null)
OnRewardedAdClickEvent(placeId);
};
OneWaySDK.onRewardedAdCloseEvent += (placeId, state) => {
Debug.Log("OneWaySDK RewardedAd Close for tag: " + placeId + " state is: " + state);
if (OnRewardedAdCloseEvent != null)
OnRewardedAdCloseEvent(placeId, state);
};
//初始化插屏视频广告【如果需要】
OneWaySDK.initInterstitialAd();
OneWaySDK.onInterstitialAdReadyEvent += () => {
Debug.Log("OneWaySDK InterstitialAd Ready ");
if (OnInterstitialAdReadyEvent != null)
OnInterstitialAdReadyEvent();
};
OneWaySDK.onInterstitialAdShowEvent += (placeId) => {
Debug.Log("OneWaySDK InterstitialAd Show for tag: " + placeId);
if (OnInterstitialAdShowEvent != null)
OnInterstitialAdShowEvent(placeId);
};
OneWaySDK.onInterstitialAdClickEvent += (placeId) => {
Debug.Log("OneWaySDK InterstitialAd Click for tag: " + placeId);
if (OnInterstitialAdClickEvent != null)
OnInterstitialAdClickEvent(placeId);
};
OneWaySDK.onInterstitialAdCloseEvent += (placeId, state) => {
Debug.Log("OneWaySDK InterstitialAd Close for tag: " + placeId + " state is: " + state);
if (OnInterstitialAdCloseEvent != null)
OnInterstitialAdCloseEvent(placeId, state);
};
//初始化插屏图片广告【如果需要】
OneWaySDK.initInterstitialImageAd();
OneWaySDK.onInterstitialImageAdReadyEvent += () => {
Debug.Log("OneWaySDK InterstitialImageAd Ready ");
if (OnInterstitialImageAdReadyEvent != null)
OnInterstitialImageAdReadyEvent();
};
OneWaySDK.onInterstitialImageAdShowEvent += (placeId) => {
Debug.Log("OneWaySDK InterstitialImageAd Show for tag: " + placeId);
if (OnInterstitialImageAdShowEvent != null)
OnInterstitialImageAdShowEvent(placeId);
};
OneWaySDK.onInterstitialImageAdClickEvent += (placeId) => {
Debug.Log("OneWaySDK InterstitialImageAd Click for tag: " + placeId);
if (OnInterstitialImageAdClickEvent != null)
OnInterstitialImageAdClickEvent(placeId);
};
OneWaySDK.onInterstitialImageAdCloseEvent += (placeId, state) => {
Debug.Log("OneWaySDK InterstitialImageAd Close for tag: " + placeId + " state is: " + state);
if (OnInterstitialImageAdCloseEvent != null)
OnInterstitialImageAdCloseEvent(placeId, state);
};
//SDK错误事件监听
OneWaySDK.onOneWaySDKDidErrorEvent += (err, msg) => {
Debug.LogError("OneWaySDK is err: " + err + " , message: " + msg);
};
}
/// <summary>
/// 播放激励广告
/// placementId:用于给开发者标记广告,在代理回调时会带上此参数, 默认为 "default"。
/// </summary>
public void ShowRewardedAd(string placementId= "default")
{
//判断激励广告是否可以播放
if (OneWaySDK.isRewardedAdReady())
{
OneWaySDK.showRewardedAd(placementId);
}
}
/// <summary>
/// 播放插屏视频广告
/// placementId : 用于给开发者标记广告,在代理回调时会带上此参数, 默认为 "default".
/// </summary>
/// <param name="placementId"></param>
public void ShowInterstitialAd(string placementId = "default")
{
//判断插屏视频广告是否可以播放
if (OneWaySDK.isInterstitialAdReady())
{
OneWaySDK.showInterstitialAd(placementId);
}
}
/// <summary>
/// 播放插屏广告
/// placementId : 用于给开发者标记广告,在代理回调时会带上此参数, 默认为 "default".
/// </summary>
/// <param name="placementId"></param>
public void ShowInterstitialImageAd(string placementId = "default")
{
//判断插屏图片广告是否可以播放
if (OneWaySDK.isInterstitialImageAdReady())
{
OneWaySDK.showInterstitialImageAd(placementId);
}
}
}
测试脚本如下:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.UI;
/*
* Author:W
* 广告测试
*/
public class TestAd : MonoBehaviour
{
public Button RewardAdBtn;
public Button InterAdBtn;
public Button InterImgAdBtn;
void Awake()
{
RewardAdBtn.onClick.AddListener(OnRewardAdBtnClick);
InterAdBtn.onClick.AddListener(OnInterAdBtnClick);
InterImgAdBtn.onClick.AddListener(OnInterImgAdBtnClick);
}
void OnDestroy()
{
RewardAdBtn.onClick.RemoveListener(OnRewardAdBtnClick);
InterAdBtn.onClick.RemoveListener(OnInterAdBtnClick);
InterImgAdBtn.onClick.RemoveListener(OnInterImgAdBtnClick);
}
private void OnRewardAdBtnClick()
{
Debug.Log("激励视频广告点击");
OneWayAdManager.Instance.ShowRewardedAd(OneWayAdManager.RewardAd_CCC);
}
private void OnInterAdBtnClick()
{
Debug.Log("插屏视频广告点击");
OneWayAdManager.Instance.ShowInterstitialAd(OneWayAdManager.InterAd_CCC);
}
private void OnInterImgAdBtnClick()
{
Debug.Log("插屏图片广告点击");
OneWayAdManager.Instance.ShowInterstitialImageAd(OneWayAdManager.InterImgAd_CCC);
}
}
打出apk,测试结果如下