【发布时间】:2011-02-17 06:36:27
【问题描述】:
我正在编写一个应该将照片上传到 Facebook 的 Android 应用程序。
除了一件事,一切都很好。当我第一次调用 Facebook.authorize() 方法时,Facebook 对话框显示了请求的权限和“允许”/“不允许”按钮。那没关系。但是当我第二次运行我的应用程序时,我得到了相同的对话框,但显示我的应用程序已经允许的消息并建议按 OK 按钮。
有没有办法避免第二个对话框?在某些情况下我应该跳过授权方法吗?
我尝试在授权方法之前调用 Facebook.isSessionValid() 方法,但这没有帮助。
这是我的简化代码:
mFacebook = new Facebook(APPLICATION_ID);
mFacebookAsync = new AsyncFacebookRunner(mFacebook);
if (mFacebook.isSessionValid()) {
uploadPictureFile();
}
else {
mFacebook.authorize(this, new String[] {"publish_stream"}, new Facebook.DialogListener() {
@Override
public void onFacebookError(FacebookError e) {
Toast.makeText(PhotoFeederFacebookSendActivity.this, "Facebook error: " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
finishWithResultCode(RESULT_CANCELED);
}
@Override
public void onError(DialogError e) {
Toast.makeText(PhotoFeederFacebookSendActivity.this, "Facebook dialog error: " + e.getLocalizedMessage(), Toast.LENGTH_LONG).show();
finishWithResultCode(RESULT_CANCELED);
}
@Override
public void onComplete(Bundle values) {
uploadPictureFile();
}
@Override
public void onCancel() {Toast.makeText(PhotoFeederFacebookSendActivity.this, "Facebook authorization cancelled.", Toast.LENGTH_LONG).show();
finishWithResultCode(RESULT_CANCELED);
}
});
}
这是我的 onActivityResult 方法:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mFacebook.authorizeCallback(requestCode, resultCode, data);
}
任何帮助表示赞赏。谢谢。
【问题讨论】:
-
截至目前,我也面临这个问题。与 twitter 不同,我们每次必须执行任何功能时都必须打开授权对话框。
-
好的,我自己解决了这个问题。正如 Facebook 示例中所做的那样,我将会话信息保存在共享首选项中。当我的应用第二次执行时,我只是从首选项中恢复会话信息并将其传递给 Facebook 对象。
-
Alexey,你能详细说明一下吗?如果用户注销然后重新登录怎么办?据我了解,这需要调用 authorize(),因此会显示授权对话框,说明该应用程序已被授权。我可以保存访问令牌,但如果用户注销,它就会变得无效,因此需要他们重新登录,我们又回到了同样的问题。
-
在我看来,他们添加了代码以确保授权通过手机上的官方 Facebook 应用程序;它会查看意图信息以确保它没有被黑客入侵等。
标签: android facebook sdk single-sign-on