在Google App Engine上托管的Facebook应用程序

3

我是Facebook应用的新手,我已经在GAE上开发了一个应用程序(使用python语言)。我想将其与Facebook集成,以便访问一些用户的数据,帮助我个性化应用程序(例如喜欢的页面、兴趣、所在地等数据),并分享应用程序的输出给朋友。

我打算在https://developers.facebook.com/上选择Facebook应用程序选项。

我不知道从哪里开始,有一些教程(大多数都非常古老,有些使用已弃用的脚本,因此有点令人担忧),还有FBML...我想也许我只需使用Facebook登录,然后使用FQL访问这些数据即可获得相同的数据。

而且我也不知道是否会遇到新的https限制问题(Facebook表示,自2011年10月起需要具有SSL证书)。

所以归根结底...我应该从哪里开始?


你可能想看一下这个问题:http://stackoverflow.com/questions/8675810/understanding-runwithfriends-facebook-app-sample-code/8682790 - Niklas Rosencrantz
3个回答

3
这里我们来看一下:
从这个链接下载:https://github.com/jgorset/facepy/tree/master/facepy:
下载后,你将会得到以下文件:
signed_request.py 用于解析 Facebook 在你的 Canvas URL(https://apps.facebook.com/myapp)以 POST 方法发布的 signed_request。
graph_api.py 用于对 graphapi 进行操作。参见https://developers.facebook.com/docs/reference/api/
注意:你需要在 cookies 中包含 Facebook JS SDK 写入的 access_token。
有关 FB JS SDK,请参见此答案:https://dev59.com/3F7Va4cB1Zd3GeqPLZ6S#8625873 的 JavaScript 部分。
在你的首页中:
fb_app_secret='abcd...'
fb_app_id = 123345
def index(request):
    if request.POST:
        signed_request_param = request.POST.get('signed_request)        
        if signed_request_param:  
            #signed_request.py 
            signed_request_dic = signed_request.parse_signed_request(signed_request_param, fb_app_secret)
             if signed_request_dic:
                if signed_request_dic.has_key('user_id'): 
                    fb_uid = signed_request_dic['user_id']
                    #you got your man that is previously authorized your fb app : mypp

在后续的调用中,您将使用我上面提到的 cookies。
def my_page(request):
    my_dict = None
    my_dict = signed_request.get_user_from_cookie(request.COOOKIES, fb_app_id, fb_app_secret)
    if my_dict:
        if my_dict.has_key('uid'):            
            fb_uid = my_dict['uid']
            fb_uid = int(fb_uid)
            #you got your registered user again.

注册的最简单方式是使用FB JS SDK,我已经提到了。
#finally for SSL, in your app.ymal:

- url: .*
  script: django_bootstrap.py
  secure: optional 

不要忘记为Internet Explorer设置P3P,以解决iframe cookie问题。
def my_page(request):
    ....
    response = render_to_response('mypage.html', view_params )
    response["P3P"] = 'CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"'   
    return response 

2

-2
  1. 为您的Web服务器购买SSL证书,以便符合新规则。
  2. 创建/设置您的应用程序以获取应用程序ID和密钥。
  3. 学习JavaScript SDK,我个人认为它是最容易实现的。
  4. 学习Graph API并了解对象及其属性以及它们之间的连接。
  5. 您可以在此处使用JS SDK进行测试:https://developers.facebook.com/tools/console/,Graph API在此处:https://developers.facebook.com/tools/explorer
  6. 在Web服务器上逐步引入代码。首先使身份验证工作,然后继续获取基本用户信息。

AppEngine不支持自定义服务器或客户端证书。 - Peter Knego
JavaScript 可以在 FB 客户端流程身份验证中使用。但是 OP 需要基于服务器的身份验证。 - Peter Knego
1
@Peter,你所要做的就是通过JS SDK获取令牌并进行AJAX处理。很抱歉AppEngine非常有限,甚至不允许SSL。我建议你找一个新的开发平台,因为SSL现在已经成为Facebook应用程序的半个“必备条件”。 - DMCS
所以,客户端通过JS从FB获取令牌,然后将其传递给GAE服务器?这样做不好,因为在这种情况下,GAE必须信任客户端。在互联网上永远不应该信任客户端。这就是Facebook(以及OAuth总体上)具有服务器端身份验证流程的原因。 - Peter Knego
2
此外,GAE 具有 SSL 功能,但不支持自定义证书。每个 GAE 应用程序都由 Google 提供完全有效的服务器证书。 - Peter Knego

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接