手游如果支持facebook登录,就要接入facebook的登录SDK。刚好工作中自己做了这一块的接入功能现在记录分享下来提供一个参考。

当前只是接入了登录这个功能,先简单的说说接入facebook登录的一个流程。客户端通过玩家输入的用户名和密码向facebook发起登录的请求,请求登录如果成功那么就会返回一个token(口令)。那么服务器这边就需要接收客户端发来的这个token,然后服务器端这边还需要一个access_token(这个token就是验证服务器端有没有权限访问facebook的API)向facebook发起验证请求,请求成功则需要通知客户端登录验证成功允许登录游戏,否则登录失败。

服务器端发送https get请求格式如下(注意是https):

graph.facebook.com/debug_token?input_token={token-to-inspect}&access_token={app-token-or-admin-token}

该端点使用以下参数:
•input_token。您需要检查的口令。(客户端发送过来的token)
•access_token:应用访问口令,或者应用开发者的访问口令。

input_token就是客户端发送给服务器端的token。

这里access_token是将应用编号和应用密钥当作 access_token 参数(应用编号和应用密钥是开发者向facebook申请接入应用的编号和密钥)。

正确访问形式是(这个是期中的一种方式,access_token可以不用app_id|app_scret直接用获取到的access_token,至于如何获取可以参考官方文档):
https://graph.facebook.com/debug_token?input_token={token-to-inspect}&access_token={app_id|app_secret}

app_id|app_secret 类似与这样:539325719526077|4012ab84f52253939ae6a3abb3b0be35

成功返回如下字符串(具体字段含义参考官方的文档):

"{"data":
 {"app_id":"539325719526077",
 "application":"Dynasty Blades",
 "expires_at":1469279745,
 "is_valid":true,
 "issued_at":1464095745,
 "metadata":{"auth_type":"rerequest"},
 "scopes":["public_profile"],
 "user_id":"687980841341627"
 }
}"

失败返回如下类似的字符串(具体字段含义参考官方的文档):

"{"data":
 {"error":
  {"code":
   190,
   "message":"Invalid OAuth access token."
  },
  "is_valid":false,
  "scopes":[]
 }
}"

具体的详情参考官方指南:

https://developers.facebook.com/docs/facebook-login/access-tokens/
https://developers.facebook.com/docs/facebook-login/access-tokens#apptokens

05-11 20:57