2011-06-30 65 views
2

我有一个应用程序,需要具有独特的设置,每个用户的实例添加到他们的页面(这是作为一个选项卡添加)。Facebook应用程序实例设置

我一直没有找到任何文件来做到这一点 - 有谁知道如何?还是有人有一个例子要跟随或学习的地方?


SOLUTION

我做了一个应用的用户的页面上的标签一节,只显示页的管理员的。它链接到我应用程序中的一个页面,将page_id发送到我的页面。这使我现在可以根据page_id在我的数据库中存储信息(和设置)。

我发现Facebook有一部分可以转到应用程序的设置页面(您可以在应用程序设置中通过开发人员应用程序设置),该页面也发送page_id - 但不会以加密方式发送感觉,所以我用我的设置选项加密了page_id。

如果有人需要进一步解释,随时给我发消息我会很乐意帮忙。

回答

2

我很确定你在找什么是“页面”实例。每个页面都有一个Facebook ID,就像每个用户一样。大多数情况下,您可以在用户标识的任何位置使用页面标识。你想要做的是捕获页面的ID,而不是将用户的ID添加到页面(管理员)。滚动几乎所有的方式向底部,如果这个URL来看看如何抓取网页ID: http://developers.facebook.com/docs/guides/canvas/

基本上,一个额外的参数包括呼叫“页”将包含页面ID。使用它与页面交互并存储任何会话信息。

+0

嗨布伦特 - 我已经多次阅读该页面,并且知道如何获取页面ID等,但是如何根据用户的所有者设置与它相关的设置?来自用户的观点:我安装应用程序,我想在我的页面上设置设置(但无法从该页面获取页面ID)。创建管理设置链接是否可以通过将它们发送回其他页面(使用page_id)的选项卡工作? –

+0

“用户的所有者”?在“页面”部分,会有一个“id”参数,它是页面的ID。如果查看该页面的用户已授权您的应用,则签名请求中将出现“user_id”项目。还会有一个“用户”部分,您可以在这里查看他们是否是管理员。基于此,您可以“揭示”其他选项。我不确定你指的是什么“其他页面”。只有2个ID,当前页面ID和当前用户ID。 –

+0

- 正确,并且它们不会被发送到任何一页中。页面标识仅在页面(不是设置页面)上发送,用户标识仅在设置页面上可靠地发送。 –

1

您可以使用数据库来存储每个用户实例的设置,并使用唯一键(使用php的uniqid函数)。

应用程序可以根据用户的密钥检索设置。

+0

我知道我可以为用户的每个实例做一个,但我不希望每个用户的实例,我想要我的每个应用程序的实例。不同之处在于,当我的应用程序作为标签添加到某人的网页时,其他用户查看该标签 - 这被视为用户看到的标签。我只需要为添加应用的人存储信息 - 而不是看到该标签的人。 –

1

当用户通过访问另一个页面中的标签访问您的应用程序时,您的应用程序会收到一个名为signed_request的POST变量。

在PHP中,该变种可以解码我通过以下方式:

function parse_signed_request($signed_request, $secret) { 
    list($encoded_sig, $payload) = explode('.', $signed_request, 2); 

    // decode the data 
    $sig = base64_url_decode($encoded_sig); 
    $data = json_decode(base64_url_decode($payload), true); 

    if (strtoupper($data['algorithm']) !== 'HMAC-SHA256') { 
    error_log('Unknown algorithm. Expected HMAC-SHA256'); 
    return null; 
    } 

    // check sig 
    $expected_sig = hash_hmac('sha256', $payload, $secret, $raw = true); 
    if ($sig !== $expected_sig) { 
    error_log('Bad Signed JSON signature!'); 
    return null; 
    } 

    return $data; 
} 

function base64_url_decode($input) { 
    return base64_decode(strtr($input, '-_', '+/')); 
} 

$arr = parse_signed_request($_POST["signed_request"], "YOUR_APP_SECRET"); 

echo print_r($arr); 

也许你可以使用$ ARR [“页”] [“ID”]知道哪个页面访问你的应用程序。

你可以阅读更多有关在这里:

http://developers.facebook.com/blog/post/462/

http://developers.facebook.com/docs/authentication/signed_request/

希望它能帮助!

+0

嗨拉斐尔 - 谢谢你的答案。我完全了解已签名的请求和页面标识,但是我如何将其与设置关联起来,因为页面标识不是*发送到主应用程序页面,在那里我有设置。是否有另一种方式来做设置或类似的? –