显示 Google 玩游戏排行榜 UI 根本不工作

Showing Google Play Game Leaderboard UI not working at all

试图找出这个 GPG 插件出了什么问题。我按照说明并理解了文档,以便通过此 one 测试 运行 登录并显示排行榜 UI。我确实通过 Google Play 开发者帐户制作了 Play 游戏成就 + 排行榜,进行设置,复制粘贴源代码,然后完成。通过添加 Admob Unity 包和 GPG Unity 包来测试广告,效果非常好。我什至更新了 Android 的一些插件(等 .aar 文件、firebase-common、清单)以最大限度地提高兼容性和效率,这样我就可以构建 APK 而不会出现任何干扰构建的问题。

但是,有一个问题:在我登录并尝试点击 "show leaderboard UI" 按钮以及询问用户是否已通过身份验证的按钮事件后,它将允许您通过以下方式记录您的最新高分在显示排行榜 UI 之前更新它。以下是代码的工作原理:

首先,在 Start() 回调中...

PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .Build();

    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.DebugLogEnabled = true;
    PlayGamesPlatform.Activate();

接下来,login/logout流程...

public void LogInAccount() {
// Show dialog.
y = 0;
dialogPanel.SetActive (true);
dialogBackground.SetActive (true);

// You can logout if you're logged in.
if(Social.localUser.authenticated) {

    ((PlayGamesPlatform)Social.Active).SignOut ();

    y = 0;
    message.text = "Your account have been logged out.";
    logButtonLabel.text = "Log-in via Google";
    button.SetActive (true);
    confirmSound.Play();

    return;

} 

// Check for status.
if (CheckNetwork.checkOnlineStatus ()) {

    Social.localUser.Authenticate ((bool success) => {

        if (success) {

            // LOG IN SUCCESS! (Check if the email is identified or not.)
            if((((PlayGamesLocalUser)Social.localUser).Email != null) || (((PlayGamesLocalUser)Social.localUser).Email != "")) {

                y = 0;
                message.text = "Login complete. However, email is not verified or unknown.";
                logButtonLabel.text = "Log-out";
                button.SetActive (true);
                errorSound.Play();

            } else {

                y = 0;
                message.text = "Login complete!\nYour email:" + ((PlayGamesLocalUser)Social.localUser).Email;
                logButtonLabel.text = "Log-out";
                button.SetActive (true);
                confirmSound.Play();

            }

        } else if (!success) {

            // LOG IN FAILED.
            if((((PlayGamesLocalUser)Social.localUser).Email != null) || (((PlayGamesLocalUser)Social.localUser).Email != "")) {

                message.text = "Login failed. Please try again later.\nYour email: ? ? ?";

            } else {

                message.text = "Login failed. Please try again later.\nYour email: " + ((PlayGamesLocalUser)Social.localUser).Email;

            }

            y = 0;
            button.SetActive (true);
            logButtonLabel.text = "Log-in via Google";
            errorSound.Play();

        }

    });

} else {

    message.text = "Connection is lost. Please enable online.";
    button.SetActive (true);

}

}

然后,显示排行榜callback/button事件。

    public void OpenLeaderboard() {

        // Show dialog.
        y = 0;
        dialogPanel.SetActive (true);
        dialogBackground.SetActive (true);

        // Check for status.
        if (Social.localUser.authenticated && CheckNetwork.checkOnlineStatus ()) {

            // Updating your highscore...
            Social.ReportScore ((long)Score.GetScore (), 
                AchievementReference.leaderboard_best_intergalactic_chasers_top_score,
                (bool success) => {

                    if(success) {

                        // LEADERBOARD APPEARED!
                        dialogPanel.SetActive (false);
                        dialogBackground.SetActive (false);
                        confirmSound.Play();
                        Social.ShowLeaderboardUI();
//                      ((PlayGamesPlatform)Social.Active).ShowLeaderboardUI(AchievementReference.leaderboard_best_intergalactic_chasers_top_score);

                    } else {

                        y = 0;
                        message.text = "Load failed. Please try again later.";
                        button.SetActive (true);
                        errorSound.Play();

                    }

                });

        } else if (!Social.localUser.authenticated) {

            y = 0;
            confirmSound.Play();
            button.SetActive (true);

            if (!CheckNetwork.checkOnlineStatus ()) {

                message.text = "Connection not available at a moment.";

            } else if (CheckNetwork.checkOnlineStatus ()) {

                message.text = "You must login first in order to see the leaderboard.";

            }

        }

    }

