第三方分享流程整理

成員

shareSDK:外部分享調(diào)用的接口
shareServiceManager:內(nèi)部底層邏輯的實(shí)現(xiàn)者

注冊

注冊三方分享的AppKey。

Appdelegate方法中配置分享key

在app delegate

-(BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions{
    //注冊微博: 
    [WeiboSDK registerApp:APPKEY];
    //注冊微信:
    [WXApi registerApp:APPKEY];
    //注冊QQ: 
    TencentOAuth *oAuth = [[TencentOAuth alloc] initWithAppId:[keydic objectForKey:SHARE_KEY] andDelegate:self];
    oAuth.accessToken = [userDefaults objectForKey:@"TencentAccessToken"];
    oAuth.expirationDate = [userDefaults objectForKey:@"TencentExpireDate"];
    oAuth.openId = [userDefaults objectForKey:@"TencentOpenID"];
}     

中先注冊各個分享渠道的key

分享需要用到的參數(shù)

請注意各個分享渠道的SDK的參數(shù)說明,例如:微博title不能超過140個漢字(280個字節(jié))跟磨,微信縮略圖大小最大為32k......,否則會導(dǎo)致無法跳轉(zhuǎn)對應(yīng)App或者分享失敗

所需要的數(shù)據(jù)有:

1)微信微博等的分享標(biāo)題和分享文案
2)分享用到的標(biāo)題旁邊的縮略圖(微信需要壓縮到32k以下宛裕,QQ控件300k以下)
3)分享用到的原圖圖片和使用UIImageJPEGRepresentation(UIImage,CGFloat)壓縮之后的NSData
4)分享渠道拼參威蕉,NSDictionary @{@“shareChannelTitle”:@“新浪微博”,@“SHARETYE”:@“ShareTypeSinaWeibo”};

拼接參數(shù)隅津,調(diào)用對外接口shareSDK,彈出分享浮層


- (void)showShareViewWithShareDict:(NSDictionary *)shareDic{
    //分享標(biāo)題劲室,內(nèi)容伦仍,鏈接,圖片
    NSString *shareTitle   = [shareDic objectForKey:@"shareTitle"];
    NSString *shareContent = [shareDic objectForKey:@"shareContent"];
    NSString *shareURL     = [shareDic objectForKey:@"shareURL"];
    UIImage  *shareIMG     = [shareDic objectForKey:@"shareIMG"];
    if (!shareIMG||shareIMG == nil) {
        shareIMG = [UIImage imageNamed:@"分享默認(rèn)圖"];
    }
    if (shareURL.length == 0) {
        shareURL = self.URLString;
    }
    
    //分享的具體內(nèi)容model
    SouFunShareDataModel *dataModel = [[SouFunShareDataModel alloc]init];
    dataModel.onlyText = NO;
    dataModel.shareResource = @"熱門活動";
    
    //分享的鏈接地址
    dataModel.webURL = shareURL;
    //微信(QQ)
    dataModel.weChatTitle = shareTitle;
    dataModel.weChatDescription = shareContent;
    //微信朋友圈
    dataModel.weChatFriendTitle = shareContent;
    //QQ空間
    dataModel.QZoneTitle = shareTitle;
    dataModel.QzoneDescription = shareContent;
    //騰訊(新浪)微博
    dataModel.blogDescription = [NSString stringWithFormat:@"%@%@", shareContent, shareURL];//長度小于280字節(jié)
    //分享的圖片
    dataModel.image = shareIMG;
    dataModel.orignalImageData = UIImageJPEGRepresentation(dataModel.image, 1.0f); //原圖
    //壓縮圖片
    dataModel.thumbImage = [self compressImage:shareIMG];    //需要壓縮到32K后的
    dataModel.imageData  = UIImageJPEGRepresentation(dataModel.thumbImage, 1.0f); //需要壓縮后的很洋,具體大小不知道
    // 短信分享內(nèi)容
    dataModel.SMSDescription = [NSString stringWithFormat:@"%@  %@", shareContent, shareURL];
    
    //分享渠道UI數(shù)據(jù)拼參
    NSDictionary *sinaBlog = [[NSDictionary alloc] initWithObjectsAndKeys:@"新浪微博",SHARE_ICON_TILTE,ShareTypeSinaWeibo,SHARE_TYPE,nil];
    NSDictionary *weiChat  = [[NSDictionary alloc] initWithObjectsAndKeys:@"微信",SHARE_ICON_TILTE,ShareTypeWeixiSession,SHARE_TYPE,nil];
    NSDictionary *message  = [[NSDictionary alloc] initWithObjectsAndKeys:@"短信",SHARE_ICON_TILTE,ShareTypeSMS,SHARE_TYPE ,nil];
    NSDictionary *urlCopy  = [[NSDictionary alloc] initWithObjectsAndKeys:@"復(fù)制鏈接",SHARE_ICON_TILTE,ShareTypeCopy,SHARE_TYPE, nil];
    NSDictionary *QQZone   = [[NSDictionary alloc] initWithObjectsAndKeys:@"QQ空間",SHARE_ICON_TILTE,ShareTypeQQSpace,SHARE_TYPE, nil];
    NSDictionary *weiChatFriendGroup =[[NSDictionary alloc] initWithObjectsAndKeys:@"朋友圈",SHARE_ICON_TILTE,ShareTypeWeixiTimeline,SHARE_TYPE, nil];
    //添加分享渠道到數(shù)組中
    NSMutableArray *shareChannelArr =[[NSMutableArray alloc] initWithObjects:sinaBlog,weiChat,weiChatFriendGroup,message,urlCopy,QQZone, nil];
    
    SouFunShareSDK  *share=[SouFunShareSDK shareInstance];
    share.ShareChannels = shareChannelArr;
    share.cellSize = CGSizeMake(54, 54);
    //彈出分享浮層
    [share showShareViewWithShareDataModel:dataModel inViewInViewController:self];
}

