平時經(jīng)常會遇到做第三分享的需求显晶,相信大家好多都使用的集成的分享平臺shareSDK核偿、友盟分享等凶杖。他們其實是對各種第三方平臺進行了二次封裝,有時需求只要求做其中一種平臺的分享的時候其實像shareSDK這種集成環(huán)境就有些顯得比較冗余了蜜徽,因為他集成了很多的平臺,用戶可自定義程度不高票摇,使得自己的程序會變得很臃腫拘鞋,今天就把自己的干貨拿出來,來講一講自定義的第三方分享矢门。
下面主要講一下目前應用比較廣的盆色,QQ灰蛙、微信、微博的分享隔躲。
集成SDK
首先要集成你要做分享平臺的SDK摩梧,和相應環(huán)境的配置,這些配置在我之前的博客中都有所提及宣旱,我就不在這里再次敘述了
微博SDK的集成:微博SDK集成
QQ SDK集成:QQ SDK集成
微信SDK集成:微信SDK集成
注意在集成SDK后需要在Appdelegate中進行注冊
微博的分享
+ (void)weiboShareLinkWithUrl:(NSString *)url title:(NSString *)title description:(NSString *)description andPicUrl:(NSString *)picUrl
{
NSLog(@"調用了微博");
AppDelegate *myDelegate =(AppDelegate*)[[UIApplication sharedApplication] delegate];
WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
authRequest.redirectURI = @"這里填寫你申請微博應用時的回調網(wǎng)址";
authRequest.scope = @"all";
WBMessageObject *message = [WBMessageObject message];
//設置分享的標題
message.text = title;
WBWebpageObject *webpage = [WBWebpageObject object];
webpage.objectID = @"identifier1";
webpage.title = title;
webpage.description = description;
//設置分享出去顯示的圖片
if (picUrl.length == 0 || picUrl == nil)
{
webpage.thumbnailData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon_share" ofType:@"png"]];
}
else
{
webpage.thumbnailData = [NSData dataWithContentsOfURL:[NSURL URLWithString:picUrl]];
}
webpage.webpageUrl = url;
message.mediaObject = webpage;
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:myDelegate.wbtoken];
request.userInfo = @{@"ShareMessageFrom": @"SendMessageToWeiboViewController",
@"Other_Info_1": [NSNumber numberWithInt:123],
@"Other_Info_2": @[@"obj1", @"obj2"],
@"Other_Info_3": @{@"key1": @"obj1", @"key2": @"obj2"}};
//調用此方法進行分享
[WeiboSDK sendRequest:request];
}
QQ的分享
QQ的分享分為分享給QQ好友和分享到QQ空間
這里首先定義一個枚舉類型來區(qū)分是哪一種分享
在分享工具類的頭文件里:
typedef enum : NSUInteger {
QQShare_Friends,
QQShare_Qzone,
} QQShare_Type;
然后實現(xiàn)分享方法:
+ (void)qqShareLinkWithScene:(QQShare_Type)scene url:(NSString *)url title:(NSString *)title andDescription:(NSString *)description
{
NSURL *shareUrl = [NSURL URLWithString:url];
NSLog(@"調用了QQ");
NSString *picUrl = @"這里填寫你要分享出圖的圖片鏈接";
NSURL *imageUrl = [NSURL URLWithString:picUrl];
//通過QQAPIObject來創(chuàng)建將要分享的對象
QQApiObject *newsObj = [QQApiNewsObject objectWithURL:shareUrl title:title description:description previewImageURL:imageUrl targetContentType:QQApiURLTargetTypeNews];
//設置分享Req對象
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
switch (scene)
{
//分享給QQ好友
case QQShare_Friends:
{
[QQApiInterface sendReq:req];
break;
}
//分享給QQ空間
case QQShare_Qzone:
{
[QQApiInterface SendReqToQZone:req];
break;
}
default:
break;
}
}
微信的分享
微信的分享也同QQ一樣仅父,是分為分享微信好友和分享微信朋友圈,這里只要引入微信的頭文件就可以了浑吟,微信官方SDK已經(jīng)聲明了所需要用的枚舉了驾霜,無需我們再進行設置了。
用以下代碼實現(xiàn)分享:
+ (void)wechatShareLinkWithScene:(int)scene url:(NSString *)url title:(NSString *)title andDescription:(NSString *)description
{
//封裝mediaMessage對象
WXMediaMessage *message = [WXMediaMessage message];
//設置微信分享的title
[message setTitle:title];
//設置分享描述內容
[message setDescription:description];
//設置分享所需圖片
[message setThumbImage:[UIImage imageNamed:@"icon_share"]];
NSLog(@"調用了微信");
//封裝WXWebpageObject對象
WXWebpageObject *ext = [WXWebpageObject object];
ext.webpageUrl = url;
message.mediaObject = ext;
//發(fā)送請求
SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = scene;
[WXApi sendReq:req];
}
這樣就實現(xiàn)了簡單的分享买置,一般的需求幾乎都可以滿足粪糙,是不是很簡單。
總結下
首先集成你準備分享平臺的SDK忿项,然后進行Appdelegate的注冊蓉冈,然后實現(xiàn)分享,這里需要注意下轩触,微信和微博分享的圖片是傳本地圖片寞酿,QQ是要傳圖片的鏈接,(這里要吐槽下脱柱,不理解傳鏈接有什么用)伐弹。
既然分享就要分享的徹底點,下面po出博主自己封裝的分享工具類榨为,如有不足之處還請大家多提意見??
//
// JFShareTool.h
// BobcareDoctorApp
//
// Created by wangjifeng on 15/11/13.
// Copyright ? 2015年 com.01wisdom. All rights reserved.
//
#import <Foundation/Foundation.h>
typedef enum : NSUInteger {
QQShare_Friends,
QQShare_Qzone,
} QQShare_Type;
@interface JFShareTool : NSObject
/**
* 分享鏈接給微信
*
* @param scene 場景
* @param url url
* @param description 描述
*/
+ (void)wechatShareLinkWithScene:(int)scene url:(NSString *)url title:(NSString *)title andDescription:(NSString *)description;
/**
* 分享鏈接給QQ
*
* @param scene 場景
* @param url url
* @param description 描述
*/
+ (void)qqShareLinkWithScene:(QQShare_Type)scene url:(NSString *)url title:(NSString *)title andDescription:(NSString *)description;
/**
* 分享鏈接給微博
*
* @param url 鏈接
* @param description 描述
*/
+ (void)weiboShareLinkWithUrl:(NSString *)url title:(NSString *)title description:(NSString *)description andPicUrl:(NSString *)picUrl;
@end
//
// JFShareTool.m
// BobcareDoctorApp
//
// Created by wangjifeng on 15/11/13.
// Copyright ? 2015年 com.01wisdom. All rights reserved.
//
#import "JFShareTool.h"
#import "WXApi.h"
#import <UIKit/UIKit.h>
#import <TencentOpenAPI/QQApiInterface.h>
#import "WeiboSDK.h"
#import "AppDelegate.h"
@implementation JFShareTool
+ (void)wechatShareLinkWithScene:(int)scene url:(NSString *)url title:(NSString *)title andDescription:(NSString *)description
{
//封裝mediaMessage對象
WXMediaMessage *message = [WXMediaMessage message];
[message setTitle:title];
[message setDescription:description];
[message setThumbImage:[UIImage imageNamed:@"icon_share"]];
NSLog(@"調用了微信");
//封裝WXWebpageObject對象
WXWebpageObject *ext = [WXWebpageObject object];
ext.webpageUrl = url;
message.mediaObject = ext;
//發(fā)送請求
SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
req.bText = NO;
req.message = message;
req.scene = scene;
[WXApi sendReq:req];
}
+ (void)qqShareLinkWithScene:(QQShare_Type)scene url:(NSString *)url title:(NSString *)title andDescription:(NSString *)description
{
NSURL *shareUrl = [NSURL URLWithString:url];
NSLog(@"調用了QQ");
NSString *picUrl = @"http://file.bmob.cn/M02/B3/F9/oYYBAFZSehaAdoeSAABBZ_Q9h-U696.png";
NSURL *imageUrl = [NSURL URLWithString:picUrl];
QQApiObject *newsObj = [QQApiNewsObject objectWithURL:shareUrl title:title description:description previewImageURL:imageUrl targetContentType:QQApiURLTargetTypeNews];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
switch (scene)
{
//分享給QQ好友
case QQShare_Friends:
{
[QQApiInterface sendReq:req];
break;
}
//分享給QQ空間
case QQShare_Qzone:
{
[QQApiInterface SendReqToQZone:req];
break;
}
default:
break;
}
}
+ (void)weiboShareLinkWithUrl:(NSString *)url title:(NSString *)title description:(NSString *)description andPicUrl:(NSString *)picUrl
{
NSLog(@"調用了微博");
AppDelegate *myDelegate =(AppDelegate*)[[UIApplication sharedApplication] delegate];
WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
authRequest.redirectURI = @"http://www.bobcare.com";
authRequest.scope = @"all";
WBMessageObject *message = [WBMessageObject message];
message.text = title;
WBWebpageObject *webpage = [WBWebpageObject object];
webpage.objectID = @"identifier1";
webpage.title = title;
webpage.description = description;
if (picUrl.length == 0 || picUrl == nil)
{
webpage.thumbnailData = [NSData dataWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"icon_share" ofType:@"png"]];
}
else
{
webpage.thumbnailData = [NSData dataWithContentsOfURL:[NSURL URLWithString:picUrl]];
}
webpage.webpageUrl = url;
message.mediaObject = webpage;
WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:myDelegate.wbtoken];
request.userInfo = @{@"ShareMessageFrom": @"SendMessageToWeiboViewController",
@"Other_Info_1": [NSNumber numberWithInt:123],
@"Other_Info_2": @[@"obj1", @"obj2"],
@"Other_Info_3": @{@"key1": @"obj1", @"key2": @"obj2"}};
[WeiboSDK sendRequest:request];
}
@end
調用示例:
- (void)shareViewButtonClick:(CustomShareType)shareType
{
NSLog(@"%s",__func__);
NSLog(@"%lu",(unsigned long)shareType);
switch (shareType)
{
case ShareType_Weixin_Friend:
{
[JFShareTool wechatShareLinkWithScene:WXSceneSession url:url title:_shareTitle andDescription:_shareContent];
break;
}
case ShareType_Weixin_Circle:
{
[JFShareTool wechatShareLinkWithScene:WXSceneTimeline url:url title:_shareTitle andDescription:_shareContent];
break;
}
case ShareType_Weibo:
{
[JFShareTool weiboShareLinkWithUrl:url title:_shareTitle description:_shareContent andPicUrl:nil];
break;
}
case ShareType_QQ_Zone:
{
[JFShareTool qqShareLinkWithScene:QQShare_Qzone url:url title:_shareTitle andDescription:_shareContent];
break;
}
case ShareType_QQ_Friend:
{
[JFShareTool qqShareLinkWithScene:QQShare_Friends url:url title:_shareTitle andDescription:_shareContent];
break;
}
default:
break;
}
}