Unity 中的 Google Play 游戏服务无法进行身份验证

Posted

技术标签:

【中文标题】Unity 中的 Google Play 游戏服务无法进行身份验证【英文标题】:Google Play Games Service in Unity doesn't authenticate 【发布时间】:2020-07-15 17:29:26 【问题描述】:

GPG 服务不工作

它显示原生 GPG 窗口,但当它关闭时,PlayGamesPlatform.Instance.Authenticate() 回调返回 NetworkError

在 Google Play 控制台中: 创建了“游戏服务”。

在“游戏详情”部分,添加了描述 512x512 和 1024x500 图标。

在“链接的应用程序”部分,添加了一个安卓应用程序并完成了身份验证(OAuth 2.0 密钥已自动创建)

在“成就”部分,创建带有描述和 512x512 图标的成就。

在“测试”部分添加了一个用于测试的 gmail 帐户

在“发布”部分,点击发布。

在 Google API 中:

已激活 Google Drive API 和 Google Play android 开发者 API(无需创建任何密钥)

在 Android 的 OAuth 密钥和“发布管理”>“应用唱歌”>“应用签名证书”中检查了 SHA-1

在统一中:

从https://github.com/playgameservices/play-games-plugin-for-unity下载最新版本

In Window> Google Play 游戏> 设置> Android 设置,使用“获取资源”链接从 Google Play 控制台的“成就”部分复制 xml 格式文本,ClientID 格式为 123456789123456-ffffffffffffffffffffffff。 apps.googleusercontent.com

测试版本使用与发布在 Google Play 上的应用程序相同的密钥进行签名,并具有相同的公司名称和产品名称

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

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

PlayGamesPlatform.Instance.Authenticate(SignInInteractivity.CanPromptAlways, ((SignInStatus status) =>

        if (status == SignInStatus.Success)
        
            print( $"Welcome PlayGamesPlatform.Instance.GetUserDisplayName()\n");
        
        else
        
            print($"Fail:status");
        
));

在 Unty 控制台中调试时我有

<i>AndroidPlayer(ADB@127.0.0.1:34999)</i> Returning an error code.
 #0 0x443df5a (libunity.so) GetStacktrace(int) 0x25
 #1 0x4e788b6 (libunity.so) DebugStringToFile(DebugStringToFileData const&) 0x169
 #2 0x49875fe (libunity.so) DebugLogHandler::Internal_Log(LogType, LogOption, core::basic_string<char, core::StringStorageDefault<char> >, Object*) 0x65
 #3 0x498754e (libunity.so) DebugLogHandler_CUSTOM_Internal_Log(LogType, LogOption, ScriptingBackendNativeStringPtrOpaque*, ScriptingBackendNativeObjectPtrOpaque*) 0xb5

【问题讨论】:

【参考方案1】:

我刚看到这个。我有同样的错误。我做了什么来解决它是我在项目设置中淡化了字节码剥离。当我检查统一开发者控制台时,我注意到错误指出我的游戏找不到 GooglePlayGames 的库。

虽然这不是理想的答案,但它是一个临时解决方案。理想的答案是创建一个 Link.xml 文件,告诉编译器不要删除库 .so 文件。 (我目前正在寻找什么,以及我是如何遇到你的问题的。)

【讨论】:

【参考方案2】:

我在尝试自己寻找答案时遇到了这篇文章,现在我知道了答案,我想我会在这里添加它....这样我下次忘记怎么做时无疑可以发现它这。正如@CherryCoke 所说,这个问题是由缩小引起的。

可以在这里找到解决方案:https://github.com/playgameservices/play-games-plugin-for-unity/blob/master/README.md#decreasing-apk-size

您有两个选择:关闭缩小或告诉缩小进程在进行缩小时要忽略什么。

如果您想缩小您的构建(这对我来说很有意义),那么您可以通过在播放器设置的 Android 构建的发布设置区域中选择“自定义 Proguard 文件”来实现。

添加后,您需要更新指定的 proguard-user.txt 文件。路径显示在“Custom proguard File”下。

对于 google play 服务,您需要添加的条目可以在以下位置找到:https://github.com/playgameservices/play-games-plugin-for-unity/blob/master/scripts/proguard.txt

【讨论】:

以上是关于Unity 中的 Google Play 游戏服务无法进行身份验证的主要内容,如果未能解决你的问题,请参考以下文章

Google Play 服务 - Unity - 只能在 iOS 上邀请“最近的玩家”

Unity Google Play 游戏插件:错误未授权代码 13

我可以在 Unity Android Free 中使用 Google Play 游戏服务 - 实时多人游戏吗?

用于 Unity 的最新 Google Play 游戏服务插件无法正常工作

Unity Google Play 游戏插件:错误未授权

Google Play 服务 Unity 插件显示排行榜