如何在Android Facebook SSO中从webview获取回调?

时间:2012-05-08 18:56:26

标签: android facebook oauth

我正在构建一个使用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应用程序时,我将不胜感激。非常感谢!

0 个答案:

没有答案