QQ以及QQ空间分享相关

来源:互联网 发布:淘宝膜法世家是真的吗 编辑:程序博客网 时间:2024/04/30 17:06

最近做了一个分享内容到QQ以及QQ空间的功能,记录一下以备不时之需。

1、首先我们需要到http://wiki.connect.qq.com/这个网站里为自己创建一个应用,并获取一个APP ID和APP KEY。这两样东西在使用QQ登录和分享到QQ/QQ空间都会用到。这里只讲分享到QQ/QQ空间的处理。

APP ID是十位左右的数字,APP KEY是由大小写字母、数字组成的字符串

顺便提一句,注册的安卓应用和苹果应用APP ID和APP KEY都是一致的,所以安卓或苹果只需注册一个则两者都可以使用。

2、下载腾讯的SDK http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD 选择这个:iOS_SDK_V3.1.0 并下载。下载完成后将SDK中的 TencentOpenAPI.framework 和 TencentOpenApi_IOS_Bundle.bundle文件放到自己工程内。

3、首先我们需要在自己工程的AppDelegate.m文件中导入下面三个头文件:
import ” TencentOpenAPI/TencentOAuth.h”
import “TencentOpenAPI/QQApiInterface.h”
import “TencentOpenAPI/TencentApiInterface.h”

然后需要初始化一下授权:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {'''(void)[[TencentOAuth alloc] initWithAppId:TENCENT_ID andDelegate:self];'''return YES;}

TENCENT_ID就是注册应用时获取的APP ID。

4.1、在TARGETS>INFO>URL TYPES中加入腾讯的URL Schemes,格式为:tencent+APP ID。如下图所示
这里写图片描述
这样就可以跳转到QQ应用准备分享。

4.2、苹果公司iOS 9系统策略更新,限制了http协议的访问,此外应用需要在“Info.plist”中将要使用的URL Schemes列为白名单,才可正常检查其他应用是否安装。

受此影响,当你的应用在iOS 9中需要使用 QQ/QQ空间/支付宝/微信SDK 的相关能力(分享、收藏、支付、登录等)时,需要在“Info.plist”里增加如下代码:

<key>LSApplicationQueriesSchemes</key> <array>    <!-- 微信 URL Scheme 白名单-->    <string>wechat</string>    <string>weixin</string>    <!-- 新浪微博 URL Scheme 白名单-->    <string>sinaweibohd</string>    <string>sinaweibo</string>    <string>sinaweibosso</string>    <string>weibosdk</string>    <string>weibosdk2.5</string>    <!-- QQ、Qzone URL Scheme 白名单-->    <string>mqqapi</string>    <string>mqq</string>    <string>mqqOpensdkSSoLogin</string>    <string>mqqconnect</string>    <string>mqqopensdkdataline</string>    <string>mqqopensdkgrouptribeshare</string>    <string>mqqopensdkfriend</string>    <string>mqqopensdkapi</string>    <string>mqqopensdkapiV2</string>    <string>mqqopensdkapiV3</string>    <string>mqzoneopensdk</string>    <string>wtloginmqq</string>    <string>wtloginmqq2</string>    <string>mqqwpa</string>    <string>mqzone</string>    <string>mqzonev2</string>    <string>mqzoneshare</string>    <string>wtloginqzone</string>    <string>mqzonewx</string>    <string>mqzoneopensdkapiV2</string>    <string>mqzoneopensdkapi19</string>    <string>mqzoneopensdkapi</string>    <string>mqzoneopensdk</string>    <!-- 支付宝  URL Scheme 白名单-->    <string>alipay</string>    <string>alipayshare</string></array>

5、准备分享内容的主体(以分享新闻链接为例):

NSString *utf8String = @"http://www.163.com";NSString *title = @"新闻标题";NSString *description = @"新闻描述";NSString *previewImageUrl = @"http://cdni.wired.co.uk/620x413/k_n/NewsForecast%20copy_620x413.jpg";QQApiNewsObject *newsObj = [QQApiNewsObjectobjectWithURL:[NSURL URLWithString:utf8String]title:titledescription:descriptionpreviewImageURL:[NSURL URLWithString:previewImageUrl]];SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];//将内容分享到qq//QQApiSendResultCode sent = [QQApiInterface sendReq:req];//将内容分享到qzoneQQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];

详细的分享内容可以参照 腾讯的api使用说明:http://wiki.connect.qq.com/ios_sdk_api_%E4%BD%BF%E7%94%A8%E8%AF%B4%E6%98%8E

6、设置分享后回调。在AppDelegate.m里设置回调处理,这样设置的目的是分享完成之后能够返回自己的应用:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation {   if([url.absoluteString hasPrefix:[NSString stringWithFormat:@"tencent%@",TENCENT_ID]]){       return  [QQApiInterface handleOpenURL:url delegate:self];    }    return YES;}

设置分享完成,返回自己应用后的处理:

#pragma mark - WeiChat或QQ 发送与接收请求处理- (void)onReq:(BaseReq *)req {    Log(@"on Req: %@", req.description);}- (void)onResp:(BaseResp *)resp {    if ([resp isKindOfClass:SendMessageToWXResp.class]) {        if (resp.errCode == 0) {            NewAlertSuccess(@"提示", @"分享成功!");        } else if (resp.errCode != -2) {            NewAlertWarning(@"提示", resp.errStr);        }    } else if([resp isKindOfClass:SendAuthResp.class]) {        SendAuthResp *aresp = (SendAuthResp *)resp;        if (aresp.errCode== 0) {            NSString *code = aresp.code;            [[NSNotificationCenter defaultCenter] postNotificationName:@"WeiChatCode" object:code];        }    }else if ([resp.class isSubclassOfClass: [SendMessageToQQResp class]]){ //qq回调        SendMessageToQQResp *QQResp = (SendMessageToQQResp *)resp;        if ([QQResp.result isEqualToString:@"0"]) {            NewAlertSuccess(@"提示", @"分享成功!");        }    }}

需要注意一点,如果自己应用中也同时集成了微信分享的话,由于微信分享的回调处理的协议方法名与QQ是一样的,只有返回参数不同,可能会有问题存在。这时我们只需像上边那样,判断一下返回参数的类型分别处理即可。

0 0
原创粉丝点击