0

VS2012 テンプレートを使用して作成した facebook アプリケーションでは、facebook のアクセス許可要求が必要ありません。

このアプリは、Facebook ページのファン ゲートとして機能することを目的としています。そのため、アプリ固有の設定で以下のコードを調整しました。このコードは How to check if a user like my Facebook Page or URL using Facebook's APIからのものです。しかし今、アプリは Facebook のアクセス許可チェックをポップアップ表示して、いいね! へのアクセスを許可しています。

私が使用している環境で機能するいいねをチェックする別の手法はありますか?

<html>
  <head>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js"></script>
    <style type="text/css">
      div#container_notlike, div#container_like {
        display: none;
      }
    </style>
  </head>
  <body>
    <div id="fb-root"></div>
    <script>
        window.fbAsyncInit = function () {
            FB.init({
                appId: 'YOUR_APP_ID', // App ID
                channelUrl: 'http(s)://YOUR_APP_DOMAIN/channel.html', // Channel File
                status: true, // check login status
                cookie: true, // enable cookies to allow the server to access the session
                xfbml: true  // parse XFBML
            });

            FB.getLoginStatus(function (response) {
                var page_id = "YOUR_PAGE_ID";
                if (response && response.authResponse) {
                    var user_id = response.authResponse.userID;
                    var fql_query = "SELECT uid FROM page_fan WHERE page_id = " + page_id + "and uid=" + user_id;
                    FB.Data.query(fql_query).wait(function (rows) {
                        if (rows.length == 1 && rows[0].uid == user_id) {
                            console.log("LIKE");
                            $('#container_like').show();
                        } else {
                            console.log("NO LIKEY");
                            $('#container_notlike').show();
                        }
                    });
                } else {
                    FB.login(function (response) {
                        if (response && response.authResponse) {
                            var user_id = response.authResponse.userID;
                            var fql_query = "SELECT uid FROM page_fan WHERE page_id = " + page_id + "and uid=" + user_id;
                            FB.Data.query(fql_query).wait(function (rows) {
                                if (rows.length == 1 && rows[0].uid == user_id) {
                                    console.log("LIKE");
                                    $('#container_like').show();
                                } else {
                                    console.log("NO LIKEY");
                                    $('#container_notlike').show();
                                }
                            });
                        } else {
                            console.log("NO LIKEY");
                            $('#container_notlike').show();
                        }
                    }, { scope: 'user_likes' });
                }
            });
        };

        // Load the SDK Asynchronously
        (function (d) {
            var js, id = 'facebook-jssdk'; if (d.getElementById(id)) { return; }
            js = d.createElement('script'); js.id = id; js.async = true;
            js.src = "//connect.facebook.net/en_US/all.js";
            d.getElementsByTagName('head')[0].appendChild(js);
        }(document));
    </script>

    <div id="container_notlike">
      YOU DON'T LIKE ME :(
    </div>

    <div id="container_like">
      YOU LIKE ME :)
    </div>

  </body>
</html>
4

1 に答える 1

4

CBroe が言ったように、ユーザーがあなたのページを気に入っているかどうかを知る唯一の方法は、いいねの許可を求めることなく、ページ タブの署名付きリクエストを使用することです。

アプリがPage Tabの場合、インデックス ファイルに署名付きのリクエストが投稿されます。

signed_request は json オブジェクトとして投稿されます。これは通常の署名済みリクエストです。

{
   "oauth_token": "...big long string...",
   "algorithm": "HMAC-SHA256",
   "expires": 1291840400,
   "issued_at": 1291836800,
   "registration": {
      "name": "Paul Tarjan",
      "email": "fb@paulisageek.com",
      "location": {
         "name": "San Francisco, California",
         "id": 114952118516947
      },
      "gender": "male",
      "birthday": "12/16/1985",
      "like": true,
      "phone": "555-123-4567",
      "anniversary": "2/14/1998",
      "captain": "K",
      "force": "jedi",
      "live": {
         "name": "Denver, Colorado",
         "id": 115590505119035
      }
   },
   "registration_metadata": {
      "fields": "[\n {'name':'name'},\n {'name':'email'},\n {'name':'location'},\n {'name':'gender'},\n {'name':'birthday'},\n {'name':'password'},\n {'name':'like',       'description':'Do you like this plugin?', 'type':'checkbox',  'default':'checked'},\n {'name':'phone',      'description':'Phone Number',             'type':'text'},\n {'name':'anniversary','description':'Anniversary',              'type':'date'},\n {'name':'captain',    'description':'Best Captain',             'type':'select',    'options':{'P':'Jean-Luc Picard','K':'James T. Kirk'}},\n {'name':'force',      'description':'Which side?',              'type':'select',    'options':{'jedi':'Jedi','sith':'Sith'}, 'default':'sith'},\n {'name':'live',       'description':'Best Place to Live',       'type':'typeahead', 'categories':['city','country','state_province']},\n {'name':'captcha'}\n]"
   },
   "user_id": "218471"
}

この json オブジェクトを配列に解析し、アプリがページ タブである場合、 これを行うと、ユーザーがページを気に入った場合はTRUEを取得し、そうでない場合はFALSEsigned_request['page']['liked']を取得します。

署名リクエストの解析について詳しくは、 https ://developers.facebook.com/docs/howtos/login/signed-request/ をご覧ください。

アプリの種類ごとの特定のフィールドの詳細については、 https ://developers.facebook.com/docs/reference/login/signed-request/ をご覧ください。

于 2013-04-05T11:32:52.113 に答える