0

在我使用VS2012 模板构建的 facebook 应用程序中,我不希望有 facebook 权限请求。

该应用程序旨在充当 Facebook 页面的粉丝门。所以我用我的应用程序特定设置调整了下面的代码。此代码来自 How to check if a user likes 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 对象解析为一个数组,并且您的应用程序是一个Page Tab 通过这样做,如果用户喜欢您的页面,signed_request['page']['liked']您将获得TRUE ,如果他不喜欢,您将获得FALSE 。

您可以在此处阅读有关解析签名请求的更多信息: https ://developers.facebook.com/docs/howtos/login/signed-request/

有关每种应用类型的特定字段的更多信息,请访问: https ://developers.facebook.com/docs/reference/login/signed-request/

于 2013-04-05T11:32:52.113 回答