封装ShareSDK中的分享功能封以及对类似第三方功能封装的心得【原创】

本篇的主题有三个:

1、封装思想的介绍

2、我的封装代码

3、我在封装sharesdk(采用的是简洁版本)分享功能是碰到的问题,以及解决方法。

PS:其实这个我之前封装过一次,不过最近在重构项目时发现,当时封装的是如此的垃圾,所以在这里再来一次。欢迎大家批评纠错。

封装思想

因为这次封装的第三方SDK的功能,所以我采用延展的方式来进行封装。这样有以下两种好处:

 1、 这样将第三方功能给模块化,在项目中方便查找和修改。

 2、 很多第三方功能都是需要在appdelegae初始化,采用category只需在扩展的类中申明一个public方法,将初始化的代码放在相应的分类public中即可。最         后只需在appdelegate调用相应的功能模块初始化方法即可。

 

下面两张图,是我的延展类的形式和我在项目中封装两个第三方功能后,Appdelegate中的代码情况。

封装ShareSDK中的分享功能封以及对类似第三方功能封装的心得【原创】_第1张图片

   封装ShareSDK中的分享功能封以及对类似第三方功能封装的心得【原创】_第2张图片

ShareSDK功能的封装

AppDelegate+ShareSDk.h

 1 //
 2 //  AppDelegate+ShareSDk.h
 3 //  CDL_optimize
 4 //
 5 //  Created by 王立广 on 15/9/11.
 6 //  Copyright (c) 2015年 王立广. All rights reserved.
 7 //
 8 
 9 #import "AppDelegate.h"
10 
11 @interface AppDelegate (ShareSDk)
12 
13 /**
14  *  shareSDK分享
15  */
16 - (void)addShareSDKWithapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
17 
18 
19 /**
20  *  定制平台分享内容分享
21  */
22 - (void)platShareView:(UIView *)view WithShareContent:(NSString *)shareContent WithShareUrlImg:(NSString *)shareUrlImg WithShareTitle:(NSString *)shareTitle WithShareId:(NSNumber *)shareId WithShareType:(kShareType *)shareType;
23 
24 @end

 

