1

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 が正常に機能していることを意味します。問題は、私が言ったように、[OK] ボタンを押すと、自分のアプリ ページに移動したいのですが、試したすべてのことで Facebook アプリケーション ページが表示されますが、もう一度ログインするように求められます。私の観点からはwallUrl、メソッドで文字列の先頭を変更する必要がありgetFacebookWallUrl()ますが、それに関する情報が見つかりません。

出来ますか?

4

2 に答える 2

1

ソーシャル ネットワークを通じてアプリについて何か共有していますか? あなたの答えが「はい」の場合は、これを試してください。

于 2012-06-20T10:30:30.963 に答える
0

次の例のように、Facebook 統合に fbrocket api を使用できます。上手に使っています。

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

于 2012-06-20T12:59:19.793 に答える