带有 Unity 的 Google Play 服务 - 登录没有任何结果

Posted

技术标签:

【中文标题】带有 Unity 的 Google Play 服务 - 登录没有任何结果【英文标题】:Google Play Services with Unity - Sign in results in nothing 【发布时间】:2018-07-30 00:43:29 【问题描述】:

所以我最近一直在尝试将 Google Play 游戏服务添加到我的好友和我正在开展的项目中。

我想我会从登录开始,因为这对于我们想要添加的任何其他内容(例如成就和排行榜)都是必需的。 无论如何,我已经向 google play 商店发布了一个封闭的 Alpha,我的好友开发人员和我自己的开发人员电子邮件作为测试人员。我已经设置了我的 OAuth2 客户端 ID、SHA 1、androidManifest 文件和我们希望的其他游戏服务。

然后我在 Unity 中包含了最新的 Google Play 游戏插件 (0.9.50),并将资源和客户端 ID 设置到我们的项目中。我当然有我的密钥等用于我们封闭式 Alpha 测试的签名 APK。

然后,我在场景中设置了一个登录按钮,并将我的代码设置如下:

void Start ()

    PlayGamesClientConfiguration config = new PlayGamesClientConfiguration.Builder()
        .RequestEmail()
        .RequestServerAuthCode(false)
        .RequestIdToken()
        .Build();

    //DEBUGGING ONLY
    PlayGamesPlatform.DebugLogEnabled = true;

    PlayGamesPlatform.InitializeInstance(config);
    PlayGamesPlatform.Activate();

    // Does nothing either . . . .
   Social.Instance.Authenticate((bool success) =>  SignInCallback(success); , false);


public void SignIn()

    _signInNotification.text = "WARMER";

    if (!PlayGamesPlatform.Instance.localUser.authenticated)
    
        _signInNotification.text = "SIGNING IN";
        Social.localUser.Authenticate((bool success) =>  SignInCallback(success); );
    
    else
    
        PlayGamesPlatform.Instance.SignOut();

        _signInNotification.text = "OUT";
    


private void SignInCallback(bool success)

    if (success)
    
        Debug.Log("(Something) Signed in!");

        _signInNotification.text = "Signed In as : " + Social.localUser.userName;
    
    else
    
        Debug.Log("(Something) Sign-In Failed!");

        _signInNotification.text = "Sign-In Failed!";
    
[/code]

我有一些文本可以让我知道代码的哪一部分被访问或运行。登录按钮调用 SignIn() 函数,但仅显示文本“WARMER”。 Social.localUser.Authenticate() 函数似乎从未被调用过。

我尝试了多种解决方案、更改、变体等。但是,当我单击登录按钮时,绝对没有任何反应。没有错误,没有警告,没有显示登录失败的文字,什么都没有。

不太确定我错过了什么,任何想法将不胜感激! :)

【问题讨论】:

【参考方案1】:

我在调试 Google Play 服务问题时发现的一个问题是,弹出的错误来自单独的活动,因为登录提示在应用程序之外。您可能会收到错误响应,但它不是来自您的程序。因此,您可能需要禁用控制台中的任何过滤器才能查看所有错误(如果您有 Android Studio,当设置为无过滤器时,logcat 应该显示来自插入设备的所有响应)。

在我的例子中,插件有一个 AndroidManifest 文件(GooglePlayGames/Plugins/Android/GooglePlayGamesManifest.plugin 文件夹),其中 APP_ID 的值前面有一个空格。我相信这是将值转换为字符串的旧解决方法,但现在应用程序要求它是一个数值,因此删除空格解决了我的问题。

希望这会有所帮助!

【讨论】:

感谢您的回复!我正在使用 Unity,我不确定是否可以使用 logcat 通过 Android Studio 检查我的游戏。我注意到您在我的清单文件中提到的空格并将其删除,感谢您的提醒。不幸的是,它仍然没有解决我的问题,但我希望它能让我更近一步! 即使您不是直接从 Android Studio 运行游戏,如果您有 Android Studio,您仍然可以插入设备并检查 logcat 以了解设备在游戏运行时产生的任何输出运行,只要您通过设备的开发人员设置启用调试权限。此外,“空间”修复可能会也可能不会根据不同的插件版本起作用,所以在尝试其他解决方案时请记住这一点。 我终于让它工作了。我想我发布的阿尔法有点太早了。我只创建了一个普通的游戏服务游戏,并通过 keytool 可执行文件找到了 SHA 1 指纹,一切都很顺利。除了,现在由于某种原因一个帐户成功通过身份验证,而另一个帐户失败....我不太明白为什么.. 所以使用 logcat 工具,我能够找出我遇到的错误。它目前给我一个 SIGN_IN 状态:ERROR_NOT_AUTHORIZED,然后是 AuthState == Unauthenticated 调用身份验证回调失败。我已经仔细检查了我的清单文件、包名称、SHA 1 指纹,它们似乎都匹配。有趣的问题。奇怪的是我最初用于登录的帐户,但是当我再次尝试时,它不起作用。 嗨@aromans,你解决了这个问题吗?我遇到了和你在这里完全相同的问题,登录没有做任何事情,我的帐户最初用来登录,但现在什么也没有。【参考方案2】:

要设置 Google Play 游戏服务,我们遵循了文档 here,它指导我们完成了所有必要的步骤。 当我们无法登录时,我们发现,在测试您的应用程序时,您的 OAuth 2.0 客户端 ID(在 Google API 控制台 > 凭据上)应该使用上传证书中的 SHA-1 签名证书指纹密钥以及何时发布SHA-1 密钥应该来自应用签名证书。这两个证书都可以在您的 Google Play 控制台 > 所有应用程序(选择正确的一个)> 发布管理 > 应用程序签名中找到。

【讨论】:

以上是关于带有 Unity 的 Google Play 服务 - 登录没有任何结果的主要内容,如果未能解决你的问题,请参考以下文章

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

从 Google Play 服务、Unity 插件获取所有回合制比赛信息

Unity 游戏未正确配置为使用 google play 游戏服务

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

如何在 Unity 3D 中使用 google play 服务?

Unity接入IAP服务器验单(Google Play)