三方分享 cocoapods封装友盟

AhShare-冀银社交化分享组件


  • 适用于公司组件化开发,采用cocoapods控制组件版本,做到一次提交,多处可用。

写在前面的话

这里的组件或者叫做模块,严格来说就是pod库的制作,不能算是严格意义上的组件化开发,SO某些大神不必在此纠结。建立这些组件的目的在于组件服务化,将组件从app中解耦出来,统一开发,统一管理,统一修改。 我们提出这样一个畅想,在公司新上一个项目时,该项目的开发人员通过简单的配置,将所用到的功能模块集合到框架中去,开发人员不需要去关注组件内部具体的实现方式,只需要关注本项目的业务逻辑的实现,界面的跳转即可。当需要修改时,只需要专职人员将组件库修改并更新,各项目组直接update下就OK了。

一.为什么要做这类组件?
App是一个面向特定业务群体的产品化应用。 每一款app在业务逻辑上都具有独立性和特异性。但是就技术本身而言又具有很多通性和可复用性。比如网络层,数据缓存,数据解析,还有一些常用的业务组件,这些我们都可以拆分成一个个的功能组件(模块),这些组件能够独立升级,不影响引用组件项目的稳定性。同时这些组件省去了项目内开发人员引入依赖库的麻烦,用Xcode引入所有sdk的FrameWorks,个中酸爽只有搞过才会有体会。
二.为什么只是简单的封装pod库?
一来个人能力和精力有限,二来要考虑使用者的能力,如果采用注册表形式 通过openurl调取控制器, 去model化进一步解除对数据模型的依赖的话,那项目组的开发人员的学习成本会增大很多, 这与我们建设组件化的根本目的相违背,我们希望通过组件的逐渐完善,让初中级研发人员在开发过程中只关注于业务逻辑。提高整体开发效率,给公司带来的效益最大化。如果是一群大神只做一款产品,我也觉得后者的形式进行组件化开发会更好,可扩展性会更好,比如蘑菇街。
三.为什么只是简单的封装sdk?
如果只是学习的话,我觉得还是要扎下去,研究底层,公司开发的话,有2个因素决定封装现有的优良sdk, 时间成本和稳定性。

AhShare使用方法

1.通过cocoapods导入AhShare组件

pod 'AhShare', '~> 0.1.3'

2.编写AhShareSet.plist文件

文件可以从demo中获取,demo地址:https://github.com/ahao1011/AhShare.git 也可以直接下载

AhShareSet设置示意图
AhShareSet设置示意图

按照上图将申请的id和key填写到对应位置.
注意,该plist文件名称不能修改,若修改的话请在AhShareManager的+ (void)SetUmSocial类方法中对应修改掉


   NSString *plistPath  = [[NSBundle mainBundle]pathForResource:@"AhShareSet" ofType:@"plist"];;
   NSDictionary *dic = [NSDictionary dictionaryWithContentsOfFile:plistPath];   
}

3.配置SSO白名单

从iOS9开始,如果你的应用使用了SSO授权或者跳转到第三方分享功能,我们需要在项目的info.plist添加一个可跳转到白名单,不添加在跳转时canOpenURL会返回NO,授权或者分享功能不能正常实现,具体方法为右键info.plist文件选择source code打开,将一下文本复制到info.plist中去,注意打开时是以HTML展示的,不要插到节点内部里.

PS:
本打算通过代码处理,不用使用人员手工导入, 但是因为苹果针对info.plist做了特殊处理,代码实现了插入操作,打印log也确实看到插入进去了,但是info.plist文件就是没有体现,因为这个文件是只读的,苹果应该做了一些特殊的处理.

 <key>LSApplicationQueriesSchemes</key>
<array>
    <!-- 微信 URL Scheme 白名单-->
    <string>wechat</string>
    <string>weixin</string>

    <!-- 新浪微博 URL Scheme 白名单-->
    <string>sinaweibohd</string>
    <string>sinaweibo</string>
    <string>sinaweibosso</string>
    <string>weibosdk</string>
    <string>weibosdk2.5</string>

    <!-- QQ、Qzone URL Scheme 白名单-->
    <string>mqqapi</string>
    <string>mqq</string>
    <string>mqqOpensdkSSoLogin</string>
    <string>mqqconnect</string>
    <string>mqqopensdkdataline</string>
    <string>mqqopensdkgrouptribeshare</string>
    <string>mqqopensdkfriend</string>
    <string>mqqopensdkapi</string>
    <string>mqqopensdkapiV2</string>
    <string>mqqopensdkapiV3</string>
    <string>mqqopensdkapiV4</string>
    <string>mqzoneopensdk</string>
    <string>wtloginmqq</string>
    <string>wtloginmqq2</string>
    <string>mqqwpa</string>
    <string>mqzone</string>
    <string>mqzonev2</string>
    <string>mqzoneshare</string>
    <string>wtloginqzone</string>
    <string>mqzonewx</string>
    <string>mqzoneopensdkapiV2</string>
    <string>mqzoneopensdkapi19</string>
    <string>mqzoneopensdkapi</string>
    <string>mqqbrowser</string>
    <string>mttbrowser</string>

