我们已经知道如何和官方客户端通信了,通过hook也知道通信格式了。下面就是对这些平台进行封装。有一些基本要求:
- 因为我们并不知道OpenShare到底要支持多少平台,所以必须提供扩展机制。
- 必须有全局的保存appKey等变量的地方,可以考虑单例模式或类变量。
- 分享、登录完成以后,要方便回调,可以考虑block。
对于objc基本上有两种思路:继承(subclass)和类别(category)
用继承的话,就是做一个OpenShare的基类,然后各个平台的调用用子类实现,但是这样的话,调用的地方需要先实例化,然后调用对象方法,或者需要调用不同的类的类方法,略有不便。最后我选择了用category,每个平台都去扩展OpenShare的类方法,这样OpenShare就变得越来越完善,支持的平台越来越多。
另外,还需要封装OpenShare和官方客户端通信的message,也就是OpenShare中的OSMessage
类,保存OpenShare向客户端发送的消息。分享的消息基本上有以下几种情况:
- 纯文本
- 图片
- 链接
- 其他格式多媒体(声音、视频、文件等)
这样对应OSMessage中的属性:
比如一个文本消息,可以只设置title,其他不管;发送一个图片,只需要设置image/thumbnail/title/desc,其他不用设置。对于其他多媒体消息,可以用multimediaType来标示。所以OSMessage可以封装所有app向客户端发的各类分享请求。
另外,还需要解决的是,客户端分先完成以后回调app的功能。我们熟悉的是block方法。而不是每个平台都到application:openURL:sourceApplication:annotation:中判断。比如最好是这样的:
#如何使用
第零步: 修改Info.plist
添加URLSchemes
,让客户端可以回调app
第一步:到AppDelegate
中的application:didFinishLaunchingWithOptions:
中全局注册appId/appKey
第二步:到AppDelegate中
的application:openURL:sourceApplication:annotation:
中添加整体回调:
第三步:在需要分享、OAuth的地方调用:
#扩展支持更多平台
现在的社交网络各种各样,如何把这些平台集成到OpenShare中呢?就像插件一样,可以把自己实现的OpenShare+foobar.h
和OpenShare+foobar.m
添加进来就可以了。这里提供了一个模板工具,只需要输入你想扩展的平台的名称,就会自动生成.h
和.m
文件,然后基于这个模板修改即可。