【问题标题】:Unity app crash after adding to Play Market添加到 Play 市场后 Unity 应用程序崩溃
【发布时间】:2019-06-06 08:51:31
【问题描述】:

首先,我按照指南 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”的统一屏幕

我尝试将 app bundle 上传到 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);          

    }
.........

我将不胜感激。提前致谢。

更新:现在可以了,我在我的设备上看到了广告。可能需要时间来启动它们。 在我朋友的设备上工作。 但仍然无法在其他两个设备上运行。

【问题讨论】:

    标签: android unity3d google-play admob


    【解决方案1】:

    好的,我实现的东西肯定是相关的。也许他们可以帮助某人:
    1)将“重载”的东西从第一个场景进一步移动到另一个场景——我认为它对某些设备起到了作用。 (我猜)
    2) 在播放器设置中禁用多线程渲染。这可能完成了其余的工作。也许这已经足够了,谁知道呢,我做了实验。

    据我了解,这是我的情况 - 是第一个场景,因此实际的应用程序加载会尝试占用过多设备的资源,然后在没有足够资源时关闭。
    有些设备不能很好地进行异步加载。而我刚刚发现的事实是,Unity 启动画面实际上也异步加载了第一个场景。这就是我开始朝这个方向研究的原因,因为我的应用程序甚至没有在某些设备上显示启动画面。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-07-16
      • 2019-07-29
      相关资源
      最近更新 更多