Office及VBA技术交流

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 906|回复: 0

Unity3d中接入三种广告的实现:原生的UnityAds、谷歌的GoogleAdmob, Vungle

[复制链接]

该用户从未签到

18

主题

23

帖子

110

积分

注册会员

Rank: 2

积分
110
发表于 2017-9-28 22:32:23 | 显示全部楼层 |阅读模式


Unity3d中接入三种广告的实现:原生的UnityAds、谷歌的GoogleAdmob


一、UnityAds的实现

  工程版本:Unity5.4.3(5.1以下需要下载插件)

  在Window-Services中将Ads开启,Unity将自动生成ios与android的广告id(在Advanced中),没有就去官网找,百度搜UnityAds;

  在settings中可选择 测试模式Test mode(方便development中测试广告),真正使用时要取消测试模式,否则一直都会是测试广告;

  在code samples中可参考代码;

  在想要显示广告的地方添加脚本调用就可以了;


[csharp] view plain copy
print?

    code demo:  
        using UnityEngine;  
        using System.Collections;  
        using UnityEngine.Advertisements;//引入命名空间  
        public class UnityAds : MonoBehaviour  
          {  
            public string iosid = "";  
            public string adandroidid = "";  
            public static UnityAds instance;  
      
            void Awake()  
              {  
                instance = this;  
              }  
      
            void Start()  //初始化  
              {  
                Advertisement.Initialize(iosid或者adandroidid);//初始化  
                Debug.Log("初始化");  
              }  
      
            public void OnClick()  
              {  
                if (Advertisement.IsReady())//如果广告加载完毕(加载广告也需要时间)  
                  {  
                    UnityAdsRewardAd("rewardedVideo");//播放广告,参数填你在官网上的广告订单中的标志语(网太卡进不去官网,记不得叫什么了,反正就是你申请个广告,他会给你个订单一样的东西,里面可以设置广告的类型,ios和android的id也在里面)  
                  }  
                else  
                  {  
                    Debug.Log("failed");//这时可以选择弹出一个UI提醒用户无网络连接或者其他导致播放失败  
                  }  
              }  
      
            public void UnityAdsRewardAd(string zone)  //原生奖励广告  
              {  
                ShowOptions options = new ShowOptions();  
                if (Advertisement.IsReady())  
                {  
                  Advertisement.Show(zone, options);//给zone(广告类型)添加回调  
                  Debug.Log("UnityAdsShowSuccess");  
                }  
                else  
                  {  
                    Debug.Log("UnityAdsFailed");  
                  }  
                options.resultCallback = HandleShowResult;//回调函数  
              }  
      
      
            public void HandleShowResult(ShowResult result)  //原生奖励广告回调函数  
              {  
                switch (result)//广告播放的结果,导致接下来的事件  
                  {  
                    case ShowResult.Finished://播放完成  
                      Debug.Log("The ad was successfully shown.");  
                      这里写你的奖励代码,比如看完广告加点钱,下同;  
                      break;  
                    case ShowResult.Skipped://广告中途关闭  
                      Debug.Log("The ad was skipped before reaching the end.");  
                      //可以添加UI提示用户没有完成观看,无法得到奖励,下同  
                      break;  
                    case ShowResult.Failed://广告播放失败  
                      Debug.Log("The ad failed to be shown.");  
                      break;  
                 }  
          }  

[csharp] view plain copy
print?

    具体实现还请看官方文档。  




二、GoogleAdmob的实现

  注册Google账号以注册广告单元得到广告ID,需翻墙;

[csharp] view plain copy
print?

    code demo:  
    using UnityEngine;  
    using System.Collections;  
    using GoogleMobileAds.Api;//引入命名空间  
      
    public class GoogleAd : MonoBehaviour  
    {  
        private BannerView bannerView;  //横幅广告  
        private InterstitialAd ad;  //插屏广告  
      
        public static GoogleAd instance;  //单例模式  
        void Awake()  
        {  
            instance = this;  
        }  
        void Start()  //初始化  
        {  
            InitBannerAd();  //横幅广告初始化函数调用  
            InitializeGoogleAd();  //插屏广告初始化函数调用  
            Debug.Log("初始化");  
        }  
        public void OnClick()  
        {  
            GoogleAdsShow();  //播放广告  
        }  
      
        public void InitBannerAd()  //谷歌横幅初始化函数  
        {  
            string adUnitId = "ca-app-pub-3940256099942544/1033173712";  //横幅广告ID  
            bannerView = new BannerView(adUnitId, AdSize.SmartBanner, AdPosition.Top);  //横幅广告实例化(三个参数为:ID、大小、位置)   
            AdRequest request = new AdRequest.Builder().Build();   
            bannerView.LoadAd(request);  //横幅广告比较特殊,不用Show()方法,加载完成直接播放(流氓广告)  
        }  
      
        void InitializeGoogleAd()  //谷歌全屏初始化函数  
        {  
            string adUnitId = "ca-app-pub-3940256099942544/1033173712";  //全屏广告ID  
            ad = new InterstitialAd(adUnitId);  //实例化  
            AdRequest request = new AdRequest.Builder().Build();  
            ad.LoadAd(request);  //加载  
        }  
      
        public void GoogleAdsShow()  //谷歌广告播放函数  
        {  
            if (ad.IsLoaded())  //判断广告是否加载完毕  
            {  
                ad.Show();  //播放广告  
                Debug.Log("googleadsSuccess");  
            }  
            else  
            {  
                Debug.Log("failed.");  
            }  
        }  
      
    }  

[csharp] view plain copy
print?

    <span style="font-family: Arial, Helvetica, sans-serif;">具体实现还请看官方文档。</span>  




三、Vungle广告的实现

  去官网找Unity的广告插件,下载并导入Unity工程

[csharp] view plain copy
print?

    code demo:  
    using UnityEngine;  
    using System.Collections;  
      
    public class VungleAd : MonoBehaviour  
    {  
        public static VungleAd instance;  
        void Awake()  
        {  
            instance = this;  
        }  
        void Start()  //初始化  
        {  
            Vungle.init("Test_Android", "Test_iOS", "vungleTest");  //参数请看官方文档  
            Debug.Log("初始化");  
        }  
        public void OnClick()  
        {  
            if (Vungle.isAdvertAvailable())  //如果广告加载完毕  
            {  
                VungleShow();  //播放广告函数调用  
            }  
            else  
            {  
                Debug.Log("failed");  
            }  
        }  
      
        public void VungleShow()   
        {  
            Vungle.playAd();  //播放广告  
        }  
        void OnApplicationPause(bool pauseStatus)  //有需要可以设置暂停操作  
        {  
            if (pauseStatus)  
            {  
                Vungle.onPause();  
            }  
            else  
            {  
                Vungle.onResume();  
            }  
        }  
        void onAdFinishedEvent(AdFinishedEventArgs arg)  
        {  
            Debug.Log("onAdFinishedEvent. watched: " + arg.TimeWatched + ", length: " + arg.TotalDuration + ", isCompletedView: " + arg.IsCompletedView);  
            这里写奖励回调,回调在OnEnable里触发,用完要及时OnDisable,否则会重叠触发  
        }  

[csharp] view plain copy
print?

        void OnEnable()  //回调  
       {  
          Vungle.onAdFinishedEvent += onAdFinishedEvent;  
       }  
       void OnDisable()  // 结束回调,必需,否则会重复回调  
       {  
          Vungle.onAdFinishedEvent -= onAdFinishedEvent;  
       }  
    }  

[csharp] view plain copy
print?

    具体实现还请看官方文档。  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Office Master ( 蜀ICP备16003423号 )

GMT+8, 2019-7-18 13:28 , Processed in 0.334051 second(s), 24 queries .

Office Master

快速回复 返回顶部 返回列表