點(diǎn)擊某一個分享渠道充蓝,以微信為例詳解底層邏輯:

點(diǎn)擊微信后,相應(yīng)代理方法喉磁,先判斷是否安裝了微信谓苟,未安裝則提示未安裝微信;如果安裝了微信,將分享的參數(shù)傳遞給微信SDK

-(void)gotoViewControllerWithMark:(NSString *)shareType
}  
   if([shareType isEqualToString:ShareTypeWeixiSession] )
    {
        if(![WXApi isWXAppInstalled])
        {
            [ShareUIToastView showToastViewWithContent:@"您未安裝微信协怒,請先下載安裝" andRect:KTOASTRECT andTime:3.0 andObject:_parentController];
            return;
        }
        [self weChatShare:_shareDataModel];

    }
    else if([shareType isEqualToString:ShareTypeWeixiTimeline])
    {
        if(![WXApi isWXAppInstalled])
        {
            [ShareUIToastView showToastViewWithContent:@"您未安裝微信涝焙,請先下載安裝" andRect:KTOASTRECT andTime:3.0 andObject:_parentController];
            return;
        }
        [self weChatFriendShare:_shareDataModel];
    }else  if ([UtilitiesReachability isAblityForNetwork]==NO){
        
        [ShareUIToastView showToastViewWithContent:@"網(wǎng)絡(luò)連接失敗,請稍后再試" andRect:KTOASTRECT andTime:2.0 andObject:_parentController];
    }     
 }

//微信好友分享
-(void)weChatShare:(SouFunShareDataModel *)shareDataModel
{
    _shareDataModel.currentShareType = @"WXSceneSession";
    if(shareDataModel.onlyText)
    {
        SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
        req.bText = YES;
        req.text = shareDataModel.weChatDescription;
        req.scene = WXSceneSession;
        [WXApi sendReq:req];
    }
    else
    {
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = shareDataModel.weChatTitle;
        message.description = shareDataModel.weChatDescription;
        [message setThumbImage:shareDataModel.thumbImage];
        
        WXWebpageObject *ext = [WXWebpageObject object];
        ext.webpageUrl = shareDataModel.webURL;
        
        message.mediaObject = ext;
        
        SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneSession;
        
        [WXApi sendReq:req];
    }
}
//微信朋友圈分享
-(void)weChatFriendShare:(SouFunShareDataModel *)shareDataModel
{
    _shareDataModel.currentShareType = @"WXSceneTimeLine";
    if(shareDataModel.onlyText)
    {
        SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
        req.bText = YES;
        req.text = shareDataModel.weChaFriendtDescription;
        req.scene = WXSceneTimeline;
        [WXApi sendReq:req];
    }
    else
    {
        WXMediaMessage *message = [WXMediaMessage message];
        message.title = shareDataModel.weChatFriendTitle;
        message.description = shareDataModel.weChaFriendtDescription;
        [message setThumbImage:shareDataModel.thumbImage];
        
        WXWebpageObject *ext = [WXWebpageObject object];
        ext.webpageUrl = shareDataModel.webURL;
        
        message.mediaObject = ext;
        
        SendMessageToWXReq* req = [[SendMessageToWXReq alloc] init];
        req.bText = NO;
        req.message = message;
        req.scene = WXSceneTimeline;
        
        [WXApi sendReq:req];
    }
}

