0

我正在尝试访问已登录用户的 Facebook 信息。为此,我阅读了各种文档,发现在创建应用程序并生成 Facebook App-Id 的 facebook 开发人员部分需要哈希键配置。我尝试生成哈希键以填充到 facebook 开发人员门户上的 Native Android App 部分。我为此浏览了许多链接,例如这里

但是哈希键根本不起作用。有时它说没有哈希匹配,或者有时它只是提示一个 facebook 对话框并消失。

但它仍然无法在我的设备中运行。它在模拟器上运行良好。我用的是Mac系统,有什么问题吗?

如果我遗漏了什么,有人可以指导我吗?我是否需要在 Facebook 开发者门户的应用程序设置中编辑更多内容?

4

3 回答 3

0

Try this when session open

try {
            PackageInfo info = getPackageManager().getPackageInfo("YOUR_PACKAGE_NAME", 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) {

        }
于 2013-10-30T12:16:12.677 回答
0

这是因为设备正在创建一个不在您的应用设置中的新密钥哈希。所以你必须相应地更新keyhash。在 onCreate() 中使用它

try {
            PackageInfo info = getPackageManager().getPackageInfo("YOUR_PACKAGE_NAME", 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) {

        }
于 2013-10-30T12:13:43.323 回答
0

这一直是很多人的问题。或者从命令行生成哈希,您可以从代码生成它,然后将其打印到日志中,以便您可以从那里复制它。

下面的代码就是这样做的。例如,您可以将它放在您的活动 onCreate() 中,并在获得哈希后将其删除。显然,您需要将包名称更改为您自己的。

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) {
}

如果您不想使用代码,这个答案很好地描述了如何从命令行执行相同的操作。两者应该有相同的结果。

于 2013-10-30T12:14:28.923 回答