iOS 自定義常見第三方分享

平時經(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;  
    }  
}  
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末惨好,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子随闺,更是在濱河造成了極大的恐慌日川,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,378評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矩乐,死亡現(xiàn)場離奇詭異龄句,居然都是意外死亡,警方通過查閱死者的電腦和手機散罕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,970評論 3 399
  • 文/潘曉璐 我一進店門分歇,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人欧漱,你說我怎么就攤上這事职抡。” “怎么了硫椰?”我有些...
    開封第一講書人閱讀 168,983評論 0 362
  • 文/不壞的土叔 我叫張陵繁调,是天一觀的道長萨蚕。 經(jīng)常有香客問我,道長蹄胰,這世上最難降的妖魔是什么岳遥? 我笑而不...
    開封第一講書人閱讀 59,938評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮裕寨,結果婚禮上浩蓉,老公的妹妹穿的比我還像新娘。我一直安慰自己宾袜,他們只是感情好捻艳,可當我...
    茶點故事閱讀 68,955評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著庆猫,像睡著了一般认轨。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上月培,一...
    開封第一講書人閱讀 52,549評論 1 312
  • 那天嘁字,我揣著相機與錄音,去河邊找鬼杉畜。 笑死纪蜒,一個胖子當著我的面吹牛,可吹牛的內容都是我干的此叠。 我是一名探鬼主播纯续,決...
    沈念sama閱讀 41,063評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼灭袁!你這毒婦竟也來了猬错?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 39,991評論 0 277
  • 序言:老撾萬榮一對情侶失蹤简卧,失蹤者是張志新(化名)和其女友劉穎兔魂,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體举娩,經(jīng)...
    沈念sama閱讀 46,522評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,604評論 3 342
  • 正文 我和宋清朗相戀三年构罗,在試婚紗的時候發(fā)現(xiàn)自己被綠了铜涉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,742評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡遂唧,死狀恐怖芙代,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情盖彭,我是刑警寧澤纹烹,帶...
    沈念sama閱讀 36,413評論 5 351
  • 正文 年R本政府宣布页滚,位于F島的核電站,受9級特大地震影響铺呵,放射性物質發(fā)生泄漏裹驰。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 42,094評論 3 335
  • 文/蒙蒙 一片挂、第九天 我趴在偏房一處隱蔽的房頂上張望幻林。 院中可真熱鬧,春花似錦音念、人聲如沸沪饺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,572評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽整葡。三九已至,卻和暖如春讥脐,著一層夾襖步出監(jiān)牢的瞬間掘宪,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,671評論 1 274
  • 我被黑心中介騙來泰國打工攘烛, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留魏滚,地道東北人。 一個月前我還...
    沈念sama閱讀 49,159評論 3 378
  • 正文 我出身青樓坟漱,卻偏偏與公主長得像鼠次,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子芋齿,可洞房花燭夜當晚...
    茶點故事閱讀 45,747評論 2 361

推薦閱讀更多精彩內容