首先,按照指南https://developers.google.com/admob/unity/rewarded-video,我已将Admob与Unity项目连接起来,一切正常。 从Google Play下载后,它也起作用。我的朋友测试了它。显示了测试奖励视频和真正奖励视频。
然后,我决定尝试这些广告,并按照https://developers.google.com/admob/unity/interstitial
的要求在关卡重启时添加一个非页内广告然后问题开始了...
它确实适用于所有测试广告,一切正常
然后,直接在我的设备上安装apk后,我就用真实的广告进行了尝试-可以再次使用。我在家庭成员的其他电话上也做过同样的事情。
一切都好。同时在两部手机上测试广告和真实广告。
然后,我将一个应用程序作为新版本上传到Google Play,并进行了尝试,这是发生的情况:
在我的手机上-应用有效,但广告无效。现在,无论是奖励还是插页式广告,都没有。
在家人的电话上-应用程序在启动时立即崩溃(仅是来自游戏市场的应用程序)
在朋友的电话上-同样,从游戏市场下载时启动崩溃。
崩溃是我的意思-黑屏只是一瞬间,甚至没有显示“ Made in Unity”的统一屏幕
我尝试将应用程序捆绑包上传到Google Play而不是apk-没有任何变化。
我试图更改代码,主要是在执行时,初始化时,调用时等等,这些都无济于事。
然后,我在发生崩溃的设备上尝试了LogCat。
致命一词什么都没有,但是我想这是崩溃:
06-05 23:20:23.969 18308 18334 E CRASH : signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 000000ba
06-05 23:20:23.969 18308 18334 E CRASH : *** *** *** *** *** *** *** *** *** *** *** *** *** *** *** ***
06-05 23:20:23.969 18308 18334 E CRASH : Build type 'Release', Scripting Backend 'il2cpp', CPU 'armeabi-v7a'
06-05 23:20:23.969 18308 18334 E CRASH : Build fingerprint: 'motorola/athene/athene:7.0/NPJS25.93-14-18/3:user/release-keys'
06-05 23:20:23.969 18308 18334 E CRASH : Revision: 'p2a0'
就是这样,没有其他实际信息。
关于类似的问题-我看到人们在同一件事上有很多问题,包括将他们的app_id放入AndroidManifest.xml中-但这不是我的情况,就在那里。
我保存有奖励广告的对象是在菜单中创建的,并且在各个关卡之间均未销毁。 这是其中的一些代码:
void Awake()
{
DontDestroyOnLoad(this.gameObject);
}
void Start()
{
string appId = "my-app-id here";
MobileAds.Initialize(appId);
is_rewarded = false;
this.rewardBasedVideo = RewardBasedVideoAd.Instance;
rewardBasedVideo.OnAdRewarded += HandleRewardBasedVideoRewarded;
rewardBasedVideo.OnAdClosed += HandleRewardBasedVideoClosed;
this.RequestRewardBasedVideo();
}
public void RequestRewardBasedVideo()
{
string adUnitId = "my-rewarded-unit-id"
AdRequest request = new AdRequest.Builder().Build();
this.rewardBasedVideo.LoadAd(request, adUnitId);
}
....
我的插页式广告对象仅存在于主要级别。当您在关卡之间移动时,它会被破坏。 这是一些有关插页式广告的代码:
public class InterAds : MonoBehaviour
{
public InterstitialAd interstitial;
void Start()
{
this.RequestInterstitial();
}
public void RequestInterstitial()
{
string adUnitId = "my-unit-id here";
if (this.interstitial != null)
{
this.interstitial.Destroy();
}
// Initialize an InterstitialAd.
interstitial = new InterstitialAd(adUnitId);
this.interstitial.OnAdClosed += HandleOnAdClosed;
// Create an empty ad request.
AdRequest request = new AdRequest.Builder().Build();
// Load the interstitial with the request.
this.interstitial.LoadAd(request);
}
public void HandleOnAdClosed(object sender, EventArgs args)
{
GameObject.Find("GameController").GetComponent<AudioSource>().enabled = true;
this.RequestInterstitial();
SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}
.........
我将不胜感激。预先感谢。
更新:现在可以正常使用了,并且我可以在设备上看到广告。可能需要一些时间来启动它们。 在我朋友的设备上工作。 仍然不能在其他两个设备上使用。
答案 0 :(得分:0)
好的,我已经实现的东西必须相关。也许他们可以帮助某人:
1)将“重负载”的内容从第一个场景进一步移到了另一个场景-我认为这对某些设备起到了作用。 (我猜)
2)在播放器设置中禁用多线程渲染。剩下的事情可能就这样了。也许这已经足够了,谁知道,我做了实验。
据我了解,这就是我的情况-原因是第一个场景,因此实际的应用负载会尝试占用过多的设备资源,然后在资源不足时关闭。
某些设备不能很好地进行异步加载。我刚刚发现的事实是Unity初始屏幕实际上也异步加载了第一个场景。这就是为什么我开始朝这个方向进行挖掘的原因,因为我的应用甚至没有在某些设备上显示启动屏幕。