【问题标题】:Move to the Facebook application page after authenticate through Single Sign On通过 Single Sign On 进行身份验证后移动到 Facebook 应用程序页面
【发布时间】:2012-06-20 10:22:34
【问题描述】:

我正在开发一个需要集成 Facebook 社交功能的应用程序。

我想要的是使用 SSO(单点登录)功能,当用户在我的应用程序中按下一个按钮时,一个 web 视图将打开并向他显示我在 Facebook 中的应用程序页面,在用户进行身份验证后,现在他可以做就像经过身份验证的用户一样。

我下载了 Facebook SDK 并将其包含在我的项目中,我还在 Facebook 开发者页面中签署了我的应用程序并获得了一个 APP-ID。

这是我的代码到现在的样子:

public class WebViewLike extends Activity {

    private static final String TAG = "WebViewLike";
    public static final String APP_ID = "1222222";
    private Facebook facebook = new Facebook(APP_ID);

    private WebView webView;
    private Activity myActivity;

    private final class WallWebChromeClient extends WebChromeClient {

        public void onProgressChanged(WebView view, int progress)   
        {
            myActivity.setTitle("Loading...");
            myActivity.setProgress(progress * 100);

            if(progress == 100)
                myActivity.setTitle(R.string.app_name);
        }
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        requestWindowFeature(Window.FEATURE_PROGRESS);
        setContentView(R.layout.view_weblike);
        myActivity = this;

        facebook.authorize(this, new DialogListener() {
            @Override
            public void onComplete(Bundle values) {

                Log.d(TAG, "onComplete");
                Log.d(TAG, "facebook.getAccessToken() " + facebook.getAccessToken());
                Log.d(TAG, "facebook.getAccessExpires() " + facebook.getAccessExpires()); 

                //Load the given URL
                webView.loadUrl(getFacebookWallUrl());
            }

            @Override
            public void onFacebookError(FacebookError error) {Log.d(TAG, "onComplete");}

            @Override
            public void onError(DialogError e) {Log.d(TAG, "onComplete");}

            @Override
            public void onCancel() {Log.d(TAG, "onComplete");}
        });

        initWebView();
    }

    private void initWebView() {
        webView = (WebView) findViewById( R.id.likeWebView );
        final WebSettings webSettings = webView.getSettings(); 
        webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
        webSettings.setJavaScriptEnabled(true);
        webSettings.setBuiltInZoomControls(false);
        webView.setScrollBarStyle(WebView.SCROLLBARS_OUTSIDE_OVERLAY);
        webView.setHorizontalScrollBarEnabled(false);
        webView.setWebChromeClient(new WallWebChromeClient());
    }

    private String getFacebookWallUrl() {

        Log.d(TAG, "facebook.getAccessToken() != null");
        String wallUrl = "http://www.facebook.com/plugins/login.php?" + "href="
                + URLEncoder.encode("http://www.facebook.com/MyAppPage") + "&access_token="
                + URLEncoder.encode(facebook.getAccessToken());

        Log.d(TAG, "wallUrl " + wallUrl);
        return wallUrl;
    }


    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        Log.d(TAG, "onActivityResult");
        facebook.authorizeCallback(requestCode, resultCode, data);
    }
}

现在,当我按下按钮时,我会转到一个新活动,表明我已获得授权,这意味着 SSO 工作正常。问题是当我按下 Okay 按钮时,正如我所说,我想移动到我的应用程序页面,但我尝试的所有内容都显示我的 Facebook 应用程序页面,但要求我再次登录。从我的角度来看,我需要在getFacebookWallUrl() 方法中更改wallUrl 字符串的开头,但我找不到任何相关信息。

有可能吗?

【问题讨论】:

    标签: android facebook authentication


    【解决方案1】:

    您是否正在通过社交网络分享有关您的应用的信息?如果您的回答是肯定的,请尝试this

    【讨论】:

    • 不分享任何东西,只是希望用户看到我的应用程序页面,并且他有能力做喜欢或其他事情,比如阅读 cmets 或发布 cmets。
    【解决方案2】:

    您可以使用 fbrocket api 进行 Facebook 集成,如下例所示。我使用成功了。

    http://www.androidpeople.com/android-facebook-api-example-using-fbrocket/#idc-cover

    【讨论】:

    • 我不想发布状态,我只想向用户显示我的 Facebook 页面,无需任何登录。从我看到的 fbrocket 是用于发布状态的。谢谢。
    猜你喜欢
    • 2014-06-13
    • 2015-11-08
    • 2017-03-03
    • 1970-01-01
    • 2015-09-01
    • 2017-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多