0

我正在构建一个使用 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 应用程序时,该示例不会显示如何从 web 视图设置我需要的回调(尽管授权调用最终会设置访问令牌)。

Facebook 教程说“如果手机上没有安装 Facebook 应用程序,SSO 将回退到基于 webview 的 oauth dialg”,但我不知道在这种情况下如何设置回调。

我的应用程序的结果是用户必须按两次按钮。第一次调用授权并创建一个有效的会话。但由于没有回调,用户必须再次点击按钮,应用程序才能继续使用有效的访问密钥 - 显然不是一个好的体验。

我将不胜感激任何关于如何处理上述情况的建议或见解,即当设备上未安装 Facebook 应用程序时。非常感谢!

4

0 回答 0