我第一次尝试登录(有时会显示欢迎标志)并点击排行榜按钮,但 2 分钟后没有任何反应。第二次尝试,我使用登录-注销-登录方法,GPG 提示我 select 电子邮件地址和欢迎用户名标志出现在顶部。但是,仍然......当我点击显示排行榜 UI 按钮时,3 分钟后什么也没有发生。我使用 this 参考来获得更多关于有效显示排行榜的想法c UI 并检查了代码示例。最后一次尝试,我假设排行榜 UI 不会出现,直到我发布我创建的游戏服务(之前设置为测试模式)并查看排行榜 UI 是否正常工作或不是。然后过了一两天,用了第一次第二次尝试的同样方法,还是没有成功。

问题是:为什么排行榜 UI 在测试模式期间甚至在通过 Google 游戏服务开发者部分发布游戏服务后仍然不会出现?在成就 UI 中显示同样的事情。是什么原因阻止了排行榜 UI 出现,即使我在设置中做得正确?我怀疑这是互联网连接问题或 wifi 信号。问题可能是我制作的一个非常简单的游戏服务的负载过长。我只创建了两个排行榜(最高分和被摧毁的船只数量)和达到一定分数的五个成就,没有。被摧毁的船只数量。

此外,除了显示排行榜 UI 问题外,还有一个错误导致字符串值(实际上,我正在使用电子邮件地址 selected 检索)为空或为空如果通过 Google 帐户成功登录,请按屏幕顶部的欢迎用户名登录。

更新 在我检查了错误并提供了 S 的一些解决方案之后。 Tarik Cetin,我检查了 logcat 关于登录的信息。一开始以为是登录成功。然后,我注意到了这一点:

W/Unity   (32099): *** [Play Games Plugin DLL] 07/05/16 14:33:54 -07:00 ERROR: E
xception launching token request: java.lang.ClassNotFoundException: com.google.g
ames.bridge.TokenFragment
W/Unity   (32099):
W/Unity   (32099): (Filename: ./artifacts/generated/common/runtime/UnityEngineDe
bugBindings.gen.cpp Line: 37)
W/Unity   (32099):
W/Unity   (32099): *** [Play Games Plugin DLL] 07/05/16 14:33:54 -07:00 ERROR: U
nityEngine.AndroidJavaException: java.lang.ClassNotFoundException: com.google.ga
mes.bridge.TokenFragment
W/Unity   (32099): java.lang.ClassNotFoundException: com.google.games.bridge.Tok
enFragment
W/Unity   (32099):      at java.lang.Class.classForName(Native Method)
W/Unity   (32099):      at java.lang.Class.forName(Class.java:217)
W/Unity   (32099):      at java.lang.Class.forName(Class.java:172)
W/Unity   (32099):      at com.unity3d.player.UnityPlayer.nativeRender(Native Me
thod)
W/Unity   (32099):      at com.unity3d.player.UnityPlayer.a(Unknown Source)
W/Unity   (32099):      at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
W/Unity   (32099): Caused by: java.lang.NoClassDefFoundError: com/google/games/b
ridge/TokenFragment
W/Unity   (32099):      ... 6 more
W/Unity   (32099): Caused by: java.lang.ClassNotFoundException: com.google.games
.bridge.TokenFragment
W/Unity   (32099):      at dalvik.system.BaseDexClassLoader.findClass(BaseDexCla
ssLoader.java:61)
W/Unity   (32099):      at java.lang.ClassLoader.loadClass(ClassLoader.java:501)

W/Unity   (32099):      at java.lang.ClassLoader.loadClass(ClassLoader.java:461)

