2011-11-16 48 views
3

我应该如何在用户验证我的应用程序后将用户重定向到我的页面的选项卡?我无法为重定向添加一个特定的网址,因为我的应用将存在多个网页中。所以不知何故,我需要抓住页面的ID并将其放入网址。我试图使用会话变量,但它似乎并没有为我工作。 :(这里是我的代码的一部分...用户认证后重定向回页面标签?

$signed_request = $facebook->getSignedRequest(); 

$_SESSION['TrueID'] = $signed_request['page']['id']; 

$fbconfig['appBaseUrl'] = "http://www.facebook.com/pages/".$_SESSION['TrueID']."/".$_SESSION['TrueID']."?sk=app_241321439259320"; 

/* 
* If user first time authenticated the application facebook 
* redirects user to baseUrl, so I checked if any code passed 
* then redirect him to the application url 
* -mahmud 
*/ 
if (isset($_GET['code'])){ 
    header("Location: " . $fbconfig['appBaseUrl']); 
    exit; 
} 
//~~ 

// 
if (isset($_GET['request_ids'])){ 
    //user comes from invitation 
    //track them if you need 
} 

正如你可以看到我正在尝试设置一个会话变量来获取页面的ID ..但是这不是为我工作:(变量回声的出就好当我访问我的网页...但我猜它在认证过程中取得了一些丢失。

+0

好吧..这可能是完全荒谬的,但我把它插入这个JavaScript将在浏览器发回2页而不是重定向到另一个页面,以工作.. 它的工作原理..但我应该这样做吗? – Dustin

回答

3

因此,当一个页面添加/安装应用程式,您应该存储页面的link随着页面的id

现在,当您的页面标签被加载时,Facebook将发送page参数,其中将包含页面id(以及其他信息,请参阅documentation)。您检索ID,从数据库获取页面的链接,并构建你的页面的选项卡链接,这将是这样的(其中$page是页面的数据库记录):

$redirect_uri = $page['page_link'] . '?sk=app_' . $APP_ID 

由于您使用的是PHP-SDK,这是你如何构建你的登录:

$user = $facebook->getUser(); 
if(!$user) { 
    $url = $facebook->getLoginUrl(array('redirect_uri' => $redirect_uri, 'scope' => 'read_stream')); 
    echo "<script>top.location.href = '$url';</script>"; 
    exit; 
} 

当然,你可能不希望直接重定向到登录,而是要行动链接的电话:

<a href="<?php echo $url;?>" target="_top">Connect</a> 
+0

你如何得到'$ page ['page_link']'? – Dustin

+0

如果您是通过图形api([reference](http://developers.facebook.com/docs/reference/api/page/#tabs))安装应用程序,那么您已经知道您刚刚查询到的'page_id'通过图表编号获取数据。否则,如果您遇到一个新页面(由'signed_request'捕获),只需检索其信息并将其添加到您的数据库中......等等 – ifaour

2

我发现最好的办法是在应用程序设置来设置网站的URL http://www.facebook.com/pages/

然后做这样的事情(测试):

$uid = ''; 

$facebook = new Facebook(array(
     'appId' =>'xxxxxxxxxxxxxxx', 
     'secret' =>'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', 
     'cookie' => true, 
    'oauth' => true, 
     )); 

$uid = $facebook->getUser(); 

$signedrequest = $facebook->getSignedRequest(); 

$page_id = $signedrequest["page"]["id"]; 

$fb_access_token = $signedrequest["oauth_token"]; 

if($uid==''){ 
echo '<div id="authenticate"><a href="https://www.facebook.com/dialog/oauth/?client_id=APP_CLIENT_ID_HERE&redirect_uri=http://www.facebook.com/pages/'. $page_id .'/'.$page_id.'%3Fsk%3Dapp_APP_CLIENT_ID_HERE&response_type=token" target="_top">Authorize App</a></div>'; 

这可能是一个黑客的一点点,但它运作良好为我的情况:)希望它可以帮助别人!

相关问题