「iOS」项目中集成微信、微博、QQ分享三大平台步骤

为了方便第三方开发者快速简单的集成国内三大社交平台(微信,QQ,微博),故造此轮子。

目前支持微信(微信好友,微信朋友圈),QQ,QQ空间,新浪微博)

关于此模块的Bug反馈、建议、口水等等,请大家狠拍并提交到Github上,我会尽快解决。

该模块会继续完善优化,争取为大家提供一个更快速、更简单、更规范、扩展性更好的集成模块。

特点:

  • 快速
  • 简单
  • 易集成
  • 支持网页/SSO
  • 扩展性好
  • 可定制

===

更新 Log

* 2015-09-29 修复网页微博分享时内容没有传入的 Bug
* 2015-10-29 适配 iOS 9 下分享
* 2015-11-04 新增三大平台分享后的回调
* 2016-01-11 新增适配 iOS 9 SSO 的 `LSApplicationQueriesSchemes`配置说明

集成步骤

1. 下载微信、QQ、微博的社交sdk并导入至项目中

  • 可在本页下方参考资料中取得

2. 导入它们所需的系统framework与库

程序 —— Targets —— Build Phases —— Link Binary With Libraries

Security.framework, SystemConfiguration.framework, CoreGraphics.framework, CoreTelephony.framework, QuartzCore.framework, ImageIO.framework, CoreText.framework, UIKit.framework, Foundation.framework, libsqlite3.dylib, libc++.dylib, libz.dylib, libstdc++.dylib, libiconv.dylib

  • (具体可参考本页底部参考资料链接)

3. 设置编译选项

程序 —— Targets —— Build Settings —— Linking —— Other Linker Flag 添加 -ObjC

4. 设置URL Schema

  1. 程序 —— Targets —— Info —— URL Types

分别添加微信,QQ,微博

tencentopenapi : tencent222222

mqqapi : QQ0605C97A

weibo : wb2045436852

weixin : wxd930ea5d5a258f4f

  • 以上均为测试app key,具体可以去对应的开放平台注册

  • mqqapi 是 tencent 的 app key 转十六进制,不足八位在前面补 0 的结果

  1. 在 Info.plist 中添加LSApplicationQueriesSchemes项,
    分别添加社交平台的几个白名单:
    mqq
    mqqopensdkapiV2
    mqqapi
    weibosdk2.5
    weibosdk
    weibo
    weixin
    wechat

具体列表请至获取iOS 9 应用跳转适配

5. 导入XMShareView至项目中

XMShareView结构介绍:
名称 解释
CommonMarco.h 通用宏文件,包含APP Key等宏
ExtView/ 扩展View,VerticalUIButton为图片文件垂直对齐按钮
Resource/ 图片等资源,包含微信、QQ、微博图标
ShareUtil/ 分享工具类
XMShareView.h 分享显示视图

6. 在AppDelegate.m中注册

  1. 导入文件头
#import "WXApi.h"
#import <TencentOpenAPI/TencentOAuth.h>
#import "WeiboSDK.h"
  1. application -> didFinishLaunchingWithOptions 方法中注册
[WXApi registerApp:APP_KEY_WEIXIN];
[WeiboSDK enableDebugMode:YES];
[WeiboSDK registerApp:APP_KEY_WEIBO];

7. 在ViewController.m 中引用

  • 导入文件头

    #import "XMShareView.h"
    
  • 添加一个属性

@property (nonatomic, strong) XMShareView *shareView;
  • 在点击分享的方法添加如下代码:
   if(!self.shareView){
        
        self.shareView = [[XMShareView alloc] initWithFrame:self.view.bounds];
        
        self.shareView.alpha = 0.0;

        self.shareView.shareTitle = NSLocalizedString(@"分享标题", nil);
        
        self.shareView.shareText = NSLocalizedString(@"分享内容", nil);
        
        self.shareView.shareUrl = @"http://xumeng.github.com";
        
        [self.view addSubview:self.shareView];
        
        [UIView animateWithDuration:1 animations:^{
            self.shareView.alpha = 1.0;
        }];
        
        
    }else{
        [UIView animateWithDuration:1 animations:^{
            self.shareView.alpha = 1.0;
        }];
        
    }

