我有一个非常基本的 Android 应用程序,使用基于https://developers.facebook.com/docs/android/getting-started/facebook-sdk-for-android/示例的 Facebook SDK
如果我从 ADT 运行它,它会工作并显示“已打开”。由于我已经授权了该应用程序,因此它不会显示对话框,而只会显示“已打开”文本。
如果我将它导出为 apk 并使用我刚刚创建的新密钥库对其进行签名,它的工作原理相同。
但是,如果我导出一个 apk 并使用我用来签署我的真实应用程序的实际密钥库对其进行签名,它就不起作用。首先,即使我已经授权它,它也会显示一个访问我的公共个人资料和朋友列表的对话框,然后单击 OK 后它显示“已关闭”,这意味着 session.isClosed() 为真。
我在 Facebook 开发人员工具中拥有调试、新和实际密钥库的所有密钥哈希。
有什么问题?我的密钥库被冲洗了吗?
这是我的应用程序的代码:
package com.example.newtest;
import android.os.Bundle;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.widget.TextView;
import com.facebook.*;
import com.facebook.model.*;
public class MainActivity extends Activity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Session.openActiveSession(this, true, new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
TextView welcome = (TextView) findViewById(R.id.welcome);
welcome.setText("opened");
} else if (session.isClosed()) {
TextView welcome = (TextView) findViewById(R.id.welcome);
welcome.setText("closed");
} else {
TextView welcome = (TextView) findViewById(R.id.welcome);
welcome.setText("neither opened nor closed");
}
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
}