iOS第三方SDK集成——快速集成微信、QQ、微博分享

一直觉得使用友盟SDK和ShareSDK来实现应用的分享功能是一种的表现。而系统自带分享SLComposeViewController又有很大的局限性。所以,自己构造分享界面和实现分享功能是一件必走之路。好在可以封装一下,便于快速集成。

Step1 各个平台创建应用

预先通知一下需要准备的资源,这样接下来进行会很快。

  • 应用名称,比如:v2Ex
  • 应用介绍
  • 应用bundleID
  • 应用appid
  • 28x28,108x108,16x16,512x512,16x16, 80x80 120x120象素的图标
  • 480x800象素的2张介绍图(QQ)
  • 450x300象素的3张介绍图(新浪微博)
1. 登录微信开放平台,创建应用,得到APPKEY。
iOS第三方SDK集成——快速集成微信、QQ、微博分享_第1张图片
Snip20160627_3.png
iOS第三方SDK集成——快速集成微信、QQ、微博分享_第2张图片
Snip20160627_4.png

创建应用需要名称,简介,图片28x28,108x108 大小的png图片

2.登录QQ开放平台,创建应用。得到APPid
iOS第三方SDK集成——快速集成微信、QQ、微博分享_第3张图片
Snip20160627_1.png
iOS第三方SDK集成——快速集成微信、QQ、微博分享_第4张图片
Snip20160627_2.png

16x16 512x512

3.登录微博开放平台,创建应用。得到APPKEY

需要16x16 80x80 120x120象素图标 ,450x300象素的3张介绍图。

Step2 封装分享的实现逻辑

1.导入第三方SDK

导入之后,需要添加以下几个库才能正常运行

iOS第三方SDK集成——快速集成微信、QQ、微博分享_第5张图片
Snip20160627_5.png

如果使用新浪微博分享的话需要再加入ImageIO.framework
还需要设置Other Linker Flags -ObjC

iOS第三方SDK集成——快速集成微信、QQ、微博分享_第6张图片
Snip20160628_2.png
2.封装分享内容
    ///分享的标题,非空
@property(nonatomic,copy)NSString *shareTitle;
    ///分享的内容,可为空
@property(nonatomic,copy)NSString *shareContent;
    ///分享的占位图片的url
@property(nonatomic,copy)NSString *shareThumbImageUrl;
    ///分享的占位图片data数据
@property(nonatomic,copy)NSData *shareThumbImageData;
    ///分享的点击跳转的链接
