天天看點

iOS App接入Facebook登入實踐

接入Facebook登入真的好友善,不需要像微信登入那樣還要做開發者資質認證。參考下面這兩篇文章就可以搞明白怎麼操作。

  1. 在iOS工程中內建facebook第三方登入
  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做登入。

iOS App接入Facebook登入實踐
iOS App接入Facebook登入實踐

使用者授權之後,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字元串。

iOS App接入Facebook登入實踐

更多關于

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。

iOS App接入Facebook登入實踐

Facebook登入簡化了擷取token的流程,使用者授權完成之後,傳回source App,直接把URL交給FBSDKApplicationDelegate把後續流程全部完成了。微信登入則需要開發者自己走完OAuth 2.0所有的流程,并且負責token的重新整理。

參考資料。

  1. iOS微信第三方登入實作
  2. OAuth2.0實戰1(分析簡書的微信登陸及實作)
  3. 移動應用微信登入開發指南
  4. 【譯】JSON Web Tokens (JWT) 與 Sessions