第三方登錄是現在app很常用的功能,而這個功能我已經寫過兩三次了。。。每次都寫大同小異的代碼真的是很痛苦,而且每次都要根據說明去添加那些依賴庫,配置linkFlag什么的,完全是體力活,所以一直想把這部分代碼封裝一下,方便以后復用。
然后受
DWZShareKit的啟發,想到可以用cocoaPods來添加依賴庫,完成配置,所以趕緊把之前的想法付諸行動,寫了個集成第三方登錄的庫。
具體如何使用及注意事項我已經寫在工程的readme里面了,這里來說點其他的。
(說一鍵集成是誇張的修辭手法啦,申請appKey填寫scheme什么的工作還是少不了的啦~)
一,思路
CocoaPods如何完成配置,如何工作的咱還沒搞懂,所以只能說說我這里是怎么使用的
問題的關鍵就在
LXMThirdLoginManager.podspec 這個文件中,
.podspec 中有一些描述用的代碼
s.libraries 表示這個pod依賴的 蘋果官方的庫,也就是類似libstdc++.a ,libsqlite.a 等等的a文件;
s.vendored_libraries 就表示用戶自己的a文件,比如新浪微博SDK的libWeiboSDK.a ;
s.frameworks 表示pod依賴的 蘋果的framework, 比如 UIKit,SystemConfiguration等等
s.vendored_frameworks, 表示pod依賴的自己的framework,比如qqSDK的TencentOpenAPI.framework;
(其他的就不一一列舉了,具體的看CocoaPods的官網:
https://cocoapods.org/about)
(另外一個貌似是文檔的參考地址:
http://www.rubydoc.info/github/CocoaPods/Core/Pod/Specification/DSL)
利用這些,把第三方登錄SDK所依賴的文件全部加入這個pod中,那CocoaPods在加載這個pod的時候,就會順便把第三方登錄所依賴的庫一起加載進去了。這樣就不用我們每個工程都配置一次了~~~
CocoaPods會自動加入-ObjC的linkerFlag,這是方便呀~~
不過這樣也有壞處:
1是各個SDK更新之后這里不會第一時間知道,也就沒辦法第一時間更新;
2是因為把各個SDK的文件都包含到了這個pod中,導致這個pod文件很大(大概6M),install的時候會比較耗時間,尤其是網速不給力的話,可能會pod不下來。。。
3是提供的方法比較單一,如果要其他功能還需要自己開發
但是這個庫最大的目的是省我們配置的時間呀!!!想到這里我對它還是比較滿意的。
二,代碼實現
就代碼的實現來說,這里是想應用下類似工程模式的設計模式,不知道用的對不對。。。
反正就是:
用一個統一的管理器(LXMThirdLoginManager)作為外部調用的統一入口,
內部為各個登錄類型分別寫一個helper類(這些類提供統一的調用接口),完成各自的登錄邏輯,
再統一回調manager的方法返回結果(統一的result類)。
這樣外部調用起來就很簡單了,而且如果需要擴展的話,只需要新加一個登錄類型和一個helper類,完全不影響其他類型的使用。
再具體的就看代碼吧,這個東西還是至少要自己實現一邊才能弄明白的。
三,吐槽
1,新浪微博必須得工程的bundleID和在其開發平台注冊的bundleID一致才能登陸。。。新寫個demo還得改下bundleID好麻煩。。。
2,微信創建的移動應用居然要資格認證過了才有登陸權限,認證一下300塊還只管用一年,完全不讓自己注冊個玩啊。。。。
3,qq資格認證居然還要上傳身份證照片,要身份證就算了吧還要正反面都要。。。
4,qq貌似得在info.plist文件中添加bundleDisplayName,我沒寫貌似也沒事。。。這是文檔太久了?
5,demo里沒有可用的appKey和appSecret什么的真不能怪我呀,自己的不能用又不能泄露公司的。。。
6,體力活好累人呀。。。看文檔也是個體力活。。。