我正在尝试将Facebook集成到我的应用程序中,因此遵循教程:Facebook Android但我无法获得第一个示例(单点登录)。当我的应用程序加载时,我得到了facebook对话框,但它只是说“发生错误。请稍后重试。”在底部有一个facebook风格的“Ok”按钮,logcat中没有任何内容:
我按照教程中的步骤操作,但我猜测APP ID或keytool生成的hashkey有问题。以下是我遵循的步骤:
我不知道为什么logcat中没有任何东西,但是当我安装它时,控制台总是会毫不犹豫地说:ActivityManager: Warning: Activity not started, its current task has been brought to the front
我找不到任何对我的应用程序的logcat引用或我从facebook sdk获得的错误:Facebook-ProxyAuth(4828): Failed to read calling package's signature.
我已经在这里待了几个小时,任何帮助都将不胜感激。我无法相信facebook SDK和Android的帮助是如此粗略,Facebook应该为自己感到羞耻。
谢谢,
InfinitiFizz
答案 0 :(得分:2)
你必须从一个单独的线程调用.request()。如果您在UI线程上执行此操作,则在您的代码执行之前,facebook授权不会完成。所以在facebook授权的“onComplete”中调用新线程。此时您将拥有有效的访问令牌。祝你好运!
(这就是为什么api说“不要从UI线程调用它!”。)
答案 1 :(得分:2)
事实上,我确实遇到了同样的问题而且它已经解决了。 因此,在哈希密钥生成中使用以下步骤:
答案 2 :(得分:1)
我有这个问题只是因为我在用正确的密钥正确初始化facebook对象之前调用了facebook api。只需确保使用正确的密钥,然后正确初始化Facebook对象。
此外,我还尝试使用不同的Android应用程序密钥进行facebook api调用,绊倒了几次。请记住,facebook教程指示您使用已编译的apk创建密钥。如果您要从IDE运行代码(我正在使用Eclipse),则此密钥哈希将不同。当您直接从eclipse运行您的应用程序时,Facebook密钥会有所不同,因为从eclipse运行您的应用程序时,它使用默认的发布密钥来构建您的应用程序。
因此我在facebook开发者门户网站上通常有两个键。使用用于Android市场的release-key编译的apk创建的一个密钥,以及直接从eclipse运行应用程序代码创建的另一个密钥。
答案 3 :(得分:0)
您在步骤7中选择Native App的原因是什么?我将其保留在默认的HTML5 /移动网络上,并使样本生效。
答案 4 :(得分:0)
正确找出你的哈希值的最好方法是这段代码。:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
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替换为您自己的包名。