Я ищу решение о том, как определить, что мое приложение запустилось в отчете перед запуском. Короче говоря, у меня есть игра, которая уже запущена в 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;
}
Может кто-нибудь поделиться, как они обходят эту проблему?
Заранее спасибо!
Для кого-то, кто все еще ищет решение.
Ошибка состояла в том, что я читал 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"
}
}
Я немного покопался в Google о конкретной проблеме с рекламой. Извините, что так долго.
Лаборатория тестирования Firebase документирует диапазоны своих мобильных адресов на этой веб-странице. Если вы используете мобильную рекламу Google, все будет в порядке, Google уже будет игнорировать показы объявлений с этих диапазонов адресов. Если вы используете другой Ad SDK, вы можете связаться с ними и попросить их игнорировать показы из этих диапазонов. Тогда вам вообще не нужно будет изменять свое приложение.
Для решения 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