分享到 :

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_0QQ3.0
kQQVersion4_0支持sso登录
kQQVersion4_2_1iOS7兼容
kQQVersion4_5WPA会话
kQQVersion4_6sso登陆信令通道切换
kQQVersion4_7QQ4.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;

返回顶部