本文会介绍iOS常用的第三方分享(本文是分享带标题及藐视的h5地址),包括微信、QQ、微博,文章前部分会介绍每个平台的API集成及使用方法,文章后部分会介绍对三方分享(或者登陆)集成一起的三方框架ShareSDK(友盟分享也是可以的)。
微信分享:
集成前先去微信开放平台(地址https://open.weixin.qq.com)注册账号及注册APP。注册APP的时候注意最好是iOS版和安卓版注册到一起,不然只注册一个端会导致注册另一端的时候提现APP已存在的尴尬局面。微信分享接口是基础接口不需要企业认证就可使用,审核期三天左右。微信登录及支付接口是高级接口,需要企业认证通过之后才能申请使用。企业认证费用300元/次。
1.用cocoapods导入微信SDK
pod 'WechatOpenSDK'
2.在.pch文件中导入微信SDK头文件
#import "WXApi.h"
3.在AppDelegate文件中注册微信SDK
[WXApi registerApp:KWeChatAppID];//传入微信平台注册的APPkey
4.唤起微信要添加这个方法(下面QQ、微博也是这个方法不在细说)
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
#pragma makr ios9之后方法
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options
5.添加URL Schemes
project~>TARGETS~>info~>URL Type
下图是多个三方平台的URL Schemes,一下其他平台不在说明。
6.分享代码
先判断手机上是否有安装微信,未安装则不分享
[WXApi isWXAppInstalled]
分享代码
WXMediaMessage *message = [WXMediaMessage message];
message.title = title;
message.description = mes;
if (imaUrl.length > 0) {
NSData *data = UIImageJPEGRepresentation([UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:imaUrl]]], 0.3);
UIImage *ima = [UIImage imageWithData:data];
UIImage *setImage = [self compressImage:ima toByte:30000];
[message setThumbImage:setImage];
}else{
[message setThumbImage:[UIImage imageNamed:SharPlaceHold]];
}
WXWebpageObject *page = [WXWebpageObject object];
page.webpageUrl = url;
message.mediaObject = page;
SendMessageToWXReq *req = [[SendMessageToWXReq alloc]init];
req.bText = NO;
req.message = message;
req.scene = WXSceneTimeline;//聊天WXSceneSession 朋友圈WXSceneTimeline 微信收藏WXSceneFavorite
[WXApi sendReq:req]
微信分享的三个渠道,微信好友、朋友圈、微信收藏参数如上scene
7.分享回调
在AppDelegate文件中添加协议WXApiDelegate
回调方法
-(void) onResp:(BaseResp*)resp
注意一点,微信和qq的回调方法竟然是同一个,毕竟都是腾讯家的孩子。那就要在回调方法里面判断是微信还是QQ了,注意的是微信登录的回调也在这个方法里面(腾讯真TM的省事)。
QQ分享:
1.作者集成QQ分享的时候,腾讯开放平台暂不支持cocoapods集成QQSDK,请大家移步腾讯开放平台去下载SDK手动导入
2.在.pch文件中导入微信SDK头文件
#import <TencentOpenAPI/TencentOAuth.h>//qq
#import <TencentOpenAPI/QQApiInterface.h>
#import <TencentOpenAPI/QQApiInterfaceObject.h>
3.在AppDelegate文件中注册qq SDK
TencentOAuth *ten = [[TencentOAuth alloc] initWithAppId:KQQAppID andDelegate:self];//注册
4.唤起QQ(方法参考上面唤起微信,方法里面是并列)
5.添加URL Schemes(方法参考上面微信)
6.分享实现代码
老规矩先判断手机上是否安装有QQ
[TencentOAuth iphoneQQInstalled]
分享代码
QQApiNewsObject *new = [QQApiNewsObject objectWithURL:[NSURL URLWithString:url] title:title description:mes previewImageURL:[NSURL URLWithString:imaUrl]];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:new];
[QQApiInterface sendReq:req];//分享到QQ好友
[QQApiInterface SendReqToQZone:req];//分享到空间
7.分享回调
老规矩协议QQApiInterfaceDelegate
回调方法同上微信,你不再介绍
微博分享:
1.用cocoapods导入微博SDK
pod "Weibo_SDK", :git => "https://github.com/sinaweibosdk/weibo_ios_sdk.git"
导入的时候一直显示找不到,不要慌,加上地址就行了
2.在.pch文件中导入微信SDK头文件
#import "WeiboSDK.h"
3.在AppDelegate文件中注册微博SDK
//控制台输出(发布时要注释掉)
[WeiboSDK enableDebugMode:YES];
//注册
[WeiboSDK registerApp:KWBAppKey];
4.唤起微信要添加这个方法(见上面微信)
5.添加URL Schemes (见上面微信)
6.分享代码
新浪微博不用判断手机是否安装,新浪微博没有安装的话会去跳转网页版的分享。
WBMessageObject *obj = [WBMessageObject message];
obj.text = [NSString stringWithFormat:@"%@ %@", title, url];
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:obj];
[WeiboSDK sendRequest:request];
需要注意的是,新浪微博是不支持URL和文字同时存在的,但是这能难道我们伟大的程序员吗,把分享的文本和url拼接到一起当成分享文案就行了。
7.回调
#pragma makr微博回调
-(void)didReceiveWeiboResponse:(WBBaseResponse *)response
{
if ([response isKindOfClass:WBSendMessageToWeiboRequest.class]) {
//分享
if (response.statusCode == WeiboSDKResponseStatusCodeSuccess) {
[self showAlert:@"已分享" type:AlertViewType_Toast];
//[[NSNotificationCenter defaultCenter] postNotificationName:Notication_SharSuccess object:nil];
}else if (response.statusCode == WeiboSDKResponseStatusCodeShareInSDKFailed){
[self showAlert:@"已取消" type:AlertViewType_Toast];
}
}else if([response isKindOfClass:WBAuthorizeResponse.class]){
//登录
NSString *userID = [(WBAuthorizeResponse *)response userID];
if (userID) {
NSDictionary *dic = @{@"info":userID};
[[NSNotificationCenter defaultCenter] postNotificationName:Notication_WeiBoLogin object:nil userInfo:dic];
}
}
}
微博的分享和登录的回调也是在一起的(真tm的懒),所以在回调方法里面需要判断一下。
以上是三个平台的分享流程,接下来我会介绍一个三方的框架ShareSDK。用完之后你会发现,我tm是个傻吊,竟然这么方便。
ShareSDK分享:
ShareSDK分享是把主流的一些三方平台的分享集成在了一起,微信、QQ、新浪、推特、人人网、开心网等等等。当然需要分享到那个平台让然需要相关的SDK,下面就介绍微信、QQ、新浪三个平台。集成之前还是需要去各个三方平台注册响应的账号及APP,拿到appkey。然后把这个APPkey去添加到ShareSDK平台中。
1.用cocoapods导入SDK
#ShareSDK
pod 'mob_sharesdk'
pod 'mob_sharesdk/ShareSDKExtension'
pod 'mob_sharesdk/ShareSDKPlatforms/QQ'
pod 'mob_sharesdk/ShareSDKPlatforms/SinaWeibo'
pod 'mob_sharesdk/ShareSDKPlatforms/WeChat'
注意,SDK有很多,需要用那个平台在导入那个平台,没必要导入无用的平台。
2.在.pch文件中导入SDK头文件
#import <ShareSDK/ShareSDK.h>
3.在AppDelegate文件中注册SDK
[ShareSDK registPlatforms:^(SSDKRegister *platformsRegister) {
//新浪
[platformsRegister setupSinaWeiboWithAppkey:kSinaAppKey appSecret:kSinaAppSecret redirectUrl:kSinaRedirectUrl];
[platformsRegister setupQQWithAppId:kQQAppID appkey:kQQAppKey];
//微信
[platformsRegister setupWeChatWithAppId:kWeChatAppID appSecret:kWeChatAppSecret];
}];
4.配置URL Schemes见上面微信
5.分享及回调代码
NSMutableDictionary *params = [NSMutableDictionary dictionary];
[params SSDKSetupShareParamsByText:content images:self.shareModel.icon url:[NSURL URLWithString:self.shareModel.url] title:self.shareModel.title type:SSDKContentTypeAuto];
[ShareSDK share:shareType parameters:params onStateChanged:^(SSDKResponseState state, NSDictionary *userData, SSDKContentEntity *contentEntity, NSError *error) {
switch (state) {
case SSDKResponseStateUpload:
// 分享视频的时候上传回调,进度信息在 userData
break;
case SSDKResponseStateSuccess:
//成功
[self showAlert:@"分享成功" type:ENAlertType_Tost];
break;
case SSDKResponseStateFail:
{
[self showAlert:@"分享失败" type:ENAlertType_Tost];
break;
}
case SSDKResponseStateCancel:
//取消
[self showAlert:@"取消分享" type:ENAlertType_Tost];
break;
default:
break;
}
}];
注意,SSDKContentTypeAuto参数是分享的类型,文本、图片、url等等;shareType是分享的渠道,新浪、微信、qq等。分享全部搞定。使用中如有疑问可私聊作者。