我已经从我的调试密钥库和发布密钥库中生成了密钥,并将它们都插入到Facebook应用程序的“本机Android应用程序”字段中进行了测试。
我在多个设备上进行了测试,当我使用debug.keystore(从eclipse部署)时,它始终正常工作。但是,当我使用发布密钥库签名应用程序包时,仅当设备未安装Facebook应用程序时才能正常工作。
如果已安装Facebook应用程序,则会发送另一个密钥,我无法识别。
我非常仔细地生成哈希键,分配正确的路径和密码,如Facebook的说明所述。
注意:使用debug.keystore运行时它可以工作,但似乎使用的是对话框身份验证而不是Facebook应用程序。
谢谢
我在多个设备上进行了测试,当我使用debug.keystore(从eclipse部署)时,它始终正常工作。但是,当我使用发布密钥库签名应用程序包时,仅当设备未安装Facebook应用程序时才能正常工作。
如果已安装Facebook应用程序,则会发送另一个密钥,我无法识别。
我非常仔细地生成哈希键,分配正确的路径和密码,如Facebook的说明所述。
注意:使用debug.keystore运行时它可以工作,但似乎使用的是对话框身份验证而不是Facebook应用程序。
谢谢
public void share(final int score) {
runOnUiThread(new Runnable() {
@Override
public void run() {
try {
mScoreToShare = score;
if (mGLView != null)
mGLView.stopDrawing();
getFacebook();
if(!mFacebook.isSessionValid()) {
facebookAuthorize();
}
else {
facebookShowFeedDialog();
}
} catch (Exception e) {
Log.error("Share failed", e);
if (mGLView != null)
mGLView.startDrawing();
}
}
});
}
private Facebook getFacebook() {
if (mFacebook == null) {
mFacebook = new Facebook("xxx");
SharedPreferences prefs = getSharedPreferences("xxx", MODE_PRIVATE);//getPreferences(MODE_PRIVATE);
String access_token = prefs.getString("access_token", null);
long expires = prefs.getLong("access_expires", 0);
if(access_token != null) {
mFacebook.setAccessToken(access_token);
}
if(expires != 0) {
mFacebook.setAccessExpires(expires);
}
}
return mFacebook;
}
private void facebookAuthorize() {
//mFacebook.authorize(this, null, Facebook.FORCE_DIALOG_AUTH, new DialogListener() {
mFacebook.authorize(this, new DialogListener() {
@Override
public void onComplete(Bundle values) {
SharedPreferences.Editor editor = getSharedPreferences("xxx", MODE_PRIVATE).edit();
editor.putString("access_token", mFacebook.getAccessToken());
editor.putLong("access_expires", mFacebook.getAccessExpires());
editor.commit();
facebookShowFeedDialog();
}
@Override
public void onFacebookError(FacebookError error) {
mFacebook = null;
showAlert();
if (mGLView != null)
mGLView.startDrawing();
}
@Override
public void onError(DialogError e) {
mFacebook = null;
showAlert();
if (mGLView != null)
mGLView.startDrawing();
}
@Override
public void onCancel() {
mFacebook = null;
if (mGLView != null)
mGLView.startDrawing();
}
});
}
private void facebookExtendAccessTokenIfNeeded() {
if (mFacebook != null) {
mFacebook.extendAccessTokenIfNeeded(this, null);
}
}
private void facebookShowFeedDialog() {
Bundle parameters = new Bundle();
String caption = "";
parameters.putString("caption", caption);
parameters.putString("description", "");
parameters.putString("picture", "");
//post on user's wall.
mFacebook.dialog(this, "feed", parameters, new DialogListener(){
@Override
public void onComplete(Bundle values) {
mFacebook = null;
if (mGLView != null)
mGLView.startDrawing();
}
@Override
public void onFacebookError(FacebookError error) {
mFacebook = null;
showAlert("");
if (mGLView != null)
mGLView.startDrawing();
}
@Override
public void onError(DialogError e) {
mFacebook = null;
showAlert("");
if (mGLView != null)
mGLView.startDrawing();
}
@Override
public void onCancel() {
mFacebook = null;
if (mGLView != null)
mGLView.startDrawing();
}
});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if (mFacebook != null) {
mFacebook.authorizeCallback(requestCode, resultCode, data);
}
}