Sharesdk封装
对于分享的使用我们经常借用第三方平台来实现,这样可以高效的更新到最新的各个平台的最新的sdk版本,方便开发者去基础使用,为了使得集成过程中使用更加的方便就将起一些方法进行封装提高开发效率
- 创建一个 继承Nsobject 的类
.h文件
#import
#import
#import
//腾讯开放平台(对应QQ和QQ空间)SDK头文件
#import
#import
//微信SDK头文件
#import "WXApi.h"
//新浪微博SDK头文件
#import "WeiboSDK.h"
//新浪微博SDK需要在项目Build Settings中的Other Linker Flags添加"-ObjC"
//GooglePlus SDK头文件
#import
//GooglePlus SDK需要在项目Build Settings中的Other Linker Flags添加"-ObjC"
/******************* 相关的key *********/
static NSString *const ShareSDKAppkey = @""; // 分享ShareSDK的Appkey 1
static NSString *const ShareRedirectUrl = @""; // 授权回调地址
static NSString *const SinaAppkey = @""; // 新浪 1
static NSString *const SinaAppSecret = @""; // 新浪 1
static NSString *const WXAppID = @""; // 微信 1
static NSString *const WXAppSecret = @""; // 微信 1
static NSString *const QQAppId = @""; // QQ 1
static NSString *const QQAppkey = @""; // QQ 1
static NSString *const FacebookAppId =@""; // Facebook
static NSString *const FacebookAppSecret =@""; // Facebook
static NSString *const TwitterAppId = @""; //Twitter
static NSString *const TwitterAppSecret = @""; // Twitter
static NSString *const GoogleClientId = @""; // Google
@interface ShareUtils : NSObject
/**
* 初始化 ShareSDK
*/
+ (void)setShareSDK;
/**
* 分享各个参数
*
* @param text 内容
* @param images 图片
* @param url 链接
* @param title 标题
* @param type 类型
*/
+ (void)ShareParamsByText:(NSString *)text images:(NSString *)images url:(NSString *)url title:(NSString *)title type:(SSDKPlatformType)type;
/**
* 判断应用是否授权
*
* @param type 授权平台
*
* @return 是否授权 yes or no
*/
+ (BOOL)hasAuthorized:(SSDKPlatformType)type;
/**
* 获取好友信息
*
* @param type 分享平台
* @param pageSize 分页 (注:ShareTypeTwitter从@“-1”开始计算,)
* @param success 请求的数量 (注:微博只返回一次请求的30%,所以请求数量一次为“68” )
*/
- (void)getFriendsinitwithType:(SSDKPlatformType)type PageNO:(NSInteger)pageNO pageSize:(NSInteger)pageSize andSuccess:(void (^) (NSArray *fridendArr,NSNumber *total_number))success;
/**
1:在shareSDK官网注册应用,获取相对应的key: http://www.mob.com/#/ 后下载后导入 ----- shareSDK
2:导入相关的Frameworks
**** 必须添加的依赖库如下(Xcode 7 下 *.dylib库后缀名更改为*.tbd) ****
libicucore.dylib
libz.dylib
libstdc++.dylib
JavaScriptCore.framework
** 新浪微博SDK依赖库 **
ImageIO.framework
AdSupport.framework
libsqlite3.dylib
** QQ好友和QQ空间SDK依赖库 && 微信SDK依赖库 **
libsqlite3.dylib
3:目前的新浪微博SDK || google + 需要在项目的Build Settings中的Other Linker Flags添加”-ObjC”,如果不配置有可能会崩溃
4:点击项目工程:==》TARGETS ==>info 选项卡 在URL Types中添加QQ的AppID,其格式为:”QQ” + AppId的16进制(如果appId转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为:QQ05FB8B52 注意:转换后的字母要大写
注:Google + 需要增加一行 “URL Types“ -- identifel 与 URL schemes 均填
5:
*
*/
.m文件
/**
* 初始化 ShareSDK
*/
+ (void)setShareSDK
{
/**
* 设置ShareSDK的appKey,如果尚未在ShareSDK官网注册过App,请移步到http://mob.com/login 登录后台进行应用注册,
* 在将生成的AppKey传入到此方法中。
* 方法中的第二个第三个参数为需要连接社交平台SDK时触发,
* 在此事件中写入连接代码。第四个参数则为配置本地社交平台时触发,根据返回的平台类型来配置平台信息。
* 如果您使用的时服务端托管平台信息时,第二、四项参数可以传入nil,第三项参数则根据服务端托管平台来决定要连接的社交SDK。
*/
[ShareSDK registerApp:@""
activePlatforms:@[@(SSDKPlatformTypeSinaWeibo),
@(SSDKPlatformSubTypeQQFriend),
@(SSDKPlatformSubTypeQZone),
@(SSDKPlatformSubTypeWechatSession),
@(SSDKPlatformSubTypeWechatTimeline),
@(SSDKPlatformTypeFacebook),
@(SSDKPlatformTypeGooglePlus),
@(SSDKPlatformTypeTwitter),
@(SSDKPlatformTypeQQ),
@(SSDKPlatformTypeSMS),
@(SSDKPlatformTypeCopy)]
onImport:^(SSDKPlatformType platformType) {
switch (platformType)
{
case SSDKPlatformTypeWechat:
[ShareSDKConnector connectWeChat:[WXApi class]];
break;
case SSDKPlatformTypeQQ:
[ShareSDKConnector connectQQ:[QQApiInterface class] tencentOAuthClass:[TencentOAuth class]];
break;
case SSDKPlatformTypeSinaWeibo:
[ShareSDKConnector connectWeibo:[WeiboSDK class]];
break;
case SSDKPlatformTypeGooglePlus:
[ShareSDKConnector connectGooglePlus:[GPPSignIn class]
shareClass:[GPPShare class]];
break;
default:
break;
}
} onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo) {
switch (platformType)
{
case SSDKPlatformTypeSinaWeibo:
//设置新浪微博应用信息,其中authType设置为使用SSO+Web形式授权
[appInfo SSDKSetupSinaWeiboByAppKey:SinaAppkey
appSecret:SinaAppSecret
redirectUri:ShareRedirectUrl
authType:SSDKAuthTypeBoth];
break;
case SSDKPlatformTypeWechat:
[appInfo SSDKSetupWeChatByAppId:WXAppID
appSecret:WXAppSecret];
break;
case SSDKPlatformTypeQQ:
[appInfo SSDKSetupQQByAppId:QQAppId
appKey:QQAppkey
authType:SSDKAuthTypeBoth];
break;
case SSDKPlatformTypeFacebook:
[appInfo SSDKSetupFacebookByApiKey:FacebookAppId
appSecret:FacebookAppSecret
authType:SSDKAuthTypeBoth];
break;
/// Google+ 的clientSecret,redirectUri 一定要为 “”
case SSDKPlatformTypeGooglePlus:
[appInfo SSDKSetupGooglePlusByClientID:GoogleClientId
clientSecret:@""
redirectUri:@""
authType:SSDKAuthTypeBoth];
break;
case SSDKPlatformTypeTwitter:
[appInfo SSDKSetupTwitterByConsumerKey:TwitterAppId
consumerSecret:TwitterAppSecret
redirectUri:SSDKAuthTypeBoth];
break;
default:
break;
}
}];
}
/**
* 分享各个参数
*
* @param text 内容
* @param images 图片
* @param url 链接
* @param title 标题
* @param type 分享平台类型
*/
+ (void)ShareParamsByText:(NSString *)text images:(NSString *)images url:(NSString *)url title:(NSString *)title type:(SSDKPlatformType)type
{
NSMutableDictionary *shareParams = [NSMutableDictionary dictionary];
[shareParams SSDKSetupShareParamsByText:text
images:images
url:[NSURL URLWithString:url]
title:title
type:SSDKContentTypeAuto];
[ShareSDK showShareActionSheet:nil
items:nil
shareParams:shareParams
onShareStateChanged:^(SSDKResponseState state, SSDKPlatformType platformType, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error, BOOL end) {
switch (state) {
case SSDKResponseStateBegin:
NSLog(@"正在发送");
break;
case SSDKResponseStateCancel:
NSLog(@"取消发送");
break;
case SSDKResponseStateSuccess:
NSLog(@"发送成功");
break;
default:
break;
}
}];
}
/**
* 判断应用是否授权
*
* @param type 授权平台
*
* @return 是否授权 yes or no
*/
+ (BOOL)hasAuthorized:(SSDKPlatformType)type
{
return [ShareSDK hasAuthorized:type];
}
/**
* 获取好友信息
*
* @param type 分享平台
* @param pageSize 分页 (注:ShareTypeTwitter从@“-1”开始计算,)
* @param success 请求的数量 (注:微博只返回一次请求的30%,所以请求数量一次为“68” )
*/
- (void)getFriendsinitwithType:(SSDKPlatformType)type PageNO:(NSInteger)pageNO pageSize:(NSInteger)pageSize andSuccess:(void (^) (NSArray *fridendArr,NSNumber *total_number))success
{
[ShareSDK getFriends:type
cursor:pageNO
size:pageSize
onStateChanged:^(SSDKResponseState state, SSDKFriendsPaging *paging, NSError *error) {
}];
}
- 需要注意的是只有腾讯平台的才能分享出链接URL,微博平台需要单独进行处理
- 新浪微博必须bundle与开放平台的bauble设置的一致才能进行分享,同时分享图片需要申请高级接口,分享的图片链接必须是外网图片,公司内部网络图片无法进行分享使用