0

首先对我的问题感到抱歉,我几乎到处都检查过,但我找不到正确的答案。有很多文档和教程,但在开发中它会发生变化。但是,我的问题是,我有一个粉丝页面,它有一个与我的应用程序集成的选项卡。

我只想检查用户在这里并且他们之前已经喜欢过的会话,或者如果他们已经喜欢我的页面,我想更新会话并获取新的访问令牌,然后将它们重定向到我的流体画布页面(顺便说一句,这是我的第二个问题。因为登陆页面在810px的页面。在他们喜欢页面刷新自己并再次在固定区域打开之后。)

我是否必须将 FB.login 按钮放入我的登录页面,或者在应用程序页面加载时询问用户权限是否更好。

我的文件夹架构是这样的:

-appfolder
--tab - (landing page in fixed page)
--app - (app page in fluid canvas)
--css
--img
--js
--php-sdk
--index.php (check everything here and redirect in here with login attributes)
--config.php
--fbaccess.php
--fbin.php
--fbout.php

登陆页面代码:

<?php
    require 'php-sdk/facebook.php';

    $app_id = 'xxx';
    $app_secret = 'xxx';
    // Set
    $app_namespace = 'hangisienmeshur';
    $app_url = 'https://apps.facebook.com/' . $app_namespace . '/';
    $scope = 'email,publish_actions';

    // Init the Facebook SDK
    $facebook = new Facebook(array( 
         'appId'  => $app_id,
         'secret' => $app_secret,
    ));

    // Get the current user
    $user = $facebook->getUser();
?>

    <!DOCTYPE html>
    <html xmlns:fb="http://ogp.me/ns/fb#" xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Tropicana Main</title>
    <link href="css/normalize.css" rel="stylesheet" type="text/css" />
    <link href="css/main.css" rel="stylesheet" type="text/css" />
    </head>

    <body>

    <div id="fb-root"></div>

    <script type="text/javascript" src="http://connect.facebook.net/en_US/all.js"></script>
    <script>

      window.fbAsyncInit = function() {
        FB.init({
          appId      : 'xxx', // App ID
          channelUrl : 'http://www.xxx.com/app/xx/channel.php', // Channel File
          status     : true, // check login status
          cookie     : true, // enable cookies to allow the server to access the session
          xfbml      : true  // parse XFBML
        });

        // Additional initialization code here
        FB.Event.subscribe('edge.create',
            function(response) {
                window.location.href = 'https://apps.facebook.com/xxx/';
            }
        );
      };

      // Load the SDK Asynchronously
      (function(d){
         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.js";
         ref.parentNode.insertBefore(js, ref);
       }(document));


    </script>



    <div id="mainfoto">
    <div id="fb_button" class="myClass rtl">

    <fb:like href="http://www.facebook.com/xxx" width="100" layout="button_count" show_faces="false" send="false"></fb:like>

</div>
</div>

</body>
</html>
4

1 回答 1

0

尽量避免在 Facebook 应用程序中使用会话。Facebook 在 iframe 中加载您的网页,由于安全限制,某些浏览器(尤其是 Safari)无法正常工作。

Facebook 建议等待权限,直到它们变得必要。您可以请求画布加载的权限。最好的用例是等待用户执行需要其信息的操作(例如,单击“注册”按钮)。

为了使您的流程正常工作,我建议采用这种方法。

在登录页面上,使用签名请求来判断用户是否喜欢您的页面。

$signed = parse_signed_request($_REQUEST['signed_request'], 'YOUR-APP-SECRET');
if ($signed['page']['liked'] == 1) {
    $fan = true;
} else {
    $fan = false;
}

if ($fan)
{
    echo "window.location.href = 'https://apps.facebook.com/xxx/';";
}
else
{
     echo "<p>Please like the page.</p>";
}

来源

这会将喜欢您页面的用户重定向到画布页面。还没有的用户会看到“请点赞该页面”的消息。

您不需要订阅“edge.create”,因为单击“喜欢”按钮会强制页面重新加载,然后您的代码将执行重定向,因为用户现在喜欢该页面。

于 2013-09-24T13:12:05.320 回答