Сбой приложения Unity после добавления в Play Market - PullRequest
0 голосов
/ 06 июня 2019

Сначала я подключил Admob к своему проекту Unity, следуя инструкциям https://developers.google.com/admob/unity/rewarded-video,, и все заработало. Это также сработало после загрузки из гугл плей. Мои друзья это проверили. Были показаны видео с вознаграждением за тестирование, а также видео с реальным вознаграждением.

Тогда я решил поэкспериментировать с рекламой и добавить Interstitials при перезапуске уровня, следуя https://developers.google.com/admob/unity/interstitial

А потом начались проблемы ...
Он работал со всеми тестовыми объявлениями, все было хорошо
Тогда я попробовал это с реальной рекламой, после установки apk прямо с моего устройства - снова работает. Я сделал то же самое на другом телефоне члена семьи. Все отлично. С обоими тестовыми и реальными объявлениями на обоих телефонах. Затем я загрузил приложение в Google Play как новую версию и попробовал, вот что произошло:
На моем телефоне - приложение работает, а реклама - нет. Теперь ни один из них, вознагражденные или промежуточные.
На телефоне члена семьи - сразу после запуска приложение вылетает (только то, что с play market)
На телефоне друга - тоже самое, сбой запуска при загрузке с плей маркета.
Под падением я подразумеваю - черный экран на долю секунды, ничего больше, даже экран единства, на котором написано «Сделано в 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);          

    }
.........

Буду признателен за любую помощь. Заранее спасибо.

Upd: Теперь это работает, и я вижу рекламу на моем устройстве. Вероятно, для их запуска понадобилось время. Работает на устройстве моего друга. Тем не менее, не работает на двух других устройствах.

1 Ответ

0 голосов
/ 07 июня 2019

Хорошо, вещи, которые я реализовал, должны быть связаны. Может быть, они могут кому-нибудь помочь:
1) Переместил «тяжелую загрузку» вещей из первой сцены дальше, в другую сцену - я думаю, что это помогло некоторым устройствам. (Наверное)
2) Отключен многопоточный рендеринг в настройках плеера. Это, вероятно, сделал все остальное. А может, просто этого уже достаточно, кто знает, я экспериментировал.

Причина, как я понимаю, была в моем случае - первая сцена, поэтому фактическая загрузка приложения будет пытаться отнять слишком много ресурсов устройства, а затем отключится, когда не хватит.
Некоторые устройства не могут выполнять асинхронную загрузку слишком хорошо. И факт, который я только что узнал, состоит в том, что заставка Unity на самом деле также загружает первую сцену асинхронно. Вот почему я начал копать в этом направлении, поскольку мое приложение даже не показывало заставку на некоторых устройствах.

...