AppDelegate+shareSDK.m

 2 // AppDelegate+ShareSDk.m  3 // CDL_optimize  4 //
 5 // Created by 王立广 on 15/9/11.  6 // Copyright (c) 2015年 王立广. All rights reserved.  7 //  8 
 9 #import "AppDelegate+ShareSDk.h"
 10 #import <ShareSDK/ShareSDK.h>
 11 #import <ShareSDKExtension/SSEShareHelper.h>
 12 #import <ShareSDKUI/ShareSDK+SSUI.h>
 13 #import <ShareSDKUI/SSUIShareActionSheetStyle.h>
 14 #import <ShareSDKUI/SSUIShareActionSheetCustomItem.h>
 15 #import <ShareSDK/ShareSDK+Base.h>
 16 #import <ShareSDK/ShareSDK.h>
 17 #import <TencentOpenAPI/QQApiInterface.h>
 18 #import <TencentOpenAPI/TencentOAuth.h>
 19 #import "WXApi.h"
 20 #import "WeiboSDK.h"
 21 #import <ShareSDKConnector/ShareSDKConnector.h>
 22 
 23 //新浪微博
 24 #define kSinaWeiboAPPKey @"*********"
 25 #define kSinaWeiboAPPSecret @"************"
 26 
 27 //腾讯微博
 28 #define kTencentWeiboAPPKey @"*********"
 29 #define kTencentWeiboAPPSecret @"**********"
 30 
 31 //QQ
 32 #define kQQAPPId @"**********"
 33 #define kQQAPPKey @"**********"
 34 
 35 //微信
 36 #define kWechatAPPId @"*************"
 37 #define kWechatAPPSecret @"************"
 38 
 39 
 40 //下面这个枚举用来判断分享哪个模块,建议放在pch文件中  41 //typedef enum  42 //{  43 // shareDartbar,//镖吧分享  44 // shareInfo, //资讯分享  45 //    
 46 //}kShareType;
 47 
 48 
 49 @implementation AppDelegate (ShareSDk)  50 
 51 - (void)addShareSDKWithapplication:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions  52 {  53     //初始化配置
 54  [self shareInit];  55     
 56     
 57     
 58 }  59 
 60 #pragma mark 分享平台初始化
 61 - (void)shareInit  62 {  63     NSArray *platformArray = [NSArray array];  64     
 65     platformArray = @[@(SSDKPlatformTypeSinaWeibo),  66  @(SSDKPlatformTypeTencentWeibo),  67  @(SSDKPlatformTypeWechat),  68  @(SSDKPlatformTypeQQ),  69  ];  70     
 71     
 72     /**  73  * 构造分享平台  74  *  75  * @param platformType 分享平台  76  *  77  * @param onImport 此时如果要分享到一些客户端这个block块必须要填。  78  *  79  * @param onConfiguration appkey的相关配置  80      */
 81     [ShareSDK registerApp:@"712aaee4e6ee" activePlatforms:platformArray  82                  onImport:^(SSDKPlatformType platformType) {  83                      
 84                      switch (platformType)  85  {  86                          case SSDKPlatformTypeWechat:  87                              [ShareSDKConnector connectWeChat:[WXApi class]];  88                              break;  89                          case SSDKPlatformTypeQQ:  90                              [ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]];  91                              break;  92 
 93                          default:  94                              break;  95  }  96                      
 97  }  98     onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo) {  99         
100 
101         
102         switch(platformType) 103  { 104             case SSDKPlatformTypeSinaWeibo: 105                 //设置新浪微博应用信息,其中authType设置为使用SSO+web形式授权
106                 [appInfo SSDKSetupSinaWeiboByAppKey:kSinaWeiboAPPKey appSecret:kSinaWeiboAPPSecret redirectUri:@"http://www.sharesdk.cn" authType:SSDKAuthTypeBoth]; 107                 break; 108                 
109             case SSDKPlatformTypeTencentWeibo: 110                 //设置腾讯微博应用信息,其中authType只能使用web形式授权
111                 [appInfo SSDKSetupTencentWeiboByAppKey:kTencentWeiboAPPKey appSecret:kTencentWeiboAPPSecret redirectUri:@"http://www.sharesdk.cn"]; 112                 break; 113                 
114             case SSDKPlatformTypeQQ: 115                 //QQ平台
116  [appInfo SSDKSetupQQByAppId:kQQAPPId appKey:kQQAPPKey authType:SSDKAuthTypeBoth]; 117                 break; 118                 
119             case SSDKPlatformTypeWechat: 120                 //微信平台
121  [appInfo SSDKSetupWeChatByAppId:kWechatAPPId appSecret:kWechatAPPSecret]; 122                 break; 123       
124  } 125         
126  }]; 127     
128 } 129 
130 
131 - (void)platShareView:(UIView *)view WithShareContent:(NSString *)shareContent WithShareUrlImg:(NSString *)shareUrlImg WithShareTitle:(NSString *)shareTitle WithShareId:(NSNumber *)shareId WithShareType:(kShareType *)shareType 132 { 133     NSString *shareUrl = nil; 134     if(shareType == shareInfo){ 135         
136         shareUrl = kInfoShareRequest(shareId); 137         
138     }else{ 139         
140         shareUrl = kDartBarShareRequest(shareId); 141  } 142     
143 
144     
145     //创建分享参数
146     NSMutableDictionary *shareParams = [NSMutableDictionary dictionary]; 147     
148 #pragma mark 公共分享参数
149 // [shareParams SSDKSetupShareParamsByText:@"分享内容" 150 // images:imageArray 151 // url:[NSURL URLWithString:@"http://mob.com"] 152 // title:@"分享标题" 153 // type:SSDKContentTypeImage];
154 
155 #pragma mark 平台定制分享参数
156     //新浪微博
157     [shareParams SSDKSetupSinaWeiboShareParamsByText:[NSString stringWithFormat:@"%@ %@",shareContent,shareUrl] title:shareTitle image:kLoadNetImage(shareUrlImg) url:nil latitude:0 longitude:0 objectID:nil type:SSDKContentTypeAuto]; 158     
159     //腾讯微博
160     [shareParams SSDKSetupTencentWeiboShareParamsByText:[NSString stringWithFormat:@"%@ %@",shareContent,shareUrl] images:kLoadNetImage(shareUrlImg) latitude:0 longitude:0 type:SSDKContentTypeText]; 161     
162     //QQ空间
163  [shareParams SSDKSetupQQParamsByText:nil title:shareTitle url:[NSURL URLWithString:shareUrl] thumbImage:kLoadNetImage(shareUrlImg) image:kLoadNetImage(shareUrlImg) type:SSDKContentTypeWebPage forPlatformSubType:SSDKPlatformSubTypeQZone]; 164     
165     //QQ好友
166  [shareParams SSDKSetupQQParamsByText:nil title:shareTitle url:[NSURL URLWithString:shareUrl] thumbImage:kLoadNetImage(shareUrlImg) image:kLoadNetImage(shareUrlImg) type:SSDKContentTypeWebPage forPlatformSubType:SSDKPlatformSubTypeQQFriend]; 167     
168     //微信收藏
169  [shareParams SSDKSetupWeChatParamsByText:nil title:shareTitle url:[NSURL URLWithString:shareUrl] thumbImage:kLoadNetImage(shareUrlImg) image:nil musicFileURL:nil extInfo:nil fileData:nil emoticonData:kLoadNetImage(shareUrlImg) type:SSDKContentTypeWebPage forPlatformSubType:SSDKPlatformSubTypeWechatFav]; 170     
171     //微信好友
172  [shareParams SSDKSetupWeChatParamsByText:nil title:shareTitle url:[NSURL URLWithString:shareUrl] thumbImage:kLoadNetImage(shareUrlImg) image:kLoadNetImage(shareUrlImg) musicFileURL:nil extInfo:nil fileData:nil emoticonData:nil type:SSDKContentTypeWebPage forPlatformSubType:SSDKPlatformSubTypeWechatSession]; 173     
174     //微信朋友圈
175  [shareParams SSDKSetupWeChatParamsByText:nil title:shareTitle url:[NSURL URLWithString:shareUrl] thumbImage:kLoadNetImage(shareUrlImg) image:kLoadNetImage(shareUrlImg) musicFileURL:nil extInfo:nil fileData:nil emoticonData:nil type:SSDKContentTypeWebPage forPlatformSubType:SSDKPlatformSubTypeWechatTimeline]; 176 
177 #pragma mark  不跳过编辑界面的分享框
178 // [ShareSDK showShareActionSheet:view items:[ShareSDK activePlatforms] shareParams:shareParams onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) { 179 //        
180 // switch (state) { 181 // case SSDKResponseStateSuccess: 182 // { 183 // UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享成功" 184 // message:nil 185 // delegate:nil 186 // cancelButtonTitle:@"确定" 187 // otherButtonTitles:nil]; 188 // [alertView show]; 189 // break; 190 // } 191 // case SSDKResponseStateFail: 192 // { 193 // UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享失败" 194 // message:[NSString stringWithFormat:@"%@", error] 195 // delegate:nil 196 // cancelButtonTitle:@"确定" 197 // otherButtonTitles:nil]; 198 // [alertView show]; 199 // break; 200 // } 201 // case SSDKResponseStateCancel: 202 // { 203 // break; 204 // } 205 // default: 206 // break; 207 // } 208 // }];
209     
210     
211 #pragma mark 设置跳过分享编辑页面,直接分享的平台。
212     SSUIShareActionSheetController *sheet = [ShareSDK showShareActionSheet:view items:nil shareParams:shareParams onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) { 213                                                            
214         switch (state) 215  { 216           case SSDKResponseStateSuccess: 217  { 218               UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"分享成功"message:nil delegate:nil cancelButtonTitle:@"确定" otherButtonTitles:nil]; 219  [alertView show]; 220               break; 221  } 222           case SSDKResponseStateFail: 223  { 224             UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"分享失败"
225                message:[NSString stringWithFormat:@"%@",error] delegate:nil cancelButtonTitle:@"确定"otherButtonTitles:nil]; 226  [alertView show]; 227              break; 228  } 229           case SSDKResponseStateCancel: 230  { 231              break; 232  } 233           default: 234           break; 235  } 236  }]; 237     
238     //删除和添加平台示例
239  [sheet.directSharePlatforms addObject:@(SSDKPlatformTypeSinaWeibo)]; 240  [sheet.directSharePlatforms addObject:@(SSDKPlatformTypeTencentWeibo)]; 241     
242     
243 } 244 
245 
246 
247 
248 
249 
250 
251
252 @end