</array>


4.设置URL Scheme

如果想实现第三方app可以跳转到自己的项目app中来,就必须设置自身app的url scheme,这里使用第三方平台注册的appkey信息向系统注册你的app,流程以及设计规则参看下图, 参考了友盟的sdk文档

设置URL Scheme示意图

  • 配置第三方URL Scheme说明
平台 格式 举例 备注
微信 微信appKey wxdc1e388c3822c80b
QQ/Qzone 需要添加两项URL Scheme:1、"tencent"+腾讯QQ互联应用appID2、“QQ”+腾讯QQ互联应用appID转换成十六进制(不足8位前面补0) 如appID:100424468 1、tencent100424468 2、QQ05fc5b14 QQ05fc5b14为100424468转十六进制而来,因不足8位向前补0,然后加"QQ"前缀
新浪微博 “wb”+新浪appKey wb3921700954 m

5.实现分享与登录

5.1 AppDelegate设置

引入头文件

 #import "AhShare.h"

设置初始化

 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    
    
    [AhShareManager SetUmSocial];
    [AhShareManager openLog:YES];
    [AhShareManager usingWaterMark:YES];
    
    return YES;
}

设置系统回调

 //#define __IPHONE_10_0    100000
#if __IPHONE_OS_VERSION_MAX_ALLOWED > 100000
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey, id> *)options
{
    
    BOOL result = [AhShareHandle AhHandleOpenURL:url options:options];
    if (!result) {
        
        //  其他sdk的调用  例如支付宝支付
    }
    return  result;
}

#endif

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //6.3的新的API调用,是为了兼容国外平台(例如:新版facebookSDK,VK等)的调用[如果用6.2的api调用会没有回调],对国内平台没有影响
    BOOL result = [AhShareHandle AhHandleOpenURL:url sourceApplication:sourceApplication annotation:annotation];
    if (!result) {
        // 其他如支付等SDK的回调
    }
    return result;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    BOOL result = [AhShareHandle AhHandleOpenURL:url];
    if (!result) {
        // 其他如支付等SDK的回调
    }
    return result;
}

5.2 信息分享

AhShareInfo 是一个自定义的分享对象模型,需要先实例化该类一对象,将图片,标题,描述文字补充完整,通过AhShareManager的类方法showWithType: info:进行分享

  AhShareInfo *info = [[AhShareInfo alloc]init];
    info.title = @"hah";
    info.subTitle = @"描述...";
    info.thumImg = [UIImage imageNamed:@"kk"];
    info.linkUrl = @"http://www.baidu.com";
    
    [AhShareManager showWithType:Show_UM info:info];

5.3第三方登录

通过AhShareHandle的类方法实现第三方登录.

  [AhShareHandle AhShareHandleGetUserInfoFormPlatform:AhShare_QQ DoHandle:^(BOOL issus, NSString *username, NSString *usergender, NSString *usericonurl) {
  
        // username 昵称 usergender 性别 usericonurl 头像地址
    }];

其中AhShare_QQ 为AhSharePlatform枚举,代表QQ登录.

  typedef enum {  //  分享平台
    /**QQ聊天界面*/
    AhShare_QQ                    =0,
    /**QQ空间*/
    AhShare_Qzone                 =1 << 0,
    /**微信聊天*/
    AhShare_WechatSession         =1 << 1,
    /**微信朋友圈*/
    AhShare_WechatTimeLine        =1 << 2,
    /**新浪*/
    AhShare_Sina                  =1 << 3,

}AhSharePlatform;

目前分享平台只添加了QQ聊天,QQ控件,微信聊天,微信朋友圈,微信收藏,三方登录只添加了微信和QQ,若新增其他平台你可以在AhShare中follow 然后尽情的request.如果你觉得有用,方便时请给我Star.也可以通过邮箱联系我zth0218@126.com

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容