W/Unity   (32099):      ... 6 more
W/Unity   (32099):   at UnityEngine.AndroidJNISafe.CheckException () [0x00000] i
n <filename unknown>:0
W/Unity   (32099):   at UnityEn

此外,我在登录和退出一次时遇到了 logcat 的状态。

W/Unity   (32099):   at UnityEn
I/Unity   (32099):  [Play Games Plugin DLL] 07/05/16 14:38:07 -07:00 DEBUG: Star
ting Auth Transition. Op: SIGN_OUT status: ERROR_NOT_AUTHORIZED
I/Unity   (32099):
I/Unity   (32099): (Filename: ./artifacts/generated/common/runtime/UnityEngineDe
bugBindings.gen.cpp Line: 37)
I/Unity   (32099):

最后,这是在尝试直接打开排行榜 UI 时发现的问题。

W/Unity   (32099): *** [Play Games Plugin DLL] 07/05/16 14:40:31 -07:00 ERROR: U
nityEngine.AndroidJavaException: java.lang.ClassNotFoundException: com.google.ga
mes.bridge.NativeBridgeActivity
W/Unity   (32099): java.lang.ClassNotFoundException: com.google.games.bridge.Nat
iveBridgeActivity
W/Unity   (32099):      at java.lang.Class.classForName(Native Method)
W/Unity   (32099):      at java.lang.Class.forName(Class.java:217)
W/Unity   (32099):      at java.lang.Class.forName(Class.java:172)
W/Unity   (32099):      at com.unity3d.player.UnityPlayer.nativeRender(Native Me
thod)
W/Unity   (32099):      at com.unity3d.player.UnityPlayer.a(Unknown Source)
W/Unity   (32099):      at com.unity3d.player.UnityPlayer$b.run(Unknown Source)
W/Unity   (32099): Caused by: java.lang.NoClassDefFoundError: com/google/games/b
ridge/NativeBridgeActivity
W/Unity   (32099):      ... 6 more
W/Unity   (32099): Caused by: java.lang.ClassNotFoundException: com.google.games
.bridge.NativeBridgeActivity
W/Unity   (32099):      at dalvik.system.BaseDexClassLoader.findClass(BaseDexCla
ssLoader.java:61)
W/Unity   (32099):      at java.lang.ClassLoader.loadClass(ClassLoader.java:501)

W/Unity   (32099):      at java.lang.ClassLoader.loadClass(ClassLoader.java:461)

W/Unity   (32099):      ... 6 more
W/Unity   (32099):   at UnityEngine.AndroidJNISafe.CheckException () [0x00000] i
n <filen

更新 我在检查电子邮件是否为空时犯了一个错误。我读错了。虽然,电子邮件地址值仍然存在问题,它应该 return 与字符串值中已识别的那些并在读取不为空时留下空白。

// LOG IN SUCCESS! (Check if the email is identified or not.)
if((((PlayGamesLocalUser)Social.localUser).Email != null) || (((PlayGamesLocalUser)Social.localUser).Email != "")) {

    y = 0;
    message.text = "Login complete!\nYour email:" + ((PlayGamesLocalUser)Social.localUser).Email;
    logButtonLabel.text = "Log-out";
    button.SetActive (true);
    confirmSound.Play();

} else {

    y = 0;
    message.text = "Login complete. However, email is not verified or unknown.";
    logButtonLabel.text = "Log-out";
    button.SetActive (true);
    errorSound.Play();

}

我从App Guruz查看并观察了这个教程,并制作了示例。我观察了这款游戏的流程并使用我的包名对其进行了修改。幸运的是,排行榜 UI 终于出现了。当我尝试比较我的插件时,我认为来自 Android 的插件(一些库文件夹,如 firebase 和 .aar 文件)存在某些特定问题或问题App Guruz 网站的示例项目。可能是兼容性问题。

如果您想制作排行榜 UI 之类的东西并依赖 this Unity Plugin via GIT website,请远离此软件。不值得使用它。充满错误,尤其是 Android 插件。首先依靠从头开始制作自己的 GPG,然后观察插件和 jars,因为我只关注 Android。