FAQ
出自YiqiWiki
目录 |
一起的F8 开放平台与FaceBook的开放平台的关系
- 一起F8开放平台是一个兼容FaceBook F8开放标准的开放平台。本平台与FaceBook 开放平台逻辑架构完全相同,你可以完全使用FaceBook F8标准的任何技术,如 API, FBML, FQL,FBJS等来构建自己的应用。一起平台的开放接口与FaceBOOK的 F8完全一致, 包括API命名,FBML的名称空间, FQL的语法, FBJS的对象与使用方式等。
- 一起F8开放平台是在FaceBook Open Platform 的基础上开发的。对于FaceBook F8的标准的各部分,一起都支持。但出于一起自身的考虑,我们也保留了一些客观限制,集中在我们对FBML,API,FQL的支持都有一定的范围限制(参见相应的说明)。在将来我们可以逐步去掉那些限制,并保证不影响现有的应用。
我开发的应用可以同时支持一起与FaceBook吗
- Web应用都可以,不过你需要检查一起不支持的部分是否影响你的功能。
你需要对应用做少量改动:
- 如果你的应用用php开发,改动方法是:
- 你要下载一起的开发包,并解压到原来存放facebook开发包的目录下;
- 在你的代码中原来包含 "facebook.php"的地方修改为:
if ($_REQUEST['__FROMYIQI__'] == 1) require_once 'yiqi.php'; else require_once 'facebook.php';
- 如果你的应用用其他WEB技术开发,我们目前没有提供开发包,你调用一起API时需要用F8 REST API的方式访问下述地址:
http://f8.yiqi.com/api/restserver.php
FBML应用的工作流程
假设你的应用基本状况如下:
应用名称: hello 应用APIKEY: 12345678abcdef 应用在一起上的CavasURL: http://f8.yiqi.com/hello/ 应用的起始地址: http://f8.yiqi.com/hello/index.php 应用的CabackURL: http://www.foo.com/hello/
下面是这个应用的一般工作流程:
- 用户点击应用的图标,浏览器访问 f8.yiqi.com/hello/index.php
- 平台计算出应用名称为hello, apikey为12345678abcdef, CabackURL为www.foo.com/hello/
- 平台向 www.foo.com/hello/index.php发送POST请求,POST中包含的数据如下:
fb_sig_in_ifram=0
fb_sig_in_canvas=1 or 0
fb_sig_api_key=12345678abcdef
fb_sig_session_key=yoursessionkey
fb_sig_time=currenttime
fb_sig_user=currentuserid
__FROMYIQI__=1
fb_sig=所有参数的一个安全签名值 - 应用在www.foo.com/hello/index.php中收到这个请求,利用一起的开发包解析出参数,以便调用一起的API(方法参见#如何开发我的应用)。
- 应用在www.foo.com/hello/index.php中调用一起API或调用自己的业务逻辑,返回一段包含FBML片段与HTML片段的代码。
- 平台将上述过程返回的代码交给FBML分析器,转换为相应功能的HTML代码,输出给浏览器。
- 用户在上述结果页面中执行操作,该操作访问新的url,如 new.php.
- 浏览器计算出这个url的全路径为f8.yiqi.com/hello/new.php,向这个url发送请求。
- 回到步骤2,执行后续过程,区别点是:
以后的步骤中index.php用new.php代替;
POST参数中也包含本次请求提交的参数(如果有的话)。
IFRAME应用的工作流程
假设你的应用基本状况如下:
应用名称: hello 应用APIKEY: 12345678abcdef 应用在一起上的CavasURL: http://f8.yiqi.com/hello/ 应用的起始地址: http://f8.yiqi.com/hello/index.php 应用的CabackURL: http://www.foo.com/hello/
下面是这个应用的一般工作流程:
- 用户点击应用的图标,浏览器访问 f8.yiqi.com/hello/index.php
- 平台计算出应用名称为hello, apikey为12345678abcdef, CabackURL为www.foo.com/hello/
- 平台生成一个IFRAME代码, src 为:
www.foo.com/hello/index.php?fb_sig_in_ifram=1&fb_sig_in_canvas=1 or 0&fb_sig_api_key=12345678abcdef&fb_sig_session_key=yoursessionkey&fb_sig_time=currenttime&fb_sig_user=currentuserid&__FROMYIQI__=1&fb_sig=所有参数的一个安全签名值 - 应用在www.foo.com/hello/index.php中收到这个请求,利用一起的开发包解析出参数,以便调用一起的API(方法参见#如何开发我的应用)。
- 应用在www.foo.com/hello/index.php中调用一起API或调用自己的业务逻辑,返回一段HTML代码(不能包含FBML,也不能使用FBJS)。
- 用户在上述结果页面中执行操作,该操作访问新的url,如 new.php.
- 浏览器计算出这个url的全路径为www.foo.com/hello/new.php,向这个url发送请求。
- 应用编写时必须保证向这个url发送请求时要追加步骤3中的参数,否则new.php中不能使用一起的API)。
- 回到步骤4,执行后续过程,区别点是:
以后的步骤中index.php用new.php代替;
请求参数中也包含本次请求提交的参数(如果有的话)。
如何开发我的应用
- 首先你需要阅读一起的开发文档,地址 http://f8.yiqi.com/wiki
- 仔细阅读创建您第一个应用
- 下载一起的开发包
- 下载一起的应用样例
- 打开样例中的appinclude.php文件,内容如下:
<?php if ($_REQUEST['__FROMYIQI__'] == 1) require_once 'yiqi.php'; else require_once 'facebook.php'; $appapikey = 'aaaaaaaaaaaaaaaaaaaaaaaaa'; $appsecret = 'bbbbbbbbbbbbbbbbbbbbbbbbb'; $facebook = new Facebook($appapikey, $appsecret); $user = $facebook->require_login(); $failbackurl = 'http://www.yi.com/login.php'; //catch the exception that gets thrown if the cookie has an invalid session_key in it try { if (!$facebook->api_client->users_isAppAdded()) { $facebook->redirect($facebook->get_add_url()); } } catch (Exception $ex) { //this will clear cookies for your application and redirect them to a login prompt $facebook->set_user(null, null); $facebook->redirect($failbackurl); } ?> - 将其中的$appapikey与appsecret为你的应用的 apikey 与secret(可以在应用的属性页中看到)
- 修改index.php或添加你的新功能页(每个功能页都需要像样例那样包含appinclude.php), 调用一起的API。示例如下:
<?php require_once 'appinclude.php'; echo "get friend list:<br>"; try { $rs = $facebook->api_client->friends_get(); print("<pre>"); echo "total count:".count($rs)."<br>"; echo "list as follow:<br>"; print_r($rs); print("</pre>"); } catch (FacebookRestClientException $ex) { echo $ex->getMessage(); } echo "<br><br><br><br>"; ?> - 测试你的应用
不是php开发的应用如何调用API
一起网已经提供了PHP的开发包,你可以用开发包,结合样例程序的用法调用一起的API。PHP开发包的用法屏蔽了REST 调用方法的一些与方法无关,但是每次调用都要使用的参数。如果你的应用不是PHP的,可以按照下面方法(以users.getInfo举例):
1 先看API中user.getInfo的用法说明
2 准备一个关联数组,包含API users.getInfo中要求的参数(sig除外)
3 给这个关联数组增加一个元素,名为method,值为facebook.users.getInfo(其他方法以此类推)
4 给这个数组中的参数签名:签名方法为:
A 现将数组排序,排序为字典序
B 将数组转换为字符串,转变方法为key1=value1key2=value2key3=value3形式。对于方法users.getInfo, 形式为
api_key=yourapikeycall_id=yourecallidmethod=facebook.users.getInfosession_key=yoursessionkey 以及其他参数
其中yourapikey是你的应用的key, yoursessionkey 是传给你的session
注意其中的方法都要加上facebook.做为前缀。
C 将上述串再追加上你的 api secretkey
D 用MD5算出上诉串的MD5值,保留在2中的数组中,命名为sig
5 将这个数组转换为字符串,转变方法为key1=value1&key2=value2&key3=value3形式。
6 发送POST 请求给http://f8.yiqi.com/api/restserver.php, 请求的参数为上述字符串
如果你不安装上述方法做,可能会收到错误 Invalid Signare

