返回顶部

iOS-登录及分享

1. SSO安全登录QQ帐号

iOS SDK支持应用跳转到手机QQ进行登录,给用户提供更加安全、快捷的体验 。
如果用户没有安装手机QQ,且开发者具有webview权限,则显示登录页;如果开发者没有webview权限,sdk版本大于等于2.9,则显示登录页,sdk版本小于2.9,则显示下载页。由于跳转至下载页在当前苹果app审核有被拒风险,所以,希望开发者尽快升级是用最新版sdk。

1.1 授权登录

整个授权过程可以分为,发送请求获取用户授权以及获取用户授权结果两个部分。

  • 发送请求获取用户授权:
    在取得用户授权之前,首先必须清楚自己需要用户的哪些信息,iOS SDK提供多种选择,开发者可以根据自己的需要请求用户不同信息的授权。具体可以获取的授权信息参见1.2获取用户授权参数说明。
    在设置完需要请求的授权信息之后,就可以发送请求了(备注:inSafari参数从iOS SDK1.3版本后废除)。

其中_tencentOAuthTencentOAuth类的实例。

  • 获取用户授权结果
    获取用户授权结果,采用的是代理回调的方式,所以开发者需要实现TencentLoginDelegate协议,登录结果分为三种:登录成功、登录失败和登录取消。

如果登录成功,则开发者可以通过实现TencentLoginDelegate协议中的以下方法获取:

1.2 获取用户授权参数说明

字符串 含义
kOPEN_PERMISSION_GET_USER_INFO 获取用户信息
kOPEN_PERMISSION_GET_SIMPLE_USER_INFO 移动端获取用户信息
kOPEN_PERMISSION_GET_INFO 获取登录用户自己的详细信息
kOPEN_PERMISSION_GET_VIP_RICH_INFO 获取会员用户详细信息
kOPEN_PERMISSION_GET_VIP_INFO 获取会员用户基本信息
kOPEN_PERMISSION_GET_OTHER_INFO 获取其他用户的详细信息
kOPEN_PERMISSION_ADD_TOPIC 发表一条说说到QQ空间 (需要申请权限)
kOPEN_PERMISSION_ADD_ONE_BLOG 发表一篇日志到QQ空间 (需要申请权限)
kOPEN_PERMISSION_ADD_ALBUM 创建一个QQ空间相册 (需要申请权限)
kOPEN_PERMISSION_UPLOAD_PIC 上传一张照片到QQ空间相册 (需要申请权限)
kOPEN_PERMISSION_LIST_ALBUM 获取用户QQ空间相册列表 (需要申请权限)
kOPEN_PERMISSION_ADD_SHARE 同步分享到QQ空间、腾讯微博
kOPEN_PERMISSION_CHECK_PAGE_FANS 验证是否认证空间粉丝

iOS SDK V2.9.5废除了腾讯微博相关的接口,关于废除的参数,特此说明

字符串 含义
kOPEN_PERMISSION_ADD_PIC_T 上传图片并发表消息到腾讯微博
kOPEN_PERMISSION_DEL_T 删除一条微博信息
kOPEN_PERMISSION_GET_REPOST_LIST 获取一条微博的转播或评论信息列表
kOPEN_PERMISSION_GET_FANSLIST 获取登录用户的听众列表
kOPEN_PERMISSION_GET_IDOLLIST 获取登录用户的收听列表
kOPEN_PERMISSION_ADD_IDOL 收听腾讯微博上的用户
kOPEN_PERMISSION_DEL_IDOL 取消收听腾讯微博上的用户
kOPEN_PERMISSION_GET_INTIMATE_FRIENDS_WEIBO 获取微博中最近at的好友
kOPEN_PERMISSION_MATCH_NICK_TIPS_WEIBO 获取微博中匹配昵称的好友

2. 分享到QQ和QQ空间

2.1 分享到QQ好友

在用户安装了手机QQ时通过手机QQ进行分享,否则调用浏览器页面进行分享。
其中文本消息,图文消息和音频消息的title是必须的,summary可以不填,具体调用请参考2.3 分享示例代码。
使用分享到QQ好友功能需要设置QQ业务回调,请参考6.处理QQ业务的回调。

