三方分享 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 也可以直接下载

三方分享 cocoapods封装友盟_第1张图片
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文件就是没有体现,因为这个文件是只读的,苹果应该做了一些特殊的处理.

 LSApplicationQueriesSchemes

    
    wechat
    weixin

    
    sinaweibohd
    sinaweibo
    sinaweibosso
    weibosdk
    weibosdk2.5

    
    mqqapi
    mqq
    mqqOpensdkSSoLogin
    mqqconnect
    mqqopensdkdataline
    mqqopensdkgrouptribeshare
    mqqopensdkfriend
    mqqopensdkapi
    mqqopensdkapiV2
    mqqopensdkapiV3
    mqqopensdkapiV4
    mqzoneopensdk
    wtloginmqq
    wtloginmqq2
    mqqwpa
    mqzone
    mqzonev2
    mqzoneshare
    wtloginqzone
    mqzonewx
    mqzoneopensdkapiV2
    mqzoneopensdkapi19
    mqzoneopensdkapi
    mqqbrowser
    mttbrowser




4.设置URL Scheme

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

三方分享 cocoapods封装友盟_第2张图片
设置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 *)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.也可以通过邮箱联系我[email protected]

你可能感兴趣的:(三方分享 cocoapods封装友盟)