自从一周以来,我对Google广告遇到了麻烦。 我从googleads / googleads-mobile-unity
下载admob插件Ver:3.0.4
然后打开我导入包并在下面实现演示脚本:
using System;
using UnityEngine;
using GoogleMobileAds;
using GoogleMobileAds.Api;
public class GoogleMobileAdsDemoHandler : IDefaultInAppPurchaseProcessor
{
private readonly string[] validSkus = { "android.test.purchased" };
//Will only be sent on a success.
public void ProcessCompletedInAppPurchase(IInAppPurchaseResult result)
{
result.FinishPurchase();
GoogleMobileAdsDemoScript.OutputMessage = "Purchase Succeeded! Credit user here.";
}
//Check SKU against valid SKUs.
public bool IsValidPurchase(string sku)
{
foreach(string validSku in validSkus)
{
if (sku == validSku)
{
return true;
}
}
return false;
}
//Return the app's public key.
public string AndroidPublicKey
{
//In a real app, return public key instead of null.
get { return null; }
}
}
// Example script showing how to invoke the Google Mobile Ads Unity plugin.
public class GoogleMobileAdsDemoScript : MonoBehaviour
{
private BannerView bannerView;
private InterstitialAd interstitial;
private RewardBasedVideoAd rewardBasedVideo;
private float deltaTime = 0.0f;
private static string outputMessage = "";
public static string OutputMessage
{
set { outputMessage = value; }
}
void Start()
{
// Get singleton reward based video ad reference.
rewardBasedVideo = RewardBasedVideoAd.Instance;
// RewardBasedVideoAd is a singleton, so handlers should only be registered once.
rewardBasedVideo.OnAdLoaded += HandleRewardBasedVideoLoaded;
rewardBasedVideo.OnAdFailedToLoad += HandleRewardBasedVideoFailedToLoad;
rewardBasedVideo.OnAdOpening += HandleRewardBasedVideoOpened;
rewardBasedVideo.OnAdStarted += HandleRewardBasedVideoStarted;
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
rewardBasedVideo.OnAdLeavingApplication += HandleRewardBasedVideoLeftApplication;
}
void Update()
{
// Calculate simple moving average for time to render screen. 0.1 factor used as smoothing
// value.
deltaTime += (Time.deltaTime - deltaTime) * 0.1f;
}
void OnGUI()
{
GUIStyle style = new GUIStyle();
Rect rect = new Rect(0, 0, Screen.width, Screen.height);
style.alignment = TextAnchor.LowerRight;
style.fontSize = (int)(Screen.height * 0.06);
style.normal.textColor = new Color(0.0f, 0.0f, 0.5f, 1.0f);
float fps = 1.0f / deltaTime;
string text = string.Format("{0:0.} fps", fps);
GUI.Label(rect, text, style);
// Puts some basic buttons onto the screen.
GUI.skin.button.fontSize = (int)(0.03f * Screen.height);
Rect requestBannerRect = new Rect(0.1f * Screen.width, 0.05f * Screen.height,
0.8f * Screen.width, 0.1f * Screen.height);
if (GUI.Button(requestBannerRect, "Request Banner"))
{
RequestBanner();
}
Rect showBannerRect = new Rect(0.1f * Screen.width, 0.175f * Screen.height,
0.8f * Screen.width, 0.1f * Screen.height);
if (GUI.Button(showBannerRect, "Show Banner"))
{
bannerView.Show();
}
Rect destroyBannerRect = new Rect(0.1f * Screen.width, 0.3f * Screen.height,
0.8f * Screen.width, 0.1f * Screen.height);
if (GUI.Button(destroyBannerRect, "Destroy Banner"))
{
bannerView.Destroy();
}
Rect requestInterstitialRect = new Rect(0.1f * Screen.width, 0.425f * Screen.height,
0.8f * Screen.width, 0.1f * Screen.height);
if (GUI.Button(requestInterstitialRect, "Request Interstitial"))
{
RequestInterstitial();
}
Rect showInterstitialRect = new Rect(0.1f * Screen.width, 0.55f * Screen.height,
0.8f * Screen.width, 0.1f * Screen.height);
if (GUI.Button(showInterstitialRect, "Show Interstitial"))
{
ShowInterstitial();
}
/*
Rect requestRewardedRect = new Rect(0.1f * Screen.width, 0.675f * Screen.height,
0.8f * Screen.width, 0.1f * Screen.height);
if (GUI.Button(requestRewardedRect, "Request Rewarded Video"))
{
RequestRewardBasedVideo();
}
Rect showRewardedRect = new Rect(0.1f * Screen.width, 0.8f * Screen.height,
0.8f * Screen.width, 0.1f * Screen.height);
if (GUI.Button(showRewardedRect, "Show Rewarded Video"))
{
ShowRewardBasedVideo();
}
*/
Rect textOutputRect = new Rect(0.1f * Screen.width, 0.925f * Screen.height,
0.8f * Screen.width, 0.05f * Screen.height);
GUI.Label(textOutputRect, outputMessage);
}
private void RequestBanner()
{
#if UNITY_EDITOR
string adUnitId = "unused";
#elif UNITY_ANDROID
string adUnitId = "ca-app-pub-7875398596727009/9705603172";
#elif (UNITY_5 && UNITY_IOS) || UNITY_IPHONE
string adUnitId = "INSERT_IOS_BANNER_AD_UNIT_ID_HERE";
#else
string adUnitId = "unexpected_platform";
#endif
// Create a 320x50 banner at the top of the screen.
bannerView = new BannerView(adUnitId, AdSize.SmartBanner, AdPosition.Top);
// Register for ad events.
bannerView.OnAdLoaded += HandleAdLoaded;
bannerView.OnAdFailedToLoad += HandleAdFailedToLoad;
bannerView.OnAdLoaded += HandleAdOpened;
bannerView.OnAdClosed += HandleAdClosed;
bannerView.OnAdLeavingApplication += HandleAdLeftApplication;
// Load a banner ad.
bannerView.LoadAd(createAdRequest());
}
private void RequestInterstitial()
{
#if UNITY_EDITOR
string adUnitId = "unused";
#elif UNITY_ANDROID
string adUnitId = "ca-app-pub-7875398596727009/1543207972";
#elif (UNITY_5 && UNITY_IOS) || UNITY_IPHONE
string adUnitId = "INSERT_IOS_INTERSTITIAL_AD_UNIT_ID_HERE";
#else
string adUnitId = "unexpected_platform";
#endif
// Create an interstitial.
interstitial = new InterstitialAd(adUnitId);
// Register for ad events.
interstitial.OnAdLoaded += HandleInterstitialLoaded;
interstitial.OnAdFailedToLoad += HandleInterstitialFailedToLoad;
interstitial.OnAdOpening += HandleInterstitialOpened;
interstitial.OnAdClosed += HandleInterstitialClosed;
interstitial.OnAdLeavingApplication += HandleInterstitialLeftApplication;
// Load an interstitial ad.
interstitial.LoadAd(createAdRequest());
}
// Returns an ad request with custom ad targeting.
private AdRequest createAdRequest()
{
return new AdRequest.Builder()
.AddTestDevice(AdRequest.TestDeviceSimulator)
//.AddTestDevice("0123456789ABCDEF0123456789ABCDEF")
//.AddKeyword("game")
//.SetGender(Gender.Male)
//.SetBirthday(new DateTime(1985, 1, 1))
//.TagForChildDirectedTreatment(false)
//.AddExtra("color_bg", "9B30FF")
.Build();
}
private void RequestRewardBasedVideo()
{
#if UNITY_EDITOR
string adUnitId = "unused";
#elif UNITY_ANDROID
string adUnitId = "INSERT_ANDROID_REWARD_BASED_VIDEO_AD_UNIT_ID_HERE";
#elif (UNITY_5 && UNITY_IOS) || UNITY_IPHONE
string adUnitId = "INSERT_IOS_REWARD_BASED_VIDEO_AD_UNIT_ID_HERE";
#else
string adUnitId = "unexpected_platform";
#endif
rewardBasedVideo.LoadAd(createAdRequest(), adUnitId);
}
private void ShowInterstitial()
{
if (interstitial.IsLoaded())
{
interstitial.Show();
}
else
{
print("Interstitial is not ready yet.");
}
}
private void ShowRewardBasedVideo()
{
if (rewardBasedVideo.IsLoaded())
{
rewardBasedVideo.Show();
} else
{
print("Reward based video ad is not ready yet.");
}
}
#region Banner callback handlers
public void HandleAdLoaded(object sender, EventArgs args)
{
print("HandleAdLoaded event received.");
}
public void HandleAdFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
print("HandleFailedToReceiveAd event received with message: " + args.Message);
}
public void HandleAdOpened(object sender, EventArgs args)
{
print("HandleAdOpened event received");
}
void HandleAdClosing(object sender, EventArgs args)
{
print("HandleAdClosing event received");
}
public void HandleAdClosed(object sender, EventArgs args)
{
print("HandleAdClosed event received");
}
public void HandleAdLeftApplication(object sender, EventArgs args)
{
print("HandleAdLeftApplication event received");
}
#endregion
#region Interstitial callback handlers
public void HandleInterstitialLoaded(object sender, EventArgs args)
{
print("HandleInterstitialLoaded event received.");
}
public void HandleInterstitialFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
print("HandleInterstitialFailedToLoad event received with message: " + args.Message);
}
public void HandleInterstitialOpened(object sender, EventArgs args)
{
print("HandleInterstitialOpened event received");
}
void HandleInterstitialClosing(object sender, EventArgs args)
{
print("HandleInterstitialClosing event received");
}
public void HandleInterstitialClosed(object sender, EventArgs args)
{
print("HandleInterstitialClosed event received");
}
public void HandleInterstitialLeftApplication(object sender, EventArgs args)
{
print("HandleInterstitialLeftApplication event received");
}
#endregion
#region RewardBasedVideo callback handlers
public void HandleRewardBasedVideoLoaded(object sender, EventArgs args)
{
print("HandleRewardBasedVideoLoaded event received.");
}
public void HandleRewardBasedVideoFailedToLoad(object sender, AdFailedToLoadEventArgs args)
{
print("HandleRewardBasedVideoFailedToLoad event received with message: " + args.Message);
}
public void HandleRewardBasedVideoOpened(object sender, EventArgs args)
{
print("HandleRewardBasedVideoOpened event received");
}
public void HandleRewardBasedVideoStarted(object sender, EventArgs args)
{
print("HandleRewardBasedVideoStarted event received");
}
public void HandleRewardBasedVideoClosed(object sender, EventArgs args)
{
print("HandleRewardBasedVideoClosed event received");
}
public void HandleRewardBasedVideoRewarded(object sender, Reward args)
{
string type = args.Type;
double amount = args.Amount;
print("HandleRewardBasedVideoRewarded event received for " + amount.ToString() + " " +
type);
}
public void HandleRewardBasedVideoLeftApplication(object sender, EventArgs args)
{
print("HandleRewardBasedVideoLeftApplication event received");
}
#endregion
}
请在下面找到log log logcat:
横幅:我/广告(16645):开始广告请求。
I / Ads(16645):使用 AdRequest.Builder.addTestDevice(" 17F2B8177B4B56D0B45Z78C2D204D7BC")到 在此设备上获取测试广告。
W / Ads(16645):收到广告回复时出现问题。错误代码: 0W / Ads(16645):无法加载广告:0
I / Unity(16645):收到带有消息的HandleFailedToReceiveAd事件: 内部错误
I / Unity(16645):UnityEngine.DebugLogHandler:Internal_Log(LogType, String,Object)
I / Unity(16645):UnityEngine.DebugLogHandler:LogFormat(LogType, Object,String,Object [])
I / Unity(16645):UnityEngine.Logger:Log(LogType,Object)
I / Unity(16645):UnityEngine.Debug:Log(Object)
I / Unity(16645):UnityEngine.MonoBehaviour:print(Object)(at /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineMonoBehaviourBindings.gen.cs:106)
I / Unity(16645): GoogleMobileAdsDemoScript:HandleAdFailedToLoad(对象, AdFailedToLoadEventArgs)(at G:\ AdMob联播\资产\样品\的HelloWorld \资产\ GoogleMobileAdsDemoScript.cs:253)
I / Unity(16645):GoogleMobileAds.Api.BannerView:m__8(对象, AdFailedToLoadEventArgs)(at G:\ AdMob联播\资产\ GoogleMobileAds \阿比\ BannerView.cs:45)
I / Unity(16645): GoogleMobileAds.Android.BannerClient:onAdFailedToLoad(String)(at G:\ AdMob联播\资产\ GoogleMobileAds \平台\的Android \ BannerClient.cs:86)
I / Unity(16645):System.Reflection.MonoMethod:InternalInvoke(Object, 对象[],例外&)
I / Unity(16645):System.Reflection.MonoMethod:Invoke(Object, BindingFlags,Binder,Object [
E / Ads(12275):无法连接 https://googleads.g.doubleclick.net/pagead/drt/m。没有检索到DSID。
非页内广告:我/广告(16645):开始广告请求。
I / Ads(16645):使用 AdRequest.Builder.addTestDevice(" 17F2B8177B4B56D0B45Z78C2D204D7BC")到 在此设备上获取测试广告。
W / Ads(16645):收到广告回复时出现问题。错误代码: 0W / Ads(16645):无法加载广告:0
I / Unity(16645):收到的HandleInterstitialFailedToLoad事件 消息:内部错误
I / Unity(16645):UnityEngine.DebugLogHandler:Internal_Log(LogType, String,Object)
I / Unity(16645):UnityEngine.DebugLogHandler:LogFormat(LogType, Object,String,Object [])
I / Unity(16645):UnityEngine.Logger:Log(LogType,Object)
I / Unity(16645):UnityEngine.Debug:Log(Object)
I / Unity(16645):UnityEngine.MonoBehaviour:print(Object)(at /Users/builduser/buildslave/unity/build/artifacts/generated/common/runtime/UnityEngineMonoBehaviourBindings.gen.cs:106)
I / Unity(16645): GoogleMobileAdsDemoScript:HandleInterstitialFailedToLoad(对象, AdFailedToLoadEventArgs)(at G:\ AdMob联播\资产\样品\的HelloWorld \资产\ GoogleMobileAdsDemoScript.cs:287)
I / Unity(16645):GoogleMobileAds.Api.InterstitialAd:m__12(对象, AdFailedToLoadEventArgs)(at G:\ AdMob联播\资产\ GoogleMobileAds \阿比\ InterstitialAd.cs:44)
I / Unity(16645): GoogleMobileAds.Android.InterstitialClient:onAdFailedToLoad(字符串) (在 G:\ AdMob联播\资产\ GoogleMobileAds \平台\的Android \ InterstitialClient.cs:99)
I / Unity(16645):System.Reflection.MonoMethod:InternalInvoke(Object, 对象[],例外&)
I / Unity(16645):System.Reflection.MonoMethod:In
在编辑器日志中建议脚本正常显示日志虚拟负载广告等。但是当我构建并安装到我的设备上时,没有广告?!
你知道出了什么问题吗?
我在我的设备Xiaomi Mi4c上尝试过它只是因为我还没有访问其他Android设备。
答案 0 :(得分:0)
首先尝试使用测试ID。实际广告ID并不总是匹配。
答案 1 :(得分:-1)
从Admob Unity3d插件项目主页https://github.com/unity-plugins/Unity-Admob
下载这些文件安装Admob Unity
在Unity编辑器中打开您的项目。 导航到资产 - >导入包 - >定制包。 选择AdmobUnityPlugin.unitypackage文件。 通过选择“导入”导入插件的所有文件。确保检查与文件的任何冲突。 Unity插件Wiki和文档
1.Init Admob Unity插件 创建一个C#脚本,将脚本拖到场景中的对象上,在脚本文件中添加以下代码
using admob;
Admob.Instance().initAdmob("admob banner id", "admob interstitial id");//admob id with format ca-app-pub-279xxxxxxxx/xxxxxxxx
2.在Unity App中添加Admob Banner 这是显示admob横幅所需的最小代码。
Admob.Instance().showBannerRelative(AdSize.Banner, AdPosition.BOTTOM_CENTER, 0);
AdPosition类指定横幅的放置位置。 AdSize指定要显示的女巫尺寸横幅
3.删除横幅 默认情况下,横幅是可见的。要暂时隐藏横幅,请致电:
Admob.Instance().removeBanner();