显示 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。
试图找出这个 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。