ios,app中可以ios 网页调用appqq接口实现即时通讯吗?

即时通讯软件(QQ,MSN等)中的聊天记录是怎样保存和实现的?
[问题点数:0分]
即时通讯软件(QQ,MSN等)中的聊天记录是怎样保存和实现的?
[问题点数:0分]
不显示删除回复
显示所有回复
显示星级回复
显示得分回复
只显示楼主
相关帖子推荐:
本帖子已过去太久远了,不再提供回复功能。企业即时通讯APP:云之家下载量居首 企业QQ第三
作者: 发布时间: 08:49:09 来源:中国软件资讯网
  中国软件资讯网11月25日消息 随着企业信息化过程的不断演进,即时通讯从个人逐渐延伸到企业端,尤其是随着移动办公的发展,企业即时通讯APP越来越受到企业的关注。
  日前,比达咨询(BigData)数据中心对国内主流企业即时通讯类APP在安卓分发平台的下载量统计结果显示,截至日,云之家、今目标、企业QQ位居下载总量前三甲,紧随其后的依次是微洽、263云通信、企业微信、联信、IMO云办公室、EC lite和信鸽。
  数据显示,在国内八大安卓应用分发平台(百度手机助手、应用宝、安卓市场、木蚂蚁、豌豆荚、91助手、360手机助手、安智市场)上,云之家以82.44万次的下载量位居首位。今目标、企业QQ、微洽三者下载总量差别不大,分别以76.96万次、75.27万次和73.66万次位居第2-4位。值得注意的是,腾讯企业级产品企业QQ下载总量为75.27万次,在企业级市场并不占绝对优势。
  此外,263云通信、企业微信、联信、IMO云办公室下载总量分别为58.46万次、39.38万次、22.06万次和10.17万次,而EC lite和信鸽分别以5.03万次和2.73万次处于落后位置。
  具体统计数据如下表所示:
  表:国内企业通讯APP在八大安卓应用分发平台上的下载总量(单位:万次)
  从各大安卓应用分发平台的分发量来看,百度手机助手分发量最高,其累计下载总量达164.02万次;360手机助手以86.18万次排在第二。其他安卓平台分发量均未突破50万次。
  比达咨询(BigData)分析认为,时至今日,企业即使通讯仍处初级市场,不似QQ、微信、MSN等个人即时通讯市场那般红火,真正意义上的企业即时通讯APP并未形成主流。(文/海岚)
