8

ログインボタンを押すと、Facebookアカウントを使用する許可を与える必要があるFacebookページが表示されます。

許可を与えると、 https://www.facebook.com/dialog/permissions.requestにリダイレクトされ、空白のページが表示されます。Android では "window.FB.login" コールバックが呼び出され (以下のコードを参照)、情報を取得してユーザーをリダイレクトできますが、Windows Phone では空白のページしか表示されません。Facebookページに行くと、アプリリストに自分のサイトが登録されています。したがって、登録は正しく機能しました。

4

1 に答える 1

4

このエラーは、facebook js ファイルの安全でない読み込みが原因で発生しました。

アプリケーションに Facebook アプリを統合するには、Facebook アプリのドキュメントに記載されている手順に従う必要があります。

    var fbApi = {
      init: function () {
      $.getScript(document.location.protocol + '//connect.facebook.net/en_US/all.js', function () {
        if (window.FB) {
            window.FB.init({
                appId: MY_APP_ID,
                status: true,
                cookie: true,
                xfbml: false,
                oauth: true,
                channelUrl: 'http://www.yourdomain.com/channel.html'
            });

        }
    });
    },
    login: function () {
    /// <summary>
    /// Login facebook button clicked
    /// </summary>
    log("login facebook button clicked");

    if (window.FB) {

        //Windows phone does not enter this method, Android and Iphone do
        window.FB.login(function (response) {

            if (response.status) {
                log('it means the user has allowed to communicate with facebook');

                fbAccessToken = response.authResponse.accessToken;
                window.FB.api('/me', function (response) {
                    //get information of the facebook user.
                    loginService.subscribeSocialUser(response.id, response.first_name, response.last_name, fbAccessToken, "", "FaceBook", fbSucces, fbFail);

                });
            } else {
                log('User cancelled login or did not fully authorize.');

            }
        },
        { scope: 'email'
        });
    }

}
};

クロス ブラウザーの問題を解決するために、チャネル URL が追加されます。次のように js を参照する html ファイルを指す必要があります。

<script src="//connect.facebook.net/en_US/all.js"></script>

Facebook.js の初期化中に一度エラーが発生すると、正常にログインできなくなります。

Java スクリプトは、同期的または非同期的にロードできます。

(function(d, debug){
     var js, id = 'facebook-jssdk', ref = d.getElementsByTagName('script')[0];
     if (d.getElementById(id)) {return;}
     js = d.createElement('script'); js.id = id; js.async = true;
     js.src = "//connect.facebook.net/en_US/all" + (debug ? "/debug" : "") + ".js";
     ref.parentNode.insertBefore(js, ref);
   }(document, /*debug*/ false));
于 2013-03-29T05:24:13.467 に答える