总结几个常用的Mac软件下载网址,以备不时之需。作为开发者,我还是强烈建议大家使用正版软件的。 更多 >>
欢迎光临~いらっしゃいませ~ (笑)
集成第三方的东西虽然很简单,但是如果出现了一些编译上的错误,作为菜鸟是很难处理的。而最简单有效的处理方式就是把第三方的SDK全部移除再重新添加,错误就神奇的消失啦~
之前公司技术总监因故放弃了使用友M去管理第三方SDK,采取直接去第三方平台下载SDK集成的方式,导致项目里的SDK管理混乱。那么可不可以不使用第三方的SDK来实现第三方平台的分享、授权、支付等操作嘞?那就请猴王MonkeyKing来收服这些SDK吧~
其实官方demo里面的例子讲的很清楚了,但是自己动手按照自己喜欢的方式封装一下内部方法,用起来也舒服些~
操作环境:
xcode 8.2.1
swift 3.0
新建一个xcode项目,使用CocoaPods导入MonkeyKing。
1 | # Uncomment the next line to define a global platform for your project |
先从第三方分享开始吧~
打开项目,先根据自己的需求配置一下第三方平台的URL Type(微信,qq,微博等等)。
1.我们创建一个工具类thirdParty.swift来统一管理第三方的业务逻辑。
先按照自己的需求,定义一些枚举方便使用。1
2
3
4
5
6
7
8
9// 分享类型
enum shareType {
case weChatSession
case weChatTimeline
case weibo
case qqFriend
case qqZone
case other // 占位用
}
1 | // 第三方平台类型 |
2.我们给工具类定义一个注册第三方账号的类方法,这个方法我们可以在app启动时就调用,或者在你需要使用第三方之前调用。第三方的App key 和App ID、回调地址,我们可以在该工具类里面定义一些常量来管理,这里不再赘述。1
2
3
4
5
6/// regist third account
class func registAccount() {
MonkeyKing.registerAccount(.weChat(appID: "xxxxxxx", appKey: "xxxxxxx"))
MonkeyKing.registerAccount(.weibo(appID: "xxxxxxx", appKey: "xxxxxxx", redirectURL: "xxxxxxx"))
MonkeyKing.registerAccount(.qq(appID: "xxxxxxx"))
}
通常我们就在app刚启动时调用这个方法吧~1
2
3
4
5func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// regist third account
thirdParty.registAccount()
return true
}
3.如果我们还需要处理第三方的回调,那么我们还需要在AppDelegate里面添加以下处理。
1 | // iOS 10 |
同常我们需要分享的内容包括文字、图片、链接、视频、音频。在这里我只是把常用的文字、图片、链接分享处理一下,音视频一般不太用的到,如果需要的话,大同小异。
首先我们在thirdParty里面增加一个内部使用的方法,实际上就是封装了MonkeyKing的内部方法,方便我们使用。分享文字、图片和链接时所封装的方法内部都会用到这个方法,不需要暴露给外界,所以方法加了fileprivate关键字
1 | fileprivate class func shareInfo(_ info: MonkeyKing.Info, shareType: shareType) { |
分享文字的话,其实方法参数里只留下text就可以,博主因为强迫症,各个方法都想要长得一样。。。所以用不到的参数也加上了。。。额。。。
1 | class func share(text: String?, title: String?, description: String?, shareType: shareType) { |
分享图片的话有一点是需要注意的。第三方对图片的缩略图大小是有限制的,通常是不能大于32kb(32768b),所以需要对传入的待分享图片的缩略图进行处理。
我们先增加一个UIImage类的扩展,用于压缩图片体积,备用。这个方法比较简单粗暴,如果有更科学的方法,大家请分享一下。
1 | extension UIImage { |
然后我们依旧在thirdParty里面增加一个内部使用的方法,来压缩图片缩略图。这里的3000是指32kb(32768b),博主强迫症,非得弄个整数不可。
1 | fileprivate class func compress(thumbnail: UIImage) -> UIImage? { |
最后,我们进行图片分享
1 | class func share(image: UIImage?, thumbnail: UIImage?, shareType: shareType) { |
如果分享的链接需要配缩略图,缩略图也要符合尺寸的要求。
1 | class func share(url: String?, thumbnail: UIImage?, title: String?, description: String?, shareType: shareType) { |
我们先在thirdParty里定义一个闭包来处理第三方授权后返回的数据。
1 | public typealias completionHandler = (_ info: [String: Any]?, _ response: URLResponse?, _ error: Error?) -> Void |
然后。。。就用这个方法。
1 | // MARK:-OAuth |
在我们需要第三方授权的地方使用这个方法,并在回调里处理返回的数据。
例如微信:
1 | thirdParty.OAuth(platformType: .weChat) { (dictionary, response, error) in |
关于支付这个地方,其实demo不太好处理。但是我依然稍微封了一个方法,就待优化吧。
我们先在thirdParty里定义一个闭包来处理第三方支付后返回的数据。
1 | public typealias payCompletionHandler = (_ result: Bool) -> Void |
然后。。。就用这个方法。传入的urlString是发起订单后server端返回的数据拼接出来的,这一点还是不太方便的。例如微信的订单(此处WXPayModel是用户根据后台返回数据自己定义的):
1 | let string = "weixin://app/\(WXPayModel.appid!)/pay/?nonceStr=\(WXPayModel.noncestr!)&package=Sign%3DWXPay&partnerId=\(WXPayModel.partnerid!)&prepayId=\(WXPayModel.prepayid!)&timeStamp=\(UInt32(WXPayModel.timestamp!))&sign=\(WXPayModel.sign!)&signType=SHA1" |
获取到订单信息后拼接为url,作为参数传入以下方法。
1 | // MARK:-Pay |
更详细的使用,请大家移步至MonkeyKing下载官方的demo来学习吧~
MonkeyKing由国人开发,目前由四个大牛程序员维护。不引入SDK,方便快捷,减少项目体积,大家有兴趣可以试试~
我的demo地址demo,因为分享、授权、支付等应用场景很多,所以demo里面并没有一一实现,仅仅提供该thridParty工具类以及相关类扩展。有什么疑问或建议,请留言~
最后,祝大家新年快乐~
动漫人物:2016/7月番《new game》 凉风青叶 八神光
B站:http://bangumi.bilibili.com/anime/5027
tag:
缺失模块。
1、请确保node版本大于6.2
2、在博客根目录(注意不是yilia根目录)执行以下命令:
npm i hexo-generator-json-content --save
3、在根目录_config.yml里添加配置:
jsonContent: meta: false pages: false posts: title: true date: true path: true text: false raw: false content: false slug: false updated: false comments: false link: false permalink: false excerpt: false categories: false tags: true