我正在构建一个使用Facebook SSO的Android应用,如标准教程示例中所述:https://developers.facebook.com/docs/mobile/android/build/。
具体来说,我的代码在用户按下这样的按钮后调用facebook.authorize():
View.OnClickListener handler = new View.OnClickListener() {
public void onClick(View v) {
if (v == btnFB) {
if(!facebook.isSessionValid()) {
facebook.authorize(this, new String[] {}, new DialogListener() {
@Override
public void onComplete(Bundle values) {
SharedPreferences.Editor editor = mPrefs.edit();
editor.putString("access_token", facebook.getAccessToken());
editor.putLong("access_expires", facebook.getAccessExpires());
editor.commit();
}
@Override
public void onFacebookError(FacebookError error) {}
@Override
public void onError(DialogError e) {}
@Override
public void onCancel() {}
});
}
else {
// already have a valid access token, so use it
String status = "FB access token is: " + facebook.getAccessToken();
Log.i(status);
// and fire off an intent service to do something on my server ...
}
}
}
将回调定义为:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
facebook.authorizeCallback(requestCode, resultCode, data);
// fire off the same intent as above ...
}
如果Facebook应用程序安装在设备上,则对facebook.authorize()的调用工作正常,onActivityResult()回调也可以正常工作。但是,当设备上没有安装Facebook应用程序时,该示例未显示如何从webview设置我需要的回调(尽管授权调用最终设置了访问令牌)。
Facebook教程说“如果手机上没有安装Facebook应用程序,SSO将回归基于webview的oauth拨号”,但在这种情况下我不知道如何设置回调。
我的应用中的结果是用户必须按两次按钮。第一次调用授权并创建有效会话。但由于没有回调,用户必须在应用程序继续使用有效的访问密钥之前再次按下按钮 - 显然不是一个好的体验。
对于如何处理上述情况,即在设备上未安装Facebook应用程序时,我将不胜感激。非常感谢!