8. 处理 URL 跳转

AppDelegate 类中实现两个处理 URL 跳转的方法。

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
{
    if ([[url absoluteString] hasPrefix:@"tencent"]) {
        
//        return [TencentOAuth HandleOpenURL:url];
        return [QQApiInterface handleOpenURL:url delegate:self];
        
    }else if([[url absoluteString] hasPrefix:@"wb"]) {
        
        return [WeiboSDK handleOpenURL:url delegate:self];
        
    }else if([[url absoluteString] hasPrefix:@"wx"]) {

        //  处理微信回调需要在具体的 ViewController 中处理。
        ViewController *vc = (ViewController *)self.window.rootViewController;
        return [WXApi handleOpenURL:url delegate:vc];
        
    }
    
    return NO;
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
{
    if ([[url absoluteString] hasPrefix:@"tencent"]) {
        
        return [TencentOAuth HandleOpenURL:url];
        
    }else if([[url absoluteString] hasPrefix:@"wb"]) {
        
        return [WeiboSDK handleOpenURL:url delegate:self];
        
    }else{
        
        ViewController *vc = (ViewController *)self.window.rootViewController;
        return [WXApi handleOpenURL:url delegate:vc];
        
    }
}

9. 处理分享后的回调

特别提醒:(下方方法体内是示例代码,具体业务逻辑请具体实现)

  • 微信分享:在具体的调用 ViewController 类里面实现微信 WXApiDelegate 协议,然后实现以下方法:
- (void)onResp:(BaseResp *)resp
{
    NSString *message;
    if(resp.errCode == 0) {
        message = @"分享成功";
    }else{
        message = @"分享失败";
    }
    showAlert(message);
}
  • QQ 分享:在 AppDelegate 类中实现 QQApiInterfaceDelegate 协议,然后实现以下方法:
- (void)onResp:(QQBaseResp *)resp
{
    NSString *message;
    if([resp.result integerValue] == 0) {
        message = @"分享成功";
    }else{
        message = @"分享失败";
    }
    showAlert(message);
}
  • 微博分享:在 AppDelegate 类中实现 WeiboSDKDelegate 协议,然后实现以下方法:
- (void)didReceiveWeiboResponse:(WBBaseResponse *)response
{
    NSString *message;
    switch (response.statusCode) {
        case WeiboSDKResponseStatusCodeSuccess:
            message = @"分享成功";
            break;
        case WeiboSDKResponseStatusCodeUserCancel:
            message = @"取消分享";
            break;
        case WeiboSDKResponseStatusCodeSentFail:
            message = @"分享失败";
            break;
        default:
            message = @"分享失败";
            break;
    }
    showAlert(message);
}

参考资料

QQ iOS SDK 环境搭建

新浪微博 iOS SDK 环境搭建

微信 iOS SDK 环境搭建

iOS 9 适配 SSO

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,362评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,330评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,247评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,560评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,580评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,569评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,929评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,587评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,840评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,596评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,678评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,366评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,945评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,929评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,165评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,271评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,403评论 2 342

推荐阅读更多精彩内容

  • iOS开发过程中可能会遇到需要进行第三方分享的需求,比如向QQ,微信,微博等分享,我们今天要讲到的方式是使用了一个...
    iOS菜鸟攻城狮阅读 1,372评论 0 4
  • WebSocket-Swift Starscream的使用 WebSocket 是 HTML5 一种新的协议。它实...
    香橙柚子阅读 23,687评论 8 183
  • 昨晚,纵火者摧毁了我的家园 高举胜利的火把 狂欢 焚烧经典 牧羊人也在今日赶来 手捧鲜花 美梦以及安慰 他说孩子 ...
    阿洛特斯阅读 129评论 0 1
  • 心飞着飞着, 已飞向了高傲, 孤冷也疼痛; 脚走着走着, 却拔不出尘世, 乏力也沉重。 尘世囚禁了高傲, 孤冷遭遇...
    Luciahuang阅读 284评论 0 2
  • 一直以为自己人际关系挺好的,直到现在我才发现,当我被误解时,连个发泄的朋友也没有。看着周围的人一天天在变,我是否也...
    mentaldisease阅读 193评论 0 0