安装了Facebook应用程序的Android上的Unity SDK - 登录失败

9

我似乎遇到了与此问题中讨论的一样的问题:

在Android上,当常规Facebook应用程序已安装时,使用Unity SDK调用FB.Login()会提示用户接受应用程序的权限,当应用程序获得批准后,将触发回调并返回:

{"is_logged_in":false,"user_id":"","access_token":""}

FBResult.Error

null

当Facebook应用程序已安装时,将使用Web流程,并且可以正常工作。但是我已经尝试过Unity SDK的v4.2.4和v4.2.2。

有没有其他建议来解决这个问题?

编辑:还应该注意,我已在两个不同的设备(Galaxy Note 10.1和Nexus 7)上尝试过。

提前感谢!


2014年的一个说明。在某些情况下,问题非常简单,你忘记了developers.facebook上的设置。 Brian在这里用图片解释了这个问题:http://answers.unity3d.com/questions/543540/facebook-sdk-v424-android-login-not-working.html 如果你完全忘记了设置,它会在没有fb应用的设备上工作(这很令人困惑)。至于实际问题,幸运的是有一个解决方案,即使你在Mac上使用Unity也很简单:http://answers.unity3d.com/questions/609810/using-facebook-api-with-android-says-login-is-canc.html


你能否把你的项目发给我们,以便我们尝试调试它?如果您想发送下载链接,请使用unity-sdk@fb.com(或者直接附加在邮件中)。感谢您提供详细的报告! - aaron
1
抱歉,我已经解决了这个问题,但是stackoverflow不想让我自己回答我的问题。也许有一种更直观的方法将该错误返回给Unity SDK呢? :) - Brizee
@BrianBeacom你好,我也遇到了同样的插件问题。我已经在开发人员控制台中输入了日志中生成的哈希密钥,但是我对此非常不确定。一些建议如下--- --> FB应用程序应该更新到最新版本。 --> 在dev控制台中输入logcat生成的哈希密钥。 --> 我们必须创建一个keystore(我们自己的)并将生成的哈希密钥放入仪表板中。我已经完成了所有步骤,但仍然无法解决同样的问题。也许你能指导我一下。 - Siddharth-Verma
@user1683989 哦,我明白了。不幸的是,我自己没有遇到过这种情况,所以你可能需要为此提出一个新问题。我知道Aaron通常很快就会提供帮助,除此之外,我能建议的就是将其插入到logcat中,看看底层的Android SDK是否会给出错误消息(因为Unity插件似乎只是钩入了Android/iOS插件),并且你还可以检查它是否在没有安装FB应用程序的情况下工作,因为Web流程似乎不需要正确的密钥哈希。这两个方法至少可以缩小可能性。 - Brizee
@BrianBeacom 给你。请查看此链接,它会给你一个清晰的想法。http://stackoverflow.com/questions/21251565/facebook-android-sdk-4-2-4-cant-log-in-and-islogged-returns-false-with-unity-4-3 - Siddharth-Verma
显示剩余3条评论
2个回答

5

我感觉很傻,最终还是自己解决了问题,通过部署到一个中间Google Android项目,我能够使用logcat获取更有用的错误信息:

remote_app_id与存储的id不匹配

从那里,我找到了这个与标准Android SDK相关的主题: Android Facebook SDK 3.0在登录时显示“remote_app_id与存储的id不匹配”

最后,通过使用此代码片段获得的Key Hash替换掉原来的Key Hash,我解决了这个问题。

try {
PackageInfo info = getPackageManager().getPackageInfo(
      "com.facebook.samples.loginhowto", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures){
       MessageDigest md = MessageDigest.getInstance("SHA");
       md.update(signature.toByteArray());
       Log.d("KeyHash:", Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}

用你自己的包名替换com.facebook.samples.loginhowto。

Source: https://stackoverflow.com/a/14421260/2823496

似乎获取正确的keyhash,无论是通过命令行还是通过Unity,都取决于安装了正确版本的openssl(并存储在PATH中),但不知道是哪个版本。 (尝试过链接答案中的版本)因此,提醒其他遇到问题的人。
注意 - 如果您在使用Mac进行Unity开发,则几乎不可能做到这一点。在这种情况下,幸运的是有一个简单的解决方案 http://answers.unity3d.com/questions/609810/using-facebook-api-with-android-says-login-is-canc.html

你能告诉我你什么时候放置了这段代码片段吗?我正在尝试将其放置在Unity生成的类(UnityPlayerActivity、UnityPlayerNativeActivity、UnityPlayerProxyActivity)中,但是没有任何日志被记录。 - Álvaro
1
@Álvaro 啊,这有点棘手,Facebook插件的一部分工作是创建FBUnityPlayerActivity并通过它运行请求。因此,您需要更改manifest.xml以便: 在您的UnityPlayerActivity下面,我想你可以以某种其他方式调用它,例如(我随口说的):adb shell am start com.company.appname/.UnityPlayerActivity - Brizee
抱歉,Markdown 不太友好,希望你能从中获取代码片段。 :) - Brizee

0

恭喜我的朋友,你差不多重复了这个问题 :)不,如果只是为了我的使用那就没关系了,不幸的是,我无法将我的应用程序市场局限于没有安装Facebook的人群。如果你想自己解决这个问题,请参考上面的被采纳的答案。 :) - Brizee
当我获取到确切的密钥哈希并将其添加到开发人员Facebook上的Facebook/app时,我必须解决这个问题。 - Long Pham
@longpham 你好,我也遇到了同样的插件问题。我甚至已经将日志中的哈希密钥输入到开发者控制台中,但是我非常不确定该怎么做。你能帮我解决这个问题吗?非常感谢! - Siddharth-Verma
@user1683989,请把你的电子邮件地址发给我。我会发送一个Android项目给你。这个项目将获取一个密钥哈希,然后你可以放到开发者控制台上。 - Long Pham

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接