TencentOAuth授权登录相关方法
1)获取SDK基本信息的相关函数
// 获取当前SDK的版本号 + (NSString*)sdkVersion; // 获取当前SDK的小版本号 + (NSString*)sdkSubVersion; // 获取当前SDK是否为精简版 + (BOOL)isLiteSDK; // 判断是否有登陆被发起,但是还没有过返回结果 + (TencentAuthorizeState *)authorizeState; // 获取当前手机QQ的版本号 + (QQVersion)iphoneQQVersion; |
其中,TencentAuthorizeState为枚举类型,其枚举值含义如下:
TencentAuthorizeState | 含义 |
kTencentNotAuthorizeState | 无授权 |
kTencentSSOAuthorizeState | 有人发起了sso授权还未返回 |
kTencentWebviewAuthorzieState | 有人发起了webview授权还未返回 |
QQVersion为枚举类型,其枚举值含义如下:
QQVersion | 含义 |
kQQUninstall | 未安装QQ |
kQQVersion3_0 | QQ3.0 |
kQQVersion4_0 | 支持sso登录 |
kQQVersion4_2_1 | iOS7兼容 |
kQQVersion4_5 | WPA会话 |
kQQVersion4_6 | sso登陆信令通道切换 |
kQQVersion4_7 | QQ4.7 |
2)判断SSO登录准备事项是否支持
// 判断用户手机上是否安装手机QQ,安装返回YES,否则返回NO + (BOOL)iphoneQQInstalled; // 判断用户手机上的手机QQ是否支持SSO登录,支持返回YES,否则返回NO + (BOOL)iphoneQQSupportSSOLogin; // 判断用户手机上是否安装手机QZone,安装返回YES,否则返回NO + (BOOL)iphoneQZoneInstalled; // 判断用户手机上的手机QZone是否支持SSO登录,支持返回YES,否则返回NO + (BOOL)iphoneQZoneSupportSSOLogin; |
3)初始化TencentOAuth对象方法
- (id)initWithAppId:(NSString *)appId andDelegate:(id<TencentSessionDelegate>)delegate; |
- 参数含义
参数 | 含义 |
appId | 第三方应用在互联开放平台申请的唯一标识 |
delegate | 第三方应用用于接收请求返回结果的委托对象 |
其中delegate遵循TencentSessionDelegate协议,6.2小结有详细介绍。
/** * 初始化TencentOAuth对象(>=3.3.8) * \param appId 不可为nil,第三方应用在互联开放平台申请的唯一标识 * \param enabled 默认为NO,第三方应用是否将sdk和手机QQ的交互方式切换为UniversalLink方式,启用后则在iOS9及以上的系统都会生效UniversalLink方式;否则,默认仅在iOS13及以上的系统生效UniversalLink方式。 * \param universalLink 可以为nil,第三方应用在互联开放平台注册的UniversalLink,和bundleID一一对应(当为nil时,互联平台会按规则生成UniversalLink,详见官网说明) * \param delegate 不可为nil,第三方应用用于接收请求返回结果的委托对象 * \return 初始化后的授权登录对象 * *****【使用说明】***** * 1、支持sdk与手Q的交互切换为UniversalLink模式,主要目的"是为了避免手Q的UrlScheme被其他应用抢注后,导致sdk接口功能受到影响"。 * 2 、由于手Q版本在 >=8.1.3 后才适配了UniversalLink,所以一旦开启了enabled开关,“务必做到”及时知会用户升级手Q版本。 ***** */ - (id)initWithAppId:(NSString *)appId enableUniveralLink:(BOOL)enabled universalLink:(NSString *)universalLink delegate:(id<TencentSessionDelegate>)delegate; |
- 4)授权登录
- (BOOL)authorize:(NSArray *)permissions; - (BOOL)authorize:(NSArray *)permissions inSafari:(BOOL)bInSafari; - (BOOL)authorize:(NSArray *)permissions localAppId:(NSString *)localAppId inSafari:(BOOL)bInSafari; |
- 参数含义
参数 | 含义 |
permissions | 授权信息列表 |
bInSafari | 是否使用safari进行登录,iOS SDK 1.3版本开始废除此参数 |
localAppId | 应用APPID |
增量授权,因用户没有授予相应接口调用的权限,需要用户确认是否授权
- (BOOL)incrAuthWithPermissions:(NSArray *)permissions; |
参数含义同上,此处不再赘述
重新授权,因token废除或失效导致接口调用失败,需用户重新授权
- (BOOL)reauthorizeWithPermissions:(NSArray *)permissions; |
参数含义同上,此处不再赘述
// 处理应用拉起协议,处理成功返回YES,否则返回NO + (BOOL)HandleOpenURL:(NSURL *)url; // SDK是否可以处理应用拉起协议,可以处理返回YES,否则返回NO + (BOOL)CanHandleOpenURL:(NSURL *)url; |
- 参数含义
参数 | 含义 |
url | 处理第三方应用被呼起后的逻辑 |
这两个函数常常一起调用,先判断是否可以处理,再进行处理。该函数一般添加与工程中的appdelegate类的处理URL函数(当收到外部的URL跳转时,app会第一时间调用此函数)中,即
- (BOOL)application :(UIApplication *)application openURL:(NSURL *)url sourceApplication :(NSString *)sourceApplication annotation:(id)annotation |
// 处理应用的UniversalLink拉起协议,处理成功返回YES,否则返回NO + (BOOL)HandleUniversalLink:(NSURL *)url; // SDK是否可以处理应用的Universallink拉起协议,可以处理返回YES,否则返回NO + (BOOL)CanHandleUniversalLink:(NSURL *)url; |
参数 | 含义 |
url | 处理被其他应用呼起时的逻辑(应用的Universallink链接须满足官网注册时的格式要求) |
这两个函数必须一起调用,先判断是否可以处理,再进行处理。该函数一般添加在工程中的appdelegate类处理Universallink函数(当收到外部的Universallink跳转时,app会第一时间调用此函数)中,即
- (BOOL)application:(UIApplication *)application continueUserActivity: (NSUserActivity *)userActivity restorationHandler:(void(^) (NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler NS_AVAILABLE_IOS(8_0); |
// 获取TencentOAuth调用的上一次错误信息 + (NSString *)getLastErrorMsg; |
// 以Server Side Code模式授权登录时,通过此接口获取返回的accessToken值(Access Token凭证,用于后续访问各开放接口); // 以Client Side Token模式授权登录时,忽略此接口。 - (NSString *)getServerSideCode; |
// 退出登录(退出登录后,TecentOAuth失效,需要重新初始化) - (void)logout:(id<TencentSessionDelegate>)delegate; |
参数 | 含义 |
delegate | 第三方应用用于接收请求返回结果的委托对象 |
// 判断登录态是否有效,YES表示有效,NO表示无效,请用户重新登录授权 - (BOOL)isSessionValid; |
// 获取用户个人信息,YES表示API调用成功,NO表示API调用失败,登录态失败,重新登录。 - (BOOL)getUserInfo; |
// SDK内置webview实现定向分享时,第三方应用可以根据应用是否在白名单里来开启该配置开关,默认为关闭;在白名单里的应用调用该接口后,即打开sdk内置webview的二级白名单开关(相对与sdk后台的白名单),那么在sdk后台白名单校验请求失败的情况下,会继续先尝试采用内置webview进行分享。 - (void)openSDKWebViewQQShareEnable; |