Social.localUser.Authenticate 在 Unity 中每次都返回 false
Posted
技术标签:
【中文标题】Social.localUser.Authenticate 在 Unity 中每次都返回 false【英文标题】:Social.localUser.Authenticate returns false everytime in Unity 【发布时间】:2019-02-08 17:40:51 【问题描述】:我正在使用最新版本的 GooglePlayGames 插件 (0.9.50)。我已经从游戏控制台添加了 android 资源。我还验证了我的 SHA-1 指纹是正确的。 Google Play 控制台中上传证书的 SHA-1 指纹和 Google 开发者控制台中的 OAuth 2.0 客户端 ID 相同。仍然 Social.localUser.Authenticate 每次都返回 false 。添加测试人员的帐户后,我还尝试以 alpha 版本发布我的游戏。仍然 Social.localUser.Authenticate 返回 false。当我从手机打开游戏时,甚至没有显示 Google Play 游戏登录“绿色的东西”。我没有任何错误或警告。以下是我的代码:
using GooglePlayGames;
using GooglePlayGames.BasicApi;
using UnityEngine;
using UnityEngine.SocialPlatforms;
using GooglePlayGames;
public class Playgames : MonoBehaviour
public bool IsConnectedToGoogleServices set; get;
// Use this for initialization
void Start ()
#if (UNITY_ANDROID || (UNITY_IPHONE && !NO_GPGS))
PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder().Build();
PlayGamesPlatform.InitializeInstance(config);
PlayGamesPlatform.DebugLogEnabled = true;
PlayGamesPlatform.Activate();
#endif
SignIn();
public bool SignIn()
if (!IsConnectedToGoogleServices)
Social.localUser.Authenticate ((bool success) =>
IsConnectedToGoogleServices = success;
Debug.Log("Sign-in " + success.ToString() );
);
return IsConnectedToGoogleServices;
有人可以帮我解决这个问题吗?提前致谢。
【问题讨论】:
你的代码看起来和我的一模一样(关于登录部分)。所以这似乎不是代码问题。我最好的建议是在 google play 控制台中追溯您的步骤。注意:我确实使用了 alpha 轨道进行测试。 我已经对所有内容进行了三次检查。找不到问题:-( 【参考方案1】:如果您使用的是 Google Play 签名,则从 Google Play 下载的应用程序中的签名密钥将与上传证书不同。您是否已将来自 Google Play 签名的签名密钥添加到 Google Play 游戏 API 配置中?这在release checklist 第 4 步“向 API 提供商注册您的应用签名密钥”中进行了描述。
如果您的应用使用任何 API,您通常需要注册 Google 为您的应用签名所使用的密钥证书以进行身份验证。这通常通过证书的指纹来完成。
要查找 Google 用于重新签署您的 APK 以进行交付的密钥证书:
登录您的 Play 管理中心。 选择一个应用程序。 在左侧菜单中,点击发布管理 > 应用签名。 在此页面中,您可以复制应用签名证书的最常见指纹(MD5、SHA-1 和 SHA-256)。如果 API 提供者需要不同类型的指纹,您也可以下载 DER 格式的原始证书,并通过 API 提供者需要的转换工具运行它。
【讨论】:
“您是否已将来自 Google Play 签名的签名密钥添加到 Google Play 游戏 API 配置中?”是什么意思。您是在谈论将来自 Google Play 控制台的上传证书的 SHA-1 指纹添加到 Google 开发者控制台中的 OAuth 2.0 客户端 ID 吗?如是。我已经这样做了。 重点不是你需要添加的上传证书的SHA1。它是 Google 签名密钥的 SHA1。仔细阅读上面的部分:“注册密钥的证书 Google 用“签名您的应用程序” 那是你在生产中上传apk然后发布。我的应用程序不在生产中。它在阿尔法。我也在本地测试过。无论如何,我都尝试过 SHA1,但似乎没有用。 alpha 也是如此。它仍由 Google 签名。 我的排行榜在我删除 admob 时有效。 admob 和 google play 游戏插件之间存在一些冲突。尝试构建时出现以下错误:CommandInvokationFailure:无法将类转换为 dex 格式。 C:\Program Files\Android\Android Studio\jre\bin\java.exe -Xmx2048M -Dcom.android.sdkmanager.toolsdir="C:\Users\HP\AppData\Local\Android\Sdk\tools" -Dfile。 encoding=UTF8 -jar "C:\Program Files\Unity\Editor\Data\PlaybackEngines\AndroidPlayer/Tools\sdktools.jar"【参考方案2】:public bool SignIn()
if (!IsConnectedToGoogleServices)
Social.localUser.Authenticate ((bool success) =>
IsConnectedToGoogleServices = success;
Debug.Log("Sign-in " + success.ToString() );
);
return IsConnectedToGoogleServices;
为 Authenticate 方法提供的回调不是瞬时的 - 回调是 bool success => ...
lambda 表达式。因此,您不能保证在将IsConnectedToGoogleServices
返回给调用者之前执行回调,默认情况下设置为false
。也许,这可能是您的问题?
【讨论】:
以上是关于Social.localUser.Authenticate 在 Unity 中每次都返回 false的主要内容,如果未能解决你的问题,请参考以下文章