【关注微信公众号,微信搜:中国软件资讯网】【关注微信公众号,微信搜:CNIT观察】
品牌展示区
中国软件资讯网
All Rights Reserved.
中华人民共和国
京公网安备32号如何在一个 app 内调用 QQ 空间发表说说和查看好友说说的接口?
想做一个APP,需要调用qq空间发表说说和查看好友说说的接口。可是腾讯开放api目前没有提供该接口,有什么别的方法获取吗?腾讯可不可以像微博的api一样多提供一些接口供开发者调用?
不答题,只是说说个人看法。如果不需要登录,那么一定是没什么问题的。你只需要模拟网页请求,把返回的HTML标签,解析即可。就算登录可以实现,你需要自己来提供登录框,让用户自己输入用户名和密码。而非oauth认证。对于一个有经验的用户来说。他不一定会去登录。腾讯也一定会有自己的一套防止非自家应用请求的机制。从这一点来讲,也不太可能。Good luck.IOS-QQ登陆API | Shall-电商漂流记
QQLoginAppDelegate.h
QQLoginAppDelegate.h
Created by xushao on 2/3/14.
Copyright (c) 2014 TGG. All rights reserved.
@interface QQLoginAppDelegate : UIResponder
@property (strong, nonatomic) UIWindow *
QQLoginAppDelegate.m
-(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
return [TencentOAuth HandleOpenURL:url];
-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
return [TencentOAuth HandleOpenURL:url];
QQLoginViewController
QQLoginViewController.m
Created by xushao on 2/3/14.
Copyright (c) 2014 TGG. All rights reserved.
#import "QQLoginViewController.h"
@interface QQLoginViewController ()
@property(nonatomic, strong)TencentOAuth *tencentA
@implementation QQLoginViewController
- (void)viewDidLoad
[super viewDidLoad];
[self initAPI];
// Do any additional setup after loading the view, typically from a nib.
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
- (IBAction)login:(UIButton *)sender {
NSArray *permission = [NSArray arrayWithObjects:@"get_user_info",@"add_t", nil];
[self.tencentAuth authorize:permission inSafari:NO];
- (IBAction)logout:(UIButton *)sender {
[self.tencentAuth logout:self];
-(void)initAPI{
self.tencentAuth = [[TencentOAuth alloc] initWithAppId:@"" andDelegate:self];
-(void)tencentDidLogin
self.labelText.text = @"login succeful";
-(void)tencentDidNotNetWork{
self.labelText.text=@"There's not newwork";
-(void)tencentDidNotLogin:(BOOL)cancelled
if (cancelled) {
self.labelText.text = @"canceled";
self.labelText.text =@"didn't login";
-(void)tencentDidLogout
self.labelText.text =@"logout";
iOS SDK 环境搭建
变更历史 3
1. iOS SDK 下载 4
2. iOS SDK目录结构 4
3. 将iOS SDK文件添加到工程中 4
4. 修改必要的代码 12
4.1 修改工程配置文件 12
4.2 重写AppDelegate 的handleOpenURL和openURL方法 13
4.3 在代码中实现TencentSessionDelegate协议中的方法 14
4.4 初始化iOS SDK API数据对象TencentOAuth。 14
5. 调用SDK登录 15
QQ登录iOS SDK 封装了QQ登录的登录授权以及大部分OpenAPI,应用只需要修改相应参数,不需要理解验证授权流程,即可快速实现QQ登录功能。
iOS平台上(iPad,iPhone,iPod)的应用,请在申请appid,appkey后,使用QQ互联提供的iOS SDK。
1.5版本增加 QQAPI 对象,以支持手机QQ的调用。以前申请过 APPID 类似“QQXXXXXXXX”的开发商,建议重新申请。为了兼容旧版本的手机QQ,需要增加 URL Scheme,QQ + 十六进制新AppId,不足八位在首部补0。(如 appid=222222 则 scheme=QQ0003640E)
手机QQ SDK说明文档详见iOS SDKAPI使用说明。
本SDK仅适用于移动应用,即基于使用Implicit_Grant方式获取Access_Token接入的应用。
V2.2 支持拉起手机QQ QQ空间结合版进行QZone分享
V2.0.1 增加全新的分享到QZone的接口
新增API判断手机QQ版本
新增WPA临时会话
支持分享音频消息
Demo 实现简单调整
分享消息结构化改造
新增系统库Security.framework
v1.8 新增了手机QZone开放平台能力支持
新增了调用腾讯微云的SDK接口
新增了1个发送腾讯微博的接口
v1.5 新增了手机QQ SDK的支持
新增手机QQ SSO 登录实现
新增SendStory空间定向分享接口(sendStory:friendList:)
新增增量授权机制
新版SDK以framework形式发布
新增1个设置QQ头像接口(setUserHeadpic)
新增2个微博相关接口(matchNickTips,getIntimateFriends)
新增2个会员相关接口(getVipInfo,getVipRichInfo)
1. iOS SDK 下载
请到SDK下载页面下载最新版本QQ登录iOS SDK。
2. iOS SDK目录结构
iOS SDK包中带有两个文件:
1. TencentOpenAPI.framework打包了iOS SDK的头文件定义和具体实现。
2. TencentOpenApi_iOS_Bundle.bundle 打包了iOS SDK需要的资源文件。
3. 将iOS SDK文件添加到工程中
1. 将iOS SDK中的TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle文件拷贝到应用开发的目录下。
然后将TencentOpenAPI.framework从SDK的保存目录拖拽到工程导航视图(project navigator)中的Frameworks虚拟目录下。
注意TencentOpenAPI.framework和TencentOpenApi_IOS_Bundle.bundle必须放到应用的资源的根目录下,否则会出现资源无法加载的问题。
2. 在弹出的对话框中勾选“Create groups for any added folders”,去掉“copy items into destination group’s folder(if needed)”,在Add to targets中选择要加入SDK的target之后点击finish。完成之后就将iOS SDK的framework文件加入了开发工程中。
3. 添加SDK依赖的系统库文件。分别是”Security.framework”, “libiconv.dylib”,“SystemConfiguration.framework”,“CoreGraphics.Framework”、“libsqlite3.dylib”、“CoreTelephony.framework”、“libstdc++.dylib”、“libz.dylib”。
在Xcode中打开工程配置文件,选择“summary”一栏。
4. 在“summary”中选择“Linked Frameworks and Libraries”一栏,点击“+”图标。
5. 直接在默认库文件中选择后点击“Add”,下图以添加“SystemConfiguration.framework”为例:
6. 返回后看到“SystemConfiguration.framework”已经在“Linked Frameworks and Libraries”中出现。
7. 在Xcode中打开工程配置文件,选择“Build Phases”一栏。
8.在“Build Phases”中选择展开“Copy Bundle Resources”一栏,并点击“+”图标
9. 选择“Add Other...”,进入iOS SDK文件所在目录,选择TencentOpenApi_IOS_Bundle.bundle,点击回车或者点击“Open”。
10. 返回后看到TencentOpenApi_IOS_Bundle.bundle已经在“Copy Bundle Resources”中出现。
11. 修改必要的工程配置属性。
在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”。
4. 修改必要的代码
4.1 修改工程配置文件
在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加一条新的“URL scheme”,新的scheme = tencent + appid。如果您使用的是XCode3或者更低的版本,则需要在plist文件中添加。Demo中我们注册的appid是222222。如下图
4.2 重写AppDelegate 的handleOpenURL和openURL方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
return [TencentOAuth HandleOpenURL:url];
handleOpenURL:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
return [TencentOAuth HandleOpenURL:url];
4.3 在代码中实现TencentSessionDelegate协议中的方法
具体协议可以参照TencentOpenAPI.framework /Headers中的TencentOAuth.h文件
?4.4 初始化iOS SDK API数据对象TencentOAuth。
?(1) 创建TencentOAuth并初始化其appid,demo为222222。delegate为实现TencentSessionDelegate的对象:
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222",
andDelegate:self];
这里delegate不能为空?(2) 初始化redirectURI(这里需要填写注册APP时填写的域名。默认可以不用填写。建议不用填写。demo中注册时的地址是“”):
_tencentOAuth.redirectURI = @"";
?(3)设置应用需要用户授权的API列表。
(建议如果授权过多的话,可能会造成用户不愿意授权。这里最好只授权应用需要用户赋予的授权。):
_permissions =
[[NSArray arrayWithObjects:@"get_user_info", @"add_t", nil] retain];
5. 调用SDK登录
1.登录时,调用TencetnOAuth对象的authorize方法:
[_tencentOAuth authorize:_permissions inSafari:NO];
2. 登录完成后,会调用TencentSessionDelegate中关于登录的协议方法。?登录成功:
@protocol TencentSessionDelegate
- (void)tencentDidLogin
_labelTitle.text = @"登录完成";
if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length])
记录登录用户的OpenID、Token以及过期时间
_labelAccessToken.text = _tencentOAuth.accessT
_labelAccessToken.text = @"登录不成功 没有获取accesstoken";
非网络错误导致登录失败:
@protocol TencentSessionDelegate
-(void)tencentDidNotLogin:(BOOL)cancelled
if (cancelled)
_labelTitle.text = @"用户取消登录";
_labelTitle.text = @"登录失败";
?网络错误导致登录失败:
@protocol TencentSessionDelegate
-(void)tencentDidNotNetWork
_labelTitle.text=@"无网络连接,请设置网络";
3. 登录成功后,即可获取到access token和openid。accessToken和 openid保存在TencentOAuth对象中。可以通过相应的属性方法直接获得。
[_tencentOAuth accessToken] ;
[_tencentOAuth openId] ;
特别提示:
1.由于登录是异步过程,这里可能会由于用户的行为导致整个登录的的流程无法正常走完,即有可能由于用户行为导致登录完成后不会有任何登录回调被调用。开发者在使用SDK进行开发的时候需要考虑到这点,防止由于一直在同步等待登录的回调而造成应用的卡死,建议在登录的时候将这个实现做成一个异步过程。?2.获取到的access token具有3个月有效期,过期后提示用户重新登录授权。
3. 第三方网站可存储access token信息,以便后续调用OpenAPI访问和修改用户信息时使用。如果需要保存授权信息,需要保存登录完成后返回的accessToken,openid 和 expirationDate三个数据,下次登录的时候直接将这三个数据是设置到TencentOAuth对象中即可。
[_tencentOAuth accessToken] ;
[_tencentOAuth openId] ;
[_tencentOAuth expirationDate] ;
[_tencentOAuth setAccessToken:accessToken] ;
[_tencentOAuth setOpenId:openId] ;
[_tencentOAuth setExpirationDate:expirationDate] ;
?4. 建议应用在用户登录后,即调用getUserInfo接口获得该用户的头像、昵称并显示在界面上,使用户体验统一。
1. SSO安全登录QQ帐号
iOS SDK支持应用跳转到手机QQ进行登录,给用户提供更加安全、快捷的体验 。如果用户没有安装手机QQ,将打开登录页面。
2. 分享到QQ和QQ空间
2.1 分享到QQ好友
分享到QQ好友支持发送:
- 纯文本消息(QQApiTextObject)
- 纯图片消息(QQApiImageObject)
- 新闻类消息(QQApiNewsObject)
- 音频类消息(QQApiImageObject)
- 视频类消息(QQApiVideoObject)
在用户安装了手机QQ时通过手机QQ进行分享,否则调用浏览器页面进行分享。
其中文本消息,图文消息和音频消息的title是必须的,summary可以不填,具体调用请参考2.3 分享示例代码。
使用分享到QQ好友功能需要设置QQ业务回调,请参考6. 处理QQ业务的回调。
2.2 分享到QQ空间
分享到QQ空间的接口用于取代老的分享接口addShareWithParams(该接口已经废弃)。
分享到QQ空间支持发送:
- 带有URL的消息
- 新闻类消息(QQApiNewsObject)
- 音频类消息(QQApiImageObject)
- 视频类消息(QQApiVideoObject)
分享时调用浏览器页面进行分享。其中title是必须的,summary可以不填,具体调用请参考2.3 分享示例代码。
使用分享到QQ空间功能需要设置QQ业务回调,请参考6. 处理QQ业务的回调。
2.3 分享示例代码
下面是各种分享消息的实例代码,作为开发者调用QQ好友分享和QQ空间分享的参考:
纯文本分享:
QQApiTextObject *txtObj = [QQApiTextObject objectWithText:@"QQ互联测试"];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:txtObj];
//将内容分享到qq
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
纯图片分享:
NSString *imgPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"test.gif"];
NSData *imgData = [NSData dataWithContentsOfFile:imgPath];
QQApiImageObject *imgObj = [QQApiImageObject objectWithData:imgData
previewImageData:imgData
title:@"QQ互联测试"
description:@"QQ互联测试分享"];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:imgObj];
//将内容分享到qq
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
NSString *utf8String = @"";
NSString *title = @"新闻标题";
NSString *description = @"新闻描述";
NSString *previewImageUrl = @"http://cdni.wired.co.uk/620x413/k_n/NewsForecast%20copy_620x413.jpg";
QQApiNewsObject *newsObj = [QQApiNewsObject
objectWithURL:[NSURL URLWithString:utf8String]
title:title
description:description
previewImageURL:[NSURL URLWithString:previewImageUrl]];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:newsObj];
//将内容分享到qq
//QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将内容分享到qzone
QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];
NSString *utf8String = @"/i/song.html?songid=8;source=mobileQQ%23wechat_redirect";
NSString *title = @"歌曲名:不要说话";
NSString *descriotion = @"专辑名:不想放手歌手名:陈奕迅";
NSString *previewImageUrl = @"/music/photo/mid_album_300/V/E/000J1pJ50cDCVE.jpg";
NSString *flashURL = @"http://10.136.9.109/fcgi-bin/fcg_music_get_playurl.fcg?song_id=;redirect=0&filetype=mp3&qqmusic_fromtag=15&app_id=&app_key=b233c8c2c8a0fbee4fc595&device_id=1234";
QQApiAudioObject *audioObj =
[QQApiAudioObject objectWithURL:[NSURL URLWithString:utf8String]
title:title
description:descriotion
previewImageURL:[NSURL URLWithString:previewImageUrl]];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:audioObj]
//将内容分享到qq
//QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将被容分享到qzone
QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];
NSString *previewPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"video.jpg"];
NSData* previewData = [NSData dataWithContentsOfFile:previewPath];
NSString *utf8String = @"";
QQApiVideoObject *videoObj = [QQApiVideoObject objectWithURL:[NSURL URLWithString:utf8String ? : @""]
title:@"QQ互联测试"
description:@"QQ互联测试分享"
previewImageData:previewData];
[videoObj setFlashURL:[NSURL URLWithString:@"/cover/5/53x6bbyb07ebl3s/n0013r8esy6.html"]];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:videoObj];
//将内容分享到qq
//QQApiSendResultCode sent = [QQApiInterface sendReq:req];
//将被容分享到qzone
QQApiSendResultCode sent = [QQApiInterface SendReqToQZone:req];
分享到QQ空间接口暂时不支持发送多张图片的能力,若开发者传入多张图片,则会自动选入第一张图片作为预览图。多图的能力将在以后支持。
3. 调用OpenAPI
SDK中具体支持的API种类和每条API的参数说明,请参照API列表。这里用设置用户头像举例说明。
3.1 OpenAPI参数字典封装
在封装各接口的参数字典时,推荐使用为每个接口新增的参数封装辅助类,如:
接口(BOOL)addShareWithParams:(NSMutableDictionary *)params
对应辅助类TCAddShareDic
TCAddShareDic辅助类中属性:
@property (nonatomic, retain) TCRequiredStr paramT
对应于CGI请求中参数"title"
TCRequiredStr 表示这是一个必填参数,类型是字符串
TCOptionalStr 表示这是一个可选参数,类型是字符串
3.2 设置用户头像调用示例
设置QQ头像时,调用TencetnOAuth对象的setUserHeadpic方法:
TCSetUserHeadpic *params = [TCSetUserHeadpic dictionary];
params.paramImage =
params.paramFileName = @"make";
UIViewController *headController =
[_tencentOAuth setUserHeadpic:params andViewController:&headController];
UIViewController *rootController = [[[app delegate] window] rootViewController];
[rootController dismissModalViewControllerAnimated:NO];
[rootController presentModalViewController:headController animated:YES];
设置头像完成后,会调用TencentSessionDelegate中的tencentOAuth:doCloseViewController通知应用界面需要关闭:
@protocol TencentSessionDelegate
- (void)setUserHeadpicResponse:(APIResponse*) response
- (void)tencentOAuth:(TencentOAuth *)tencentOAuth doCloseViewController:(UIViewController *)viewController
if (tencentOAuth == _tencentOAuth)
UIApplication *app = [UIApplication sharedApplication];
UIViewController *rootController = [[[app delegate] window] rootViewController];
[rootController dismissModalViewControllerAnimated:YES];
设置头像完成后,会调用TencentSessionDelegate中的setUserHeadpicResponse返回调用结果:
@protocol TencentSessionDelegate
- (void)setUserHeadpicResponse:(APIResponse*) response
if (nil == response)
if (URLREQUEST_FAILED == response.retCode
&& kOpenSDKErrorUserHeadPicLarge == response.detailRetCode)
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"操作失败" message:[NSString stringWithFormat:@"您的图片大小超标啦,请更换一张试试呢:)"]
delegate:self cancelButtonTitle:@"我知道啦" otherButtonTitles: nil];
[alert show];
[alert release];
3.3 使用增量授权
当第三方应用调用某个API接口时,如果服务器返回操作未被授权,则会触发增量授权逻辑。第三方应用需自行实现tencentNeedPerformIncrAuth:withPermissions:协议接口才能够进入增量授权逻辑,否则默认第三方应用放弃增量授权。示例如下:
- (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth
withPermissions:(NSArray *)permissions
// incrAuthWithPermissions是增量授权时需要调用的登录接口
// permissions是需要增量授权的权限列表
[tencentOAuth incrAuthWithPermissions:permissions];
return NO; // 返回NO表明不需要再回传未授权API接口的原始请求结果;
// 否则可以返回YES
注意:在用户通过增量授权页重新授权登录后,第三方应用需更新自己维护的token及有效期限等信息。
**用户在增量授权时是可以更换帐号进行登录的,强烈要求第三方应用核对增量授权后的用户openid是否一致,以添加必要的处理逻辑(用户帐号变更需重新拉取用户的资料等信息)**
增量授权成功时,会通过tencentDidUpdate:协议接口通知第三方应用:
- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth
_labelTitle.text = @"增量授权完成";
if (tencentOAuth.accessToken
&& 0 != [tencentOAuth.accessToken length])
{ // 在这里第三方应用需要更新自己维护的token及有效期限等信息
// **务必在这里检查用户的openid是否有变更,变更需重新拉取用户的资料等信息**
_labelAccessToken.text = tencentOAuth.accessT
_labelAccessToken.text = @"增量授权不成功,没有获取accesstoken";
增量授权失败时,会通过tencentFailedUpdate:协议接口通知第三方应用:
- (void)tencentFailedUpdate:(UpdateFailType)reason
switch (reason)
case kUpdateFailNetwork:
_labelTitle.text=@"增量授权失败,无网络连接,请设置网络";
case kUpdateFailUserCancel:
_labelTitle.text=@"增量授权失败,用户取消授权";
case kUpdateFailUnknown:
_labelTitle.text=@"增量授权失败,未知错误";
3.4 返回数据说明
APIResponse属性:
retCode - 网络请求返回码,主要表示服务器是否成功返回数据
seq - 请求的序列号,依次递增,方便内部管理
errorMsg - 错误消息
jsonResponse - 由服务器返回的json格式字符串转换而来的json字典数据(具体参数字段请参见对应API说明文档)
message - 服务器返回的原始字符串数据
detailRetCode - 新增的详细错误码,以区分不同的错误原因(v1.2以及之前的SDK接口无此参数)
3.5 返回码说明
retCode网络请求返回码说明:
0 表示成功,请求成功发送到服务器,并且服务器返回的数据格式正确
1 表示失败,可能原因有网络异常,或服务器返回的数据格式错误,无法解析
detailRetCode详细错误码说明:
kOpenSDKInvalid -无效的错误码
[公共错误码]
kOpenSDKErrorSuccess - 成功
kOpenSDKErrorUnknown - 未知错误
kOpenSDKErrorUserCancel - 用户取消
kOpenSDKErrorReLogin - token无效或用户未授权相应权限需要重新登录
kOpenSDKErrorOperationDeny - 第三方应用没有该api操作的权限
[网络相关错误码]
kOpenSDKErrorNetwork - 网络错误,网络不通或连接不到服务器
kOpenSDKErrorURL - URL格式或协议错误
kOpenSDKErrorDataParse - 数据解析错误,服务器返回的数据解析出错
kOpenSDKErrorParam - 传入参数错误
kOpenSDKErrorConnTimeout - http连接超时
kOpenSDKErrorSecurity - 安全问题
kOpenSDKErrorIO - 下载和文件IO错误
kOpenSDKErrorServer - 服务器端错误
[webview中特有错误]
kOpenSDKErrorWebPage - 页面错误
[设置头像 自定义错误码段]
kOpenSDKErrorUserHeadPicLarge - 图片过大 设置头像自定义错误码
4. 调用微云接口
iOS SDK支持调用腾讯微云的接口,支持对照片,音频,视频,结构化数据的上传,下载,删除等能力。下面以微云照片上传为例,向开发者介绍如何向腾讯微云上传照片。
4.1创建微云request对象,调用TencentOAuth实例的统一发送接口
- (void)weiyunUpload:(NSNumber *)weiyunType
WeiYun_upload_photo_GET *request = [[WeiYun_upload_photo_GET alloc] init];
//data是图片的二进制数据流
request.param_sha = [data digest];
request.param_md5 = [data md5];
request.param_name = @"test";
request.param_size = [NSString stringWithFormat:@"%u", [data length]];
request.param_upload_type = @"control";
request.paramUploadData =
[_tencentOAuth sendAPIRequest:request callback:self];
4.2 实现TCAPIRequestDelegate协议,响应结果
-(void)cgiRquest:didResponse用来响应统一api的调用结果,request是请求的消息,response是响应的结果。
- (void)cgiRequest:(TCAPIRequest *)request didResponse:(APIResponse *)response
if (URLREQUEST_SUCCEED == response.retCode && kOpenSDKErrorSuccess == response.detailRetCode)
NSString *str = [self responseDataProcess:request didResponse:response];
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"操作成功"
message:[NSString stringWithFormat:@"%@",str]
delegate:self cancelButtonTitle:@"我知道啦"
otherButtonTitles: nil];
[alert show];
上传图片是两步的过程。需要先获得上传参数,再根据上传参数拼装HTTP协议上传到微云的服务器。两步是分开进行的,所以需要注意两个问题。
1.第三方需要将上传对象进行保存,否则将无法进行默认的大数据上传。
2.iOS SDK 1.8实现了拉取上传参数和数据的上传。但是上传没有实现断点续传,所以对大数据的上传支持有限,可以通过实现 TCAPIRequestUploadDelegate 和 TCAPIRequestDownloadDelegate 来取消内部的自动上传和下载的逻辑,获得上传下载参数后自己拼装请求参数。
TCAPIRequestUploadDelegate 协议:
- (BOOL)cgiUploadRequest:(TCAPIRequest *)uploadRequest shouldBeginUploadingStorageRequest:(NSURLRequest *)storageR
TCAPIRequestDownloadDelegate 协议:
- (BOOL)cgiDownloadRequest:(TCAPIRequest *)downloadRequest shouldBeginDownloadingStorageRequest:(NSURLRequest *)storageR
如果不实现上传、下载协议,则按默认方式进行数据的上传下载。第三方实现协议若返回YES,则默认进行数据的上传下载。返回NO则停止上传下载。由第三方获取当前数据后自己上传下载数据。
其他API统一接口的调用参照上传照片的调用方式。目前统一接口主要支持微云所有API接口的调用和微博上传带有图片微博的调用,具体可以参考WeiyunAPI.h和WeiboAPI.h中有关微云和微博TCAPIRequest对象的定义。
5. WPA临时会话
iOS SDK支持发起QQ临时会话,获取指定QQ帐号在线状态。使用WPA功能需要设置QQ业务回调,请参考6. 处理QQ业务的回调。
5.1 发起QQ临时会话
下面是向指定QQ号码发起临时会话的示例代码:
- (void)onOpenWPA:(QElement *)sender
[self.view endEditing:YES];
[self.root fetchValueUsingBindingsIntoObject:self];
QQApiWPAObject *wpaObj = [QQApiWPAObject objectWithUin:self.binding_uin];
SendMessageToQQReq *req = [SendMessageToQQReq reqWithContent:wpaObj];
QQApiSendResultCode sent = [QQApiInterface sendReq:req];
[self handleSendResult:sent];
5.2 获取指定QQ号码的在线状态
下面是获取指定QQ号码在线状态的示例代码:
- (void)getQQUinOnlineStatues:(QElement *)sender
[self.view endEditing:YES];
[self.root fetchValueUsingBindingsIntoObject:self];
NSArray *ARR = [NSArray arrayWithObjects:self.binding_uin, nil];
[QQApiInterface getQQUinOnlineStatues:ARR delegate:self];
6. 处理QQ业务的回调
在使用QQApiInterface 的方法时需要设置回调才能正确调用。设置方法如下:
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
#if __QQAPI_ENABLE__
[QQApiInterface handleOpenURL:url delegate:(id)[QQAPIDemoEntry class]];
if (YES == [TencentOAuth CanHandleOpenURL:url])
return [TencentOAuth HandleOpenURL:url];
return YES;
在handleOpenURL 中添加[QQApiInterface handleOpenURL:url delegate:(id)[QQAPIDemoEntry class]]代码,可以在QQAPIDemoEntry类中实现QQApiInterfaceDelegate的回调方法。更完整的示例请参考SDKDemo。
7. iOS SDK 腾讯平台开放能力
iOS SDK支持第三方应用成为腾讯业务内容的提供商,要想成为腾讯业务内容提供商需要在QQ互联的官网进行注册。
使用SDK响应腾讯业务发起的内容请求可以参考下面的操作:
7.1 修改工程配置文件
在XCode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type”添加一条新的“URL scheme”,新的scheme = tencent + appid+‘.’+ content,identifier“tencentApiIdentifier”为。如果您使用的是XCode3或者更低的版本,则需要在plist文件中添加。Demo中我们注册的appid是222222。如下图
7.2 重写AppDelegate 的handleOpenURL和openURL方法
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation
if (YES == [TencentApiInterface canOpenURL:url delegate:self])
[TencentApiInterface handleOpenURL:url delegate:self];
handleOpenURL
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url
if (YES == [TencentApiInterface canOpenURL:url delegate:self])
[TencentApiInterface handleOpenURL:url delegate:self];
7.3 实现TencentApiInterfaceDelegate协议
响应腾讯业务的请求,需要实现TencentApiInterfaceDelegate协议的两个方法:
@protocol TencentApiInterfaceDelegate
//onTencentReq是腾讯业务向第三方应用主动发起请求,要求第三方应用响应提供内容,第三方应用再响应完成后需要调用TencentApiInterface的sendRespMessageToTencentApp返回腾讯业务。
- (BOOL)onTencentReq(TencentApiReq *)
//onTencentResp是第三方应用主动向腾讯业务发起请求后,腾讯业务返回请求结果。
可以参考以下代码实现对腾讯业务的请求的响应,或参考我们的sample中的代码实现
- (BOOL)onTencentReq:(TencentApiReq *)req
NSArray *array = [req arrMessage];
for (id obj in array)
if ([obj isKindOfClass:[TencentTextMessageObjV1 class]])
obj = (TencentTextMessageObjV1 *)
[obj setSText:@"test"];
if ([obj isKindOfClass:[TencentImageMessageObjV1 class]])
obj = (TencentImageMessageObjV1 *)
NSString *path = [NSString stringWithFormat:@"%@/qzone0.jpg",
[[NSBundle mainBundle] resourcePath]];
UIImage *image = [[UIImage alloc] initWithContentsOfFile:path];
NSData *data = UIImageJPEGRepresentation(image, 1.0f);
[obj setDataImage:data];
if ([obj isKindOfClass:[TencentVideoMessageV1 class]])
//请加入一段视频URL
obj = (TencentVideoMessageV1 *)
[obj setSUrl:@" /programs/view/_cVM3aAp270/"];
TencentApiResp *resp = [TencentApiResp respFromReq:req];
[TencentOAuth sendRespMessageToTencentApp:resp];
本条目发布于。属于分类。作者是。
我叫Shall--4年跨境B2C、2年国际阿里巴巴B2B、1年天猫经验,专注电子商务、搜索引擎、网络营销、品牌建设、团队建议管理等
2014年二月

我要回帖

更多关于 ios即时通讯开发 的文章

 

随机推荐