Обнаружение предварительного запуска Google Play в Unity

1

Я ищу решение о том, как определить, что мое приложение запустилось в отчете перед запуском. Короче говоря, у меня есть игра, которая уже запущена в Google Play с рекламой Unity внутри, и я хочу выпустить обновление. Если я добавлю свою новую версию в Google Play, она будет проверена с помощью отчетов перед запуском и будет генерировать поддельные показы рекламы. Я не могу отключить рекламу с помощью функции "управлять приборной панелью", так как это повлияет на пользователей живой версии. Я также не хочу отключать предстартовые репосты, они очень полезны.

Итак, я ищу решение, тиски кода или общие течения потока.

После нескольких дней поиска в интернете мне удалось найти два возможных решения, но ни одно из них не работает.

Решение 1: используя эту документацию - ответ Firebase и StackOwerflow и этот пример форума Unity, который я придумала с таким кодом:

public bool IsTestLab()
{
    using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
        var context = actClass.GetStatic<AndroidJavaObject>("currentActivity");
        var systemGlobal = new AndroidJavaClass("android.provider.Settings$Global");
        var testLab = systemGlobal.CallStatic<string>("getString", context.Call<AndroidJavaObject>("getContentResolver"), "firebase.test.lab");
        return testLab == "true"
    }
}

Решение 2: на основе другого документа Firebase я попробовал также это:

public bool IsTestLab()
{
    return TestLabManager.Instantiate().IsTestingScenario;
}

Может кто-нибудь поделиться, как они обходят эту проблему?

Заранее спасибо!

Теги:
firebase
unity3d
google-play

3 ответа

0
Лучший ответ

Для кого-то, кто все еще ищет решение.

Ошибка состояла в том, что я читал android.provider.Settings$Global, но этот параметр хранится в android.provider.Settings$System

Итак, в результате это правильный и рабочий код:

public bool IsTestLab()
{
    using (var actClass = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
    {
        var context = actClass.GetStatic<AndroidJavaObject>("currentActivity");
        var systemGlobal = new AndroidJavaClass("android.provider.Settings$System");
        var testLab = systemGlobal.CallStatic<string>("getString", context.Call<AndroidJavaObject>("getContentResolver"), "firebase.test.lab");
        return testLab == "true"
    }
}
0

Я немного покопался в Google о конкретной проблеме с рекламой. Извините, что так долго.

Лаборатория тестирования Firebase документирует диапазоны своих мобильных адресов на этой веб-странице. Если вы используете мобильную рекламу Google, все будет в порядке, Google уже будет игнорировать показы объявлений с этих диапазонов адресов. Если вы используете другой Ad SDK, вы можете связаться с ними и попросить их игнорировать показы из этих диапазонов. Тогда вам вообще не нужно будет изменять свое приложение.

  • 0
    Спасибо за ваш отзыв. Да, Google / Firebase предоставляет список игнорируемых IP-адресов. Я считаю, что эти IP-адреса должны быть заблокированы на стороне Unity Ads по умолчанию, но это только одна сторона проблемы. С другой стороны, если мы проигнорируем рекламу в Unity, но по-прежнему будем показывать ее в тестах перед запуском, Google будет использовать их для ложной пометки вашего приложения как «с проблемами» из-за мелкого текста, неправильного языка и т. Д. он будет рассматривать рекламу как часть вашего приложения. Так что для меня лучше подход - вообще не показывать рекламу.
0

Для решения 1, я думаю, вы хотите "android.provider.Settings $ System". См.: qaru.site/questions/402166/...

Для решения 2 вы загрузили пакет Unity с TestLabManager, как указано здесь: https://codelabs.developers.google.com/codelabs/unity-firebase-test-lab-game-loop/#8?

Вы также можете увидеть исходные коды, используемые также в этом репозитории GitHub: https://github.com/googlecodelabs/unity-firebase-test-lab-game-loop/tree/master/Assets/Firebase/TestLab

Ещё вопросы

Сообщество Overcoder
Наверх
Меню