在Unity中检测Google Play发布前报告

时间:2019-04-11 07:24:19

标签: c# android firebase unity3d google-play

我正在寻找一种解决方案,用于检测启动前报告中是否存在我的应用程序。长话短说-我有一个游戏已经在Google Play上直播,里面装有统一广告,我想发布一个更新。如果我将新版本放到Google Play上,则会使用发布前的报告进行检查,并会产生虚假的广告展示次数。我无法通过统一的“操作仪表板”禁用广告,因为它将影响实时版本的用户。我也不想禁用发布前的转发,它们非常有帮助。

因此,我正在寻找一种解决方案,无论是代码台钳还是通用流台钳。

经过几天的互联网搜索,我找到了两种可能的解决方案,但是它们都不起作用。

解决方案1: 使用此文档-FirebaseStackOwerflow answer,而这个示例Unity forum我想出了以下代码:

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:基于Another Firebase doc,我也尝试过这样做:

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

有人可以分享他们如何解决此问题吗?

谢谢!

2 个答案:

答案 0 :(得分: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"
    }
}

答案 1 :(得分:0)

我在Google内部做了一些关于特定广告问题的挖掘。抱歉,花了这么长时间。

Firebase测试实验室在this web page上记录其移动地址范围。如果您使用Google移动广告就可以了,那么Google已经忽略了来自这些地址范围的广告展示。如果您使用其他广告SDK,则可能需要与他们联系,并要求他们忽略这些范围内的展示。然后,您完全不需要修改应用程序。