PS:在代码里注释我都加上去了,个人感觉算是十分详细了,如果有问题,可以留下你的留言。

 

封装过程中碰到的问题以及解决方法

1、面板上一直显示不出来,相应的分享平台

    在shareSDK的初始化方法中,有个onImport参数,如果分享的到app里,要传递这个参     数,要不然,在面板中不会显示这些平台的

 

2、新浪微博分享时,怎么才能将shareSdk给的界面里填的分享内容(这个界面默认是),分享到新浪微博里

 

只有分享的参数是公共的时候,在编辑页面修改的内容才会显示在分享的平台上。如果是给各个平台定制分享内容的话,在编辑页面修改的内容不会显示在分享的平台上,另外此时需要隐藏编辑界面,在代码中已注释。

 

3、在平台分享时我选择的是自动匹配分享类型,但我分享的内容没有图片时却分享不成功

 

选在分享类型的时候,能确定属于哪个类型,就选择哪个,如果实在确定不了就选自动

如果分享的内容有url的时候,一般选择SSDKContentTypeWebPage类型,如果不行在选自动。

 

4、分享到腾讯微博、新浪微博,要添加连接时,在内容后面填上链接。

你可能感兴趣的:(封装ShareSDK中的分享功能封以及对类似第三方功能封装的心得【原创】)