微信API發(fā)起跳轉(zhuǎn)請求后:[WXApi sendReq:req]斤讥,得在appdelegate方法中通過WXApi 處理跳轉(zhuǎn)

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    //delegate用于處理分享結(jié)果的回調(diào)
    return [WXApi handleOpenURL:url delegate:self];
}

在代理方法實(shí)現(xiàn)分享結(jié)果邏輯處理

-(void) onResp:(id)resp
{
    //微信好友纱皆,朋友圈分享
    if([resp isKindOfClass:[SendMessageToWXResp class]])
    {
        NSString *resultMsg = nil;
        int respondStatus = [resp errCode];
        
        if(respondStatus == 0)
        {
            resultMsg = @"分享成功";
        }
        else
        {
            resultMsg = @"分享失敗湾趾,可以再試試~";
        }
        //提示分享結(jié)果
        [ShareUIToastView showToastViewWithContent:resultMsg andRect:KTOASTRECT andTime:3.0 andObject:_parentController];
    }
    //QQ好友芭商,QQ空間分享
    else if([resp isKindOfClass:[SendMessageToQQResp class]])
    {
        NSString *resultMsg = nil;
        int respondStatus = [[resp result]  intValue];
        
        if(respondStatus == 0)
        {
            resultMsg = @"分享成功";
        }
        else
        {
            resultMsg = @"分享失敗派草,可以再試試~";
        }
        
        [ShareUIToastView showToastViewWithContent:resultMsg andRect:KTOASTRECT andTime:3.0 andObject:_parentController];
    }
}

至此,整個分享流程就結(jié)束了铛楣,還需要注意的是iOS9需要將你要在外部調(diào)用的URL scheme列為白名單近迁,才可以完成跳轉(zhuǎn)跳轉(zhuǎn)第三方應(yīng)用,否則會報(bào)錯

canOpenURL: failed **for** URL : "mqzone://qqapp" - error: "This app is not allowed to query for scheme mqzone"
需要在info.plist的設(shè)置LSApplicationQueriesSchemes屬性為數(shù)組簸州,添加所用到的所有scheme
info.plist設(shè)置圖
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末鉴竭,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子岸浑,更是在濱河造成了極大的恐慌搏存,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件矢洲,死亡現(xiàn)場離奇詭異璧眠,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)读虏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進(jìn)店門责静,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人盖桥,你說我怎么就攤上這事灾螃。” “怎么了揩徊?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵腰鬼,是天一觀的道長。 經(jīng)常有香客問我塑荒,道長熄赡,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任袜炕,我火速辦了婚禮本谜,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘偎窘。我一直安慰自己乌助,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布陌知。 她就那樣靜靜地躺著他托,像睡著了一般。 火紅的嫁衣襯著肌膚如雪仆葡。 梳的紋絲不亂的頭發(fā)上赏参,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天志笼,我揣著相機(jī)與錄音,去河邊找鬼把篓。 笑死纫溃,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的韧掩。 我是一名探鬼主播紊浩,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼疗锐!你這毒婦竟也來了坊谁?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤滑臊,失蹤者是張志新(化名)和其女友劉穎口芍,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體雇卷,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鬓椭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了聋庵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片膘融。...
    茶點(diǎn)故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖祭玉,靈堂內(nèi)的尸體忽然破棺而出氧映,到底是詐尸還是另有隱情,我是刑警寧澤脱货,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布岛都,位于F島的核電站,受9級特大地震影響振峻,放射性物質(zhì)發(fā)生泄漏臼疫。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一扣孟、第九天 我趴在偏房一處隱蔽的房頂上張望烫堤。 院中可真熱鬧,春花似錦凤价、人聲如沸鸽斟。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽富蓄。三九已至,卻和暖如春慢逾,著一層夾襖步出監(jiān)牢的瞬間立倍,已是汗流浹背灭红。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留口注,地道東北人变擒。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓,卻偏偏與公主長得像疆导,于是被迫代替她去往敵國和親赁项。 傳聞我的和親對象是個殘疾皇子葛躏,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容