Unity--Ads广告

Unity目前有自带的插广告SDK那就是它的Ads广告,由于更新迭代太快,网上找到的教程都于参考文档有所出入,但是大概思想都差不多,因此最好是参考Unity官方的参考文档进行开发

​​​​​​Initializing the SDK in Unity

第一步,首先在你除了用unity制作游戏项目外,你还需要在UGS中创建你的项目(UGS可以理解为是unity推出的一个平台,该平台的作用就是管理你做的游戏的收益,无论是广告还是用户数据什么,这里需要要用到该服务中的Ads广告模块)

附上链接:Unity Gaming Services

第二步:在进入UGS后,并且登录上你的unity账号后,点击广告模块,创建你的广告项目创建完广告后,随后进入这个页面

第三步:获取到Game ID和Ad Unit ID后,将你项目的平台切换成安卓或者 IOS(需要下载对应的模块)

第四步: 在Unity项目中安装Ads包, Window > Package Manager.

第五步:点击小云朵

随后点击General setting

扫描二维码关注公众号,回复: 15110728 查看本文章

或者点击项目设置,点击使用已经存在的项目

 点击Link project ID

 随后打开广告模块的功能

 第六步:引入UnityEngine.Ads 命名空间,并且在生命周期函数开始时就实例化GameID,并且可以实现 IUnityAdsInitializationListener 接口来回调实例化成功或者实例化失败的回调函数(这一步是实例化SDK)

using UnityEngine;
using UnityEngine.Advertisements;
public class GameADmanager : MonoBehaviour,IUnityAdsInitializationListener
{
 #if UNITY_IOS//这里使用宏定义,自动识别是苹果平台还是安卓平台
    private string gameIOSId = "52542xx";
# elif UNITY_ANDROID
    private string gameAnId = "52542xx";
#endif
  void Start()
    {
        if(!Advertisement.isInitialized&&Advertisement.isSupported)//如果没有实例化,并且支持广告
        {
            Advertisement.Initialize(gameAnId, true, this);//第一个参数是Game id确定平台,第二个为是否为测试模式(意思就是不是真广告),第三个为监听对象(回调函数跟这个监听的对象有关)

        }
    }
  public void OnInitializationComplete()//完成实例化的回调函数
    {
        // throw new System.NotImplementedException();
        Debug.Log("实例化成功");
    }

    public void OnInitializationFailed(UnityAdsInitializationError error, string message)//实例化失败的回调函数
    {
       // throw new System.NotImplementedException();
    }
}

 第七步:在实例化SDK后,就需要加载并展示广告,这里就需要用到Ad Unit ID,这里的加载和展示可以使用 IUnityAdsLoadListener 和 IUnityAdsShowListener用该接口来回调加载广告的成功于失败播放广告的成功与失败,和点击播放广告的事件(这里适用于Rewarded和Interstitial广告类型)代码是上方代码的扩充

using UnityEngine;
using UnityEngine.Advertisements;
public class GameADmanager : MonoBehaviour,IUnityAdsInitializationListener,IUnityAdsLoadListener,IUnityAdsShowListener
{
 #if UNITY_IOS//这里使用宏定义,自动识别是苹果平台还是安卓平台
    private string gameIOSId = "52542xx";
# elif UNITY_ANDROID
    private string gameAnId = "52542xx";
#endif
 private string AdvertisementID = "Rewarded_Android";//这是用来将广告类型确定为激励式广告(placementId,或叫Ad Unit ID)
  void Start()
    {
        if(!Advertisement.isInitialized&&Advertisement.isSupported)//如果没有实例化,并且支持广告
        {
            Advertisement.Initialize(gameAnId, true, this);//第一个参数是Game id确定平台,第二个为是否为测试模式(意思就是不是真广告),第三个为监听对象(回调函数跟这个监听的对象有关)
        }
        Advertisement.Load(AdvertisementID,this);//加载广告
    }
  public void OnInitializationComplete()//完成实例化的回调函数
    {
        // throw new System.NotImplementedException();
        Debug.Log("实例化成功");
    }

