iOS App接入Facebook登录实践

作者: 阿呆少爷 | 来源:发表于2017-05-01 23:23 被阅读2046次

    接入Facebook登录真的好方便,不需要像微信登录那样还要做开发者资质认证。参考下面这两篇文章就可以搞明白怎么操作。

    1. 在iOS工程中集成facebook第三方登录,给出了一个非常好的demo。
    2. iOS集成facebook实现自动登录

    总结流程如下。

    1. 创建App,填写相关信息。
    2. Add Platform。如果是iOS App,需要设置Bundle ID。
    3. Make App public。

    接下来看看Facebook登录的一些细节。如果安装了Facebook App的话,那么唤起Facebook App授权,否则,在App里面打开SFSafariViewController登录和授权。SFSafariViewController真好用啊,gmail也通过SFSafariViewController做登录。

    Paste_Image.png Paste_Image.png

    用户授权之后,Facebook唤起App的URL如下。这里可以看到access token。

    fb1843069139350572://authorize/#state=%7B%22challenge%22%3A%22zrCrlaoLwdQkxNpNvA9ivqDs2UU%253D%22%2C%220_auth_logger_id%22%3A%22AB0468C8-74AF-43F9-B686-C7E8A63162E3%22%2C%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A%22sfvc_auth%22%7D
    &granted_scopes=public_profile
    &denied_scopes=
    &signed_request=215mSYcJpCpfvZkF3QgwjdritOcUnxLENxPORXL_n-0.eyJhbGdvcml0aG0iOiJITUFDLVNIQTI1NiIsImNvZGUiOiJBUUFHLWhSdFFxSUFRclA3UTRTZmEwNTQ1bmF3RlZZNjFxdGVicWljMkpNRG9WcUdQTTB0ME1qU0xqR01wcFZTektEcUM3d0ZNV1NfX05RR1Fid0F6QXpESmtsSjh3ckNEVVhvX1BsbERCRzZ0OU9KR09BaVFkYnNVVTFWMzZQNklPODJsQll4RDNHNzE5LTBZNlUtLXY1Q2xGMzJRejdLaXo5eE9YX214cVZySmNvc2JXVC1ib0pxeENBd2oxdVVuUUk2WTFkcV9kZ1d0T252eHRHZmtBc2E0LUV4VTdjeVRCMmE4bVk1SUt3ZFg4S0Z0M2lkYmZNbEFWNzJIZHBmejNzbEU2LXZJZndaX1JPUDVEV3F1THV6SC1ObGt5cENhZEFIekZSdjdzTEt2MWdKUVB6R1JxUVJWb1hhT09jS0Fsd25KakpQcktfX0R2X3ZrV2Vrc2tlaUZUcHNLYVdmbjNjanhCYUVnMEhhdFRtbnB5eWFPMUpCcWRDR1IyNU4xc296cnFLbjNXM2dPRHFURlpUY3ZXaFciLCJpc3N1ZWRfYXQiOjE0OTM2NTEyMDYsInVzZXJfaWQiOiIxMzg2NDA4OTExNDA1Nzk2In0
    &access_token=EAAaMQvlY9CwBAK3S9ik33QvokMlZCwCx3ZBsPVR240AJXOwU0BTv304mdr4Qf5W7UMoJv15tWyfM75zrM3GZC2KEDcYWoZB4pduoMyWxh0fK3cTrFzLeQVOZC9RKWR6QZC82LovWGaV6Ye9zeNx5TPRXtMCeX9qH1G6NYZBJyXcNqBdTJlh4RLV0IJFsX87V5SmmoU0Lm0ZC4pwZBzVtio1pKtrupJJGKwP4ZD
    &expires_in=5183508
    &e2e=%7B%22init%22%3A377554.65378193%7D
    

    上面URL里面有一个很有意思的字段,那就是signed_request,这个字符串的格式是:signature+.+base64url(JSON payload),这不是一个标准的JWT。在 https://jwt.io/ 里面可以decode出来,payload就是一个普通的JSON字符串。

    Paste_Image.png

    更多关于signed_request字段的介绍可以参看Facebook的文档:https://developers.facebook.com/docs/reference/login/signed-request

    最后App里面使用的token如下所示。access token跟上面URL里面的是一样的。token里面也是没有refresh token的。fbsdk提供了FBSDKAccessTokenDidChangeNotification通知用于告知用户access token发生了变化,用户并不需要关心access token的更新。作为一个登录SDK,确实也没有必要暴露refreshToken。

    Paste_Image.png

    Facebook登录简化了获取token的流程,用户授权完成之后,返回source App,直接把URL交给FBSDKApplicationDelegate把后续流程全部完成了。微信登录则需要开发者自己走完OAuth 2.0所有的流程,并且负责token的刷新。

    参考资料。

    1. iOS微信第三方登录实现
    2. OAuth2.0实战1(分析简书的微信登陆及实现)
    3. 移动应用微信登录开发指南
    4. 【译】JSON Web Tokens (JWT) 与 Sessions

    相关文章

      网友评论

      • fly大梦想家:为何登录不能直接唤起facebook,非得在网页上选择吗?
        阿呆少爷:@fly大梦想家 你要检查一下Demo App的LSApplicationQueriesSchemes配置是否加上了Facebook App的schema。如果没有的话,canOpenURL就不能正常工作,那么就会打开网页来授权🙃
        fly大梦想家:@阿呆少爷 ios11.3不唤起,你试试你那现在还能唤起吗?
        阿呆少爷:如果手机上已经安装了Facebook客户端的话,会优先唤起客户端授权的。
      • 杨鹏_小宝:请问SUCcache 是什么? 获取token用到这个类?
      • biny_ios:作者有集成分享吗?看sdk还没支持swift3.0
        阿呆少爷:@焱火火By OC写的库自然就支持Swift 3.0了吧

      本文标题:iOS App接入Facebook登录实践

      本文链接:https://www.haomeiwen.com/subject/ytwqtxtx.html