我是Android的Facebook开发新手。我从this tutorial开始 但我的应用程序无法连接到Facebook。它总是在 if(session.isOpened())
中返回false我已经搜索并阅读了很多关于这个问题的内容,我已经意识到在大多数情况下问题是密钥哈希。我用这段代码检查了我的哈希
try {
PackageInfo info = getPackageManager().getPackageInfo(
"my package",
PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {
MessageDigest md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
Log.d("FACEBOOK", "Hash: " + Base64.encodeToString(md.digest(), Base64.DEFAULT));
}
} catch (NameNotFoundException e) {
} catch (NoSuchAlgorithmException e) {
}
并且还通过命令提示符:
keytool -exportcert -alias androiddebugkey -keystore %HOMEPATH%\.android\debug.keystore > C:\openssl\bin\debug.txt
C:\openssl\bin\openssl sha1 -binary C:\openssl\bin\debug.txt > C:\openssl\bin\debug_sha.txt
C:\openssl\bin\openssl base64 -in C:\openssl\bin\debug_sha.txt > C:\openssl\bin\debug_base64.txt
我已经通过两种方式获得了相同的哈希值,并在我的facebook应用程序的“Key Hashes”字段中输入了它。其他字段填充了我的包和类。沙箱模式处于活动状态。
这是我的确切代码:
facebookButton.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
//FACEBOOK LOGIN HERE
// start Facebook Login
Session.openActiveSession(StartMenu.this, true, new Session.StatusCallback() {
// callback when session changes state
@Override
public void call(Session session, SessionState state, Exception exception) {
Log.d("FACEBOOK","Session opened?: " + session.isOpened());
if (session.isOpened()) {
// make request to the /me API
Request.newMeRequest(session, new Request.GraphUserCallback() {
// callback after Graph API response with user object
@Override
public void onCompleted(GraphUser user, Response response) {
if (user != null) {
//USER LOGGED
Log.d("FACEBOOK","Logged in!");
facebookButton.setImageResource(R.drawable.facebook_thumbs_up);
}
}
}).executeAsync();
}
}
});
}
});
请注意,我正在使用 newMeRequest + executeAsync()方法而不是已弃用的 executeMeRequestAsync 但我已经测试了不推荐使用的方法同样的结果。
另外,我编码:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
此外,我在strings.xml上有我的app_id标签,并在清单文件中为facebook添加了元数据和活动标签。
我正在使用sdk 3.6.0。
我已经测试了三个设备,其中两个安装了facebook应用,一个没有应用。在我的应用无法连接的所有设备中。
我做错了什么?
提前致谢,请原谅我的英语。
更新:解决了!!我对app_id字符串做了一个错误的引用(对我很羞耻)。但是我注意到如果你安装了FB App,它将不会显示任何有关它的信息,并且logcat消息可能有点令人困惑,所以我将在没有fb app的设备中测试所有的facebook内容。谢谢你们!