    public void OnInitializationFailed(UnityAdsInitializationError error, string message)//实例化失败的回调函数
    {
       // throw new System.NotImplementedException();
    }
public void OnUnityAdsAdLoaded(string placementId)//加载广告的回调函数,注意这里需要在手机端上才能执行回调
    {
        //throw new System.NotImplementedException();
        Debug.Log("加载完成");
        btnRewardedAd.interactable = true;
    }

    public void OnUnityAdsFailedToLoad(string placementId, UnityAdsLoadError error, string message)//加载失败
    {
        // throw new System.NotImplementedException();
        Debug.Log("加载失败");
    }

    public void OnUnityAdsShowClick(string placementId)//点击播放事件
    {
        //throw new System.NotImplementedException();
    }

    public void OnUnityAdsShowComplete(string placementId, UnityAdsShowCompletionState showCompletionState)//播放完成的回调函数
    {
       //throw new System.NotImplementedException();
       switch (showCompletionState)
        {
            case UnityAdsShowCompletionState.COMPLETED:
                Debug.Log("广告顺利播放完成");
                break;
            case UnityAdsShowCompletionState.SKIPPED:
                Debug.Log("广告已跳过");
                break;
            case UnityAdsShowCompletionState.UNKNOWN:
                Debug.Log("广告完成的原因尚不清楚");
                break;

        }

    }

    public void OnUnityAdsShowFailure(string placementId, UnityAdsShowError error, string message)//播放失败
    {
        //throw new System.NotImplementedException();
    }

    public void OnUnityAdsShowStart(string placementId)//开始播放
    {
        //throw new System.NotImplementedException();
    }
    void Update()
    {
        if(Input.GetKeyDown(KeyCode.A))
        {
            AdvertisementID = "Interstitial_Android";
            Advertisement.Show(AdvertisementID,this);//显示广告
        }
       
    }
}

 这里如果是想要Banner广告的话,它也和上方的其它两个实现原理是一样的,不过就是具体的方法有点区别,加载都是一样的,区别在于Show方法和其监听对象是BannerOptions的对象,并且需要手动绑定监听函数

    public void OnBannerClicked()//这些都是Banner的回调函数
    {
        Debug.Log("Banner被点击了");
    }
    public void OnBannerHidden()
    {
        Debug.Log("Banner隐藏了");
    }
    public void OnBannerShown()
    {
        Debug.Log("Banner显示出来了");
    }
  void Update()
    {
        
        if (Input.GetKeyDown(KeyCode.B))
        {
            AdvertisementID = "Banner_Android";
            // Advertisement.Show(AdvertisementID, this);
            BannerOptions options = new BannerOptions
            {
                clickCallback = OnBannerClicked,
                hideCallback = OnBannerHidden,
                showCallback = OnBannerShown
            };
            Advertisement.Banner.Show(AdvertisementID,options);
        }

    }

注意:在手机端作者测试的时候发现,在播放完一次广告,关闭后,再想激活广告就会没反应,因此作者在播放完广告后又加载一次广告,就又可以点击再次播放广告(具体是不是需要重新再加载作者目前也不清楚)

  public void ShowRewardedVideo()//点击按钮展示广告
    {
        Advertisement.Show(AdvertisementID,this);
        Debug.Log("点击了播放按钮");
        Advertisement.Load(AdvertisementID, this);//加载广告
    }

 第八步:回到UGS中的广告模块中,找到Setting->Test Mode,讲测试模式改为真实的广告,修改后记得点击Save

 第九步:打包发布在手机上测试,首先打开你手机的开发者模式和USB调试模式(不知道的可以上百度搜索对应手机型号),用USB线连接电脑和手机,打开Build Setting,在运行设备上就可以选择你的手机,下面的开发构建和自动连接探查器是在手机上运行程序时,可以在unity的控制台中显示你的Debug或其它一些报错的内容等,最后点击构建和运行即可(注意你的文件构建的路径一定得是全英文,不然有可能会出错)

 这样你的手机游戏就可以安装在你的手机上,还可以带有广告啦

猜你喜欢

转载自blog.csdn.net/qq_62947569/article/details/130304234
今日推荐