公司的业务和海外贸易紧密连接,项目中需要对接Facebook、Google、Twitter相关API,下面详细描述一下我们对接Facebook中遇到的问题
1,注册Facebook账户,Facebook账户注册还是比较麻烦的,有IP限制,一个IP不能注册多个账户,很容易被封。注册完之后会有身份审核过程,这个过程尽量用真实身份,审核成功后就可以申请成为Facebook开发者了。
2,成为Facebook开发者之后,创建应用,获取应用编号和应用密钥,完善邮箱等官方需要提供的信息
3,完成公司验证,签署合同条款
4,创建测试帐号,项目需求需要的可以多创建几个测试帐号,互相加为好友
测试帐号可以在本地开发中使用,没有任何权限限制,所有的功能模块都可以通过测试帐号实现,在功能开发完成后,部署到一台线上的测试环境进行Facebook的审核,线上域名必须添加SSL加密
5,添加Fackbook登录,Facebook登录API提供了SDK和图谱两种方式进行登录,在实际的开发中两者需要结合进行开发,我们是用下载的PHP版本的SDk, 使用 Composer来获取依赖包,建议不要使用Git去拉取代码,可能有些依赖包需要手动去安装,避免出现目明其妙的报错,下面是官方提供的SDK
https://developers.facebook.com/docs/reference/php
6,添加Fackbook登录需要创建应用程序
这里添加有效跳转URI,这里的跳转链接是在功能完善后,部署到线上环境提交给facebook审核需要的,本地测试不需要,例如本地locahost:8080是无法添加跳转URI的
Facebook官方要求提供退出登录取消授权入口,至于这里的数据删除请求网址,笔者发现不是必须的,所以提供退出入口即可,以免审核不通过
7,Facebook 权限列表
https://developers.facebook.com/docs/facebook-login/permissions/
依据项目需求进行合理的申请,用不到的权限不要申请,如果项目需要用到的权限比较多,尽量一次申请不超过2个权限
申请的步骤:
1,添加申请理由, 就是描述一下项目如果使用这个权限和为用户带来哪些作用,尽量用英文描述,因为审核的平台是美国Facebook的客服,是看不懂中文的!
2,录屏,这里需要用到录屏软件,官方有推荐 https://www.apowersoft.cn/free-online-screen-recorder 很好用的一款录屏软件
3,提交申请,Facebook的审核时间还是很及时的,一般不超过3天,两个工作日差不多就给回复了,只不过给到的回复太过于官方了,不够详细,需要多花点时间琢磨!
这里是我们申请成功的权限,新手第一次对接,感觉太南了,太南了。。。
8,这里总结一下,顺便吐槽一下Facebook的API, 没有Google写的详细,有些功能没有,API也没声明,遇到很多坑,折腾了好久,最好打听到是因为隐私政策不予给出,MMP。。。
最后提一下这里用到的 OAuth授权流程,没有接触过的同学先去了解一下,我这里大概说一下。
通过之前创建的应该,可以获取应用编号和应用密钥,通过这两者获取到一个有效期为3个月的token, 每次请求Facebook API的时候必须带着这个token去获取一个临时token,然后通过这个临时token再进行请求最后的接口数据
这里我贴一下php相关代码
授权登录和获取临时访问口令:
1 $appId = facebook appId; 2 $appSecret = facebook appSecret; 3 $callbackUrl = facebook callbackUrl; 4 $fb = new Facebook\Facebook([ 5 'app_id' => $appId, 6 'app_secret' => $appSecret, 7 'default_graph_version' => 'v2.10', 8 ]); 9 10 $helper = $fb->getRedirectLoginHelper(); 11 try { 12 $accessToken = $helper->getAccessToken(); 13 } catch(Facebook\Exceptions\FacebookResponseException $e) { 14 echo 'Graph returned an error: ' . $e->getMessage(); 15 exit; 16 } catch(Facebook\Exceptions\FacebookSDKException $e) { 17 echo 'Facebook SDK returned an error: ' . $e->getMessage(); 18 exit; 19 } 20 21 if (! isset($accessToken)) { 22 if ($helper->getError()) { 23 header('HTTP/1.0 401 Unauthorized'); 24 echo '请检查账号设置,Facebook账号无法获得授权,详情:' . $helper->getError() . ' ' . $helper->getErrorCode() . ' ' . $helper->getErrorReason() . ' ' . $helper->getErrorDescription() . "\n"; 25 } else { 26 header('HTTP/1.0 400 Bad Request'); 27 echo 'Bad request'; 28 } 29 exit; 30 } 31 32 $accessToken = $accessToken->getValue(); 33 $oAuth2Client = $fb->getOAuth2Client(); 34 $tokenMetadata = $oAuth2Client->debugToken($accessToken); 35 $tokenMetadata->validateAppId($appId); 36 $tokenMetadata->validateExpiration(); 37 38 $appId = $tokenMetadata->getField('app_id'); 39 $type = $tokenMetadata->getField('type'); 40 $userId = $tokenMetadata->getField('user_id'); 41 $application = $tokenMetadata->getField('application'); 42 $isValid = $tokenMetadata->getField('is_valid'); 43 $expiresAt = $tokenMetadata->getField('data_