@property(nonatomic,copy)NSString *shareUrl;
3.封装分享实例(此处的分享只设定为分享一个链接,包括标题,内容,占位图和点击的URL)
- (BOOL)shareLinkToWeChatWithScene:(enum WXScene)scene shareModel:(HBShareModel *)shareModel
{
    if ([WXApi isWXAppInstalled]) {
        WXMediaMessage *mediaMessage = [WXMediaMessage message];
        mediaMessage.title = shareModel.shareTitle.length > 0 ? shareModel.shareTitle : @"标题";
        mediaMessage.description = shareModel.shareContent.length > 0 ? shareModel.shareContent : @"";
        WXWebpageObject *webPage = [WXWebpageObject object];
        webPage.webpageUrl = shareModel.shareUrl.length > 0 ? shareModel.shareUrl : @"";
        mediaMessage.mediaObject = webPage;
        
        if (shareModel.shareThumbImageData) {
            [mediaMessage setThumbData:shareModel.shareThumbImageData];
        }else if ( shareModel.shareThumbImageUrl) {
                //此处有一个隐患,url获取data是一个同步请求
           UIImage *image = [UIImage imageWithData:[NSData dataWithContentsOfURL:[NSURL URLWithString:shareModel.shareThumbImageUrl]]];
            [mediaMessage setThumbImage:image];

        }
            //随意设置,便于统计作用
        mediaMessage.mediaTagName   = @"WECHAT_TAG_SHARE";
        SendMessageToWXReq *request = [SendMessageToWXReq new];
        request.bText = NO;
        request.message = mediaMessage;
        request.scene = scene;
        
        return [WXApi sendReq:request];
        
    }else{
        [self handlerNotInstallAppWithTytpe:WeChatFriend];
        return NO;
    }
}
- (BOOL)shareLinkToQQWithScene:(NSInteger)scene shareModel:(HBShareModel *)shareModel
{
    if ([TencentOAuth iphoneQQInstalled]) {
        QQApiNewsObject *newsObject = nil;
        NSString *title       = shareModel.shareTitle.length > 0 ? shareModel.shareTitle : @"标题";
        NSString *description = shareModel.shareContent.length > 0 ? shareModel.shareContent : @"";
        NSString * str_url = shareModel.shareUrl.length > 0 ? shareModel.shareUrl : @"";
        NSURL  *url = [NSURL URLWithString:str_url];
        NSData *imageData = shareModel.shareThumbImageData;
        if (imageData) {
             newsObject = [QQApiNewsObject objectWithURL:url title:title description:description  previewImageData:imageData];
        }else{
            NSString *imageUrl = shareModel.shareUrl.length > 0?shareModel.shareUrl:@"";
            newsObject = [QQApiNewsObject objectWithURL:url title:title description:description previewImageURL:[NSURL URLWithString:imageUrl]];
        }
        
        SendMessageToQQReq* request  = [SendMessageToQQReq reqWithContent:newsObject];
        QQApiSendResultCode resultCode = 0;
            //1 为QQZOne 0 为QQ
        if (scene) {
             resultCode = [QQApiInterface SendReqToQZone:request];
        }else{
             resultCode = [QQApiInterface sendReq:request];
        }
        if (0 == resultCode) {
            return YES;
        }
        return NO;
    }else{
        [self handlerNotInstallAppWithTytpe:QQFriend];
        return NO;
    }

}
- (BOOL)shareLinkToWeiboWithShareModel:(HBShareModel *)shareModel {
    if ([WeiboSDK isWeiboAppInstalled]) {
        
        WBWebpageObject *webpage = [WBWebpageObject object];
        webpage.objectID = shareModel.shareUrl ;
        webpage.title = shareModel.shareTitle.length > 0 ? shareModel.shareTitle : @"标题";
        webpage.description =shareModel.shareContent.length > 0 ? shareModel.shareContent : @"";
        if (shareModel.shareThumbImageData) {
            webpage.thumbnailData = shareModel.shareThumbImageData;
        }else if (shareModel.shareThumbImageUrl) {
                //此处有一个隐患,url获取data是一个同步请求
            NSData *data = [NSData dataWithContentsOfURL:[NSURL URLWithString:shareModel.shareThumbImageUrl]];
             webpage.thumbnailData = data;
        }
        webpage.webpageUrl = shareModel.shareUrl;
        WBMessageObject *message = [WBMessageObject message];
        message.mediaObject = webpage;
        WBAuthorizeRequest *authRequest = [WBAuthorizeRequest request];
        WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message authInfo:authRequest access_token:nil];
        return [WeiboSDK sendRequest:request];
    }else {
        [self handlerNotInstallAppWithTytpe:WeiBo];
        return NO;
    }
    
    
}

4.创建URL Scheme,便于返回应用
  • 微信的URL Scheme设置为:appkey
  • QQ的设置为:tencent+申请到的appID
  • 微博的为:wb+appkey
iOS第三方SDK集成——快速集成微信、QQ、微博分享_第7张图片
Snip20160628_1.png
5.构造个性化分享View

这一步仁者见仁,智者见智了,构造一个个性化十足的VIew,调用shareManager的相关方法即可。

6. plus iOS9相关

info.plist中除了要设置App Transport Security Settings 的Allow Arbitrary Loads为YES,还需要单独为应用跳转设置LSApplicationQueriesSchemes

LSApplicationQueriesSchemes

    
    wechat
    weixin
    
    sinaweibohd
    sinaweibo
    sinaweibosso
    weibosdk
    weibosdk2.5
    
    mqqapi
    mqq
    mqqOpensdkSSoLogin
    mqqconnect
    mqqopensdkdataline
    mqqopensdkgrouptribeshare
    mqqopensdkfriend
    mqqopensdkapi
    mqqopensdkapiV2
    mqqopensdkapiV3
    mqzoneopensdk
    wtloginmqq
    wtloginmqq2
    mqqwpa
    mqzone
    mqzonev2
    mqzoneshare
    wtloginqzone
    mqzonewx
    mqzoneopensdkapiV2
    mqzoneopensdkapi19
    mqzoneopensdkapi
    mqqbrowser
    mttbrowser

    <

3. 问题描述

  1. 此处的分享没有处理回调。因为分享是把分享内容传递出去,不需要回传回内容回来,所以回调没有处理。下一篇,集成微信,QQ登录的文章会讨论如何处理回调。
  2. 微博的分享由于没有申请APPKey成功(审核还真严格),所以就没有测试成功。微信和QQ,亲测分享成功,且回调正常。
  3. 测试代码放在了这里。https://coding.net/u/HustBroventure/p/ThirdPartSDKIntegrate/git 原谅我没提交到GitHub。提交了一下午,文件太大,没提交成功。

你可能感兴趣的:(iOS第三方SDK集成——快速集成微信、QQ、微博分享)