2.2 分享到QQ空间

分享到QQ空间的接口用于取代老的分享接口addShareWithParams(该接口已经废弃)。
在用户安装了手机QQ(4.6版本以上)时通过手机QQ中的QZone结合版进行分享,否则调用浏览器页面进行分享。分享时调用浏览器页面进行分享。其中title是必须的,summary可以不填,具体调用请参考2.3 分享示例代码。使用分享到QQ空间功能需要设置QQ业务回调,请参考6.处理QQ业务的回调。

在分享到QQ好友和QQ空间的时候,根据是本地分享还是浏览器中的分享,支持分享的消息类型不同。

因为webQQ好友分享和web QQ空间的分享都不支持非URL类型的分享,所以这里建议在分享到QQ好友或者QQ空间的时候尽量避免这两种类型的调用,避免发生不支持的错误。

分享消息类型 QQ好友 QQ空间 webQQ好友 webQQ空间
QQApiTextObject 支持 不支持 不支持 不支持
QQApiImageObject 支持 不支持 不支持 不支持
QQApiNewsObject 支持 支持 支持 支持
QQApiAudioObject 支持 支持 支持 支持
QQApiVideoObject 支持 支持 支持 支持
QQApiGroupTribeImageObject 仅群部落 不支持 不支持 不支持
QQApiAddFriendObject 游戏好友 不支持 不支持 不支持
QQApiFileObject 仅数据线 不支持 不支持 不支持
QQApiGameConsortiumBindingGroupObject 仅群部落 不支持 不支持 不支持

2.3 分享示例代码(详细请参见SDK中Demo)

下面是各种分享消息的实例代码,作为开发者调用QQ好友分享和QQ空间分享的参考:(注:如果可以分享到QQ空间,则会在示例代码中给出;不给出,则表示空间不支持该类分享)

  • 纯文本分享

  • 纯图片分享

  • 多图分享至QQ收藏

  • 新闻分享

  • 音乐分享

  • 群部落发表话题(2.8.1)

  • 分享文件(仅数据线)(2.8.1)

  • 添加好友(2.8.1)

  • 游戏绑定工会群(2.8.1)

3. 调用OpenAPI

iOS SDK中具体支持的API种类和每条API的参数说明,请参照API列表。这里用设置用户头像举例说明。

3.1 OpenAPI参数字典封装

在封装各接口的参数字典时,推荐使用为每个接口新增的参数封装辅助类,如接口(BOOL)addShareWithParams:(NSMutableDictionary *)params对应辅助类TCAddShareDic

TCAddShareDic辅助类中属性:
@property (nonatomic, retain) TCRequiredStr paramTitle;对应于CGI请求中参数title

TCRequiredStr 表示这是一个必填参数,类型是字符串
TCOptionalStr 表示这是一个可选参数,类型是字符串

3.2 设置用户头像调用示例

设置QQ头像时,调用TencetnOAuth对象的setUserHeadpic方法:

设置头像完成后,会调用TencentSessionDelegate中的tencentOAuth:doCloseViewController通知应用界面需要关闭:

设置头像完成后,会调用TencentSessionDelegate中的setUserHeadpicResponse返回调用结果:

3.3 使用增量授权

当第三方应用调用某个API接口时,如果服务器返回操作未被授权,则会触发增量授权逻辑。第三方应用需自行实现tencentNeedPerformIncrAuth:withPermissions:协议接口才能够进入增量授权逻辑,否则默认第三方应用放弃增量授权。示例如下:

注意:在用户通过增量授权页重新授权登录后,第三方应用需更新自己维护的token及有效期限等信息。

用户在增量授权时是可以更换帐号进行登录的,强烈要求第三方应用核对增量授权后的用户openid是否一致,以添加必要的处理逻辑(用户帐号变更需重新拉取用户的资料等信息)

增量授权成功时,会通过tencentDidUpdate:协议接口通知第三方应用:

增量授权失败时,会通过tencentFailedUpdate:协议接口通知第三方应用:

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. WPA临时会话

iOS SDK支持发起QQ临时会话,获取指定QQ帐号在线状态。使用WPA功能需要设置QQ业务回调,请参考6. 处理QQ业务的回调。

4.1 发起QQ临时会话

下面是向指定QQ号码发起临时会话的示例代码:

4.2 获取指定QQ号码的在线状态

下面是获取指定QQ号码在线状态的示例代码:

5. QZone

iOS SDK支持获取QQ用户的信息、发表说说、设置及浏览获取空间相册。

5.1 获取用户信息

获取用户信息分为两个步骤:

首先,发送获取用户信息的请求;

其中,_tencentOAuthTencentOAuth类的实例。

其次,实现协议TencentSessionDelegate的获取到用户信息后的回调方法:

下面以显示所有信息为例,进行说明:

5.2分享到QZone

分享方式与第二章中的分享文本及图片等类似,举例如下:

获取分享结果的方法与5.1中相同,此时需要实现TencentSessionDelegate协议的方法如下,具体用法此处不再赘述使用方法。

5.3 创建QZone相册

创建QZone相册的参数较多是通过TCAddAlbumDic传递的,举例如下:

其中,_tencentOAuthTencentOAuth类的实例。

获取分享结果的方法与5.1中相同,此时需要实现TencentSessionDelegate协议的方法如下,具体用法此处不再赘述使用方法。

相册访问权限及对应的值

访问权限 对应值
所有人可见 1
全部QQ好友可见 3
仅主人可见 4
回答问题的人可见 5

5.4 获取相册列表

取得相册列表的具体方法如下:

5.5 上传图片

上传图片可以通过设置TCUploadPicDic并发送相应请求完成。举例如下:

其中,_tencentOAuthTencentOAuth类的实例。

获取分享结果的方法与5.1中相同,此时需要实现TencentSessionDelegate协议的方法如下,具体用法此处不再赘述使用方法。

5.6 发表说说

发表说说可以通过设置TCAddTopicDic并发送相应请求完成。举例如下:

其中,_tencentOAuthTencentOAuth类的实例。

获取分享结果的方法与5.1中相同,此时需要实现TencentSessionDelegate协议的方法如下,具体用法此处不再赘述使用方法。

paramRichval参数设置:
richtype为网页或视频时,此值为该网页或视频的URL
richtype为图片时,详情如下:

  1. 当该图片来自于网站时
    参数名称 是否必须 类型 描述
    url 必须 string 网站图片的URL
    height 必须 string 图片高度,单位:px
    width 必须 string 图片宽度,单位:px

输入时每个值中间用“&”分隔,如下所示:
url=http://qq.com/logo.png&width=25&height=21

  1. 当该图片来自于QQ空间相册时
    参数名称 是否必须 类型 描述
    albumid 必须 string 图片所属空间相册的ID
    pictureid 必须 string 图片ID
    sloc 必须 string 小图ID
    pictype 必须 string 图片类型(JPG=1,GIF=2,PNG=3)
    picheight 必须 string 图片高度,单位:px
    picwidth 必须 string 图片宽度,单位:px

输入时每个值中间用逗号(,)分隔,如下所示 :
albumid,pictureid,sloc,pictype,picheight,picwidth

5.7 验证空间粉丝

验证空间粉丝可以通过设置TCCheckPageFansDic并发送相应请求完成。举例如下:

其中,_tencentOAuthTencentOAuth类的实例。

获取分享结果的方法与5.1中相同,此时需要实现TencentSessionDelegate协议的方法如下,具体用法此处不再赘述使用方法。

6. 处理QQ业务的回调

在使用QQApiInterface 的方法时需要设置回调才能正确调用。设置方法如下:

handleOpenURL 中添加[QQApiInterface handleOpenURL:url delegate: qqApiDelegate]代码,可以在QQAPIDemoEntry类中实现QQApiInterfaceDelegate的回调方法。更完整的示例请参考SDKDemo。

添加关于onReq和onResp的说明,同时微信与QQ回调相同,提醒开发者注意采用不同的代理处理回调。