大家好我是沒(méi)路:
今天來(lái)介紹一下如何使用Unity Service Ads來(lái)接入廣告~ (手機(jī)Ios/Android)
首先要有些前置作業(yè):
1.打開(kāi)你的Unity Service , 在上方選單Window > Services
(這邊使用5.6.3 不同版本介面可能不一樣 , 不過(guò)應(yīng)該都會(huì)在Window底下)
對(duì)了這邊要有Unity帳號(hào) , 應(yīng)該大家都會(huì)有所以就不多贅述 , 記得登入U(xiǎn)nity使用者~
2.這邊可以選擇建立你新的ProjectID , 或是點(diǎn)選I already have a Unity Project ID連接到現(xiàn)有的ProjectID , 這邊就新建一個(gè)吧 !
3.建立之後你就得到一個(gè)專案的Unity Service , 把Ads的按扭打開(kāi)來(lái) , 這樣就OK了 , 照理說(shuō)他會(huì)自動(dòng)幫你引入程式庫(kù) , #如果沒(méi)有也可以去AssetStore另外載下來(lái)。
4.接下來(lái)我們先去一個(gè)地方 , 點(diǎn)擊Go To Dashboard , 前往Unity後臺(tái) , 去設(shè)定一下廣告內(nèi)容
5.進(jìn)到後臺(tái) , 我們先去新增廣告單元 , Unity有提供獎(jiǎng)勵(lì)式影片(Rewarded)跟非獎(jiǎng)勵(lì)式(Non-rewarded) 這邊示範(fàn)播完廣告可以發(fā)給玩家對(duì)應(yīng)的獎(jiǎng)勵(lì) 使用 (Rewarded)。
點(diǎn)擊>符號(hào) , 裡面可以做一些簡(jiǎn)單設(shè)定像是影片靜音或是允許跳過(guò)等等 , 這邊都用預(yù)設(shè)值就行了
然後記住廣告單元ID , "rewardedVideo" , 我們呼叫廣告單元時(shí)要鍵入這串ID , 當(dāng)然你可以多建幾個(gè)來(lái)呼叫 , 不過(guò)我自己習(xí)慣統(tǒng)一只呼叫一個(gè)啦!
6.最後還要去記個(gè)東西 , 把這兩組ID記下來(lái) , 等等要Key進(jìn)程式裡~
7.新建一支程式 ADTest , 然後掛在個(gè)不會(huì)銷毀的物件上 !
直接上Code啦
寫(xiě)到一半如果一直報(bào)錯(cuò)又找不到原因的話 , 可以去看看File > BuildSettings 看你平臺(tái)是不是選到Android 或 Ios
還是錯(cuò)的話可以去AssetStore載一下Unity Ads的資源包試試
有時(shí)候剛開(kāi)專案跳這個(gè)錯(cuò) , 點(diǎn)進(jìn)Code裡隨便Key個(gè)空白讓他重新編譯後就過(guò)了(莫名其妙)
可能是5.6.3以前的Bug
8.最後就是呼叫啦 , 你可以在任何時(shí)機(jī)點(diǎn)先加載廣告
呼叫 ADTest.Inst.CheckRewardIsReady();
接著呼叫 ADTest.Inst.ShowRewardAD( call back function );應(yīng)該就能播了
範(fàn)例:
成功的話應(yīng)該會(huì)有這個(gè)畫(huà)面 , 也可以去手機(jī)試播看看 , 不需要用測(cè)試模式 , 直接正式上就可
差別在 正式廣告每天有次數(shù)限制(大約一天20次吧) , 測(cè)試模式則無(wú)限.
原始碼:
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.Advertisements; //引入ADS API
public class ADTest : MonoBehaviour {
public static ADTest Inst;//建一個(gè)靜態(tài)實(shí)體 方便呼叫
public delegate void OnAdRewardCallBack();//Call back
OnAdRewardCallBack onAdRewardCallBack;
private string GameID_IOS = "2784192";//後臺(tái)的ID__IOS
private string GameID_ANDROID = "2784191";//後臺(tái)的ID__ANDROID
public bool IsAdReady = false;
// Use this for initialization
void Start () {
Inst = this;
//初始化
#if UNITY_ANDROID
Advertisement.Initialize(GameID_ANDROID,false);
#else
Advertisement.Initialize(GameID_IOS,false);
#endif
}
/// <summary>
/// 撿查廣告有無(wú)加載到廣告
/// </summary>
public void CheckRewardIsReady(){
if(IsAdReady) return;
if (Advertisement.IsReady("rewardedVideo")){//這邊要Key後臺(tái)記的廣告ID
IsAdReady = true;
}
}
/// <summary>
/// 開(kāi)始撥放廣告
/// </summary>
public void ShowRewardAD(OnAdRewardCallBack callback){
if(IsAdReady){
var options = new ShowOptions { resultCallback = HandleShowResult };
Advertisement.Show("rewardedVideo", options); //這邊要Key後臺(tái)記的廣告ID
IsAdReady = false;
this.onAdRewardCallBack = callback;
}
}
/// <summary>
/// 廣告播放結(jié)果
/// </summary>
private void HandleShowResult(ShowResult result){
switch (result){
case ShowResult.Finished:
Debug.Log("The ad was successfully shown.");
//播放成功 呼叫Call back
if(this.onAdRewardCallBack != null){
this.onAdRewardCallBack();
this.onAdRewardCallBack = null;
}
break;
case ShowResult.Skipped:
Debug.Log("The ad was skipped before reaching the end.");
//Debug.Log("[FFFF00]略過(guò)影片會(huì)沒(méi)有獎(jiǎng)勵(lì)ㄛ");
break;
case ShowResult.Failed:
Debug.Log("The ad failed to be shown.");
CheckRewardIsReady(); //
break;
}
}
/*
/// <summary>
/// 點(diǎn)擊看廣告按鈕
/// </summary>
public void OnClickAD(){
ADTest.Inst.CheckRewardIsReady(); //先加載廣告
if(ADTest.Inst.IsAdReady){
ADTest.Inst.ShowRewardAD(GiveResult);
}else{
Debug.Log("廣告讀取失敗");
}
}
/// <summary>
/// 發(fā)獎(jiǎng)勵(lì)
/// </summary>
void GiveResult(){
Debug.Log("觀看完畢-發(fā)獎(jiǎng)勵(lì)");
}
*/
}