第三方登录是现在app很常用的功能,而这个功能我已经写过两三次了。。。每次都写大同小异的代码真的是很痛苦,而且每次都要根据说明去添加那些依赖库,配置linkFlag什么的,完全是体力活,所以一直想把这部分代码封装一下,方便以后复用。
然后受DWZShareKit的启发,想到可以用cocoaPods来添加依赖库,完成配置,所以赶紧把之前的想法付诸行动,写了个集成第三方登录的库。
地址在这里:https://github.com/Phelthas/LXMThirdLoginManager
具体如何使用及注意事项我已经写在工程的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,体力活好累人呀。。。看文档也是个体力活。。。