分享到 :

代理授权登录(3.3.9)(QQ8.3.6)

第三方作为平台方,需要给自己平台的APP/Game做代理授权,新SDK将支持该诉求。需要传入代理APP的appid以及需要的权限列表。为了保证安全性,默认通过server_side模式返回code给平台方,平台方再传给委托方,委托方用appkey去互联后台换取token。

PS.该能力需要手Q版本8.3.6以上,如果本地手Q小于该版本,或者本地无手Q,该接口会无响应并且会在日志打印错误信息。

  • 注意事项:

1.该能力需要第三方APP去互联官网申请调用权限。(外部业务联系外部邮箱connect@qq.com,内部业务联系qqconnecthelper)

2.第三方APP的plist文件中的LSApplicationQueriesSchemes字段中需要添加mqqopensdkproxylogin,否则可能拉不起手Q并且报错“当前QQ版本太低-EQQAPIVERSIONNEEDUPDATE”

  • 接口方法
//TencentOAuth.h
/**
 * 代理授权登录
 * 用于代理第三方授权登录,需传入第三方的信息,默认使用server_side模式登录,登录成功会返回第三方的登录code。
 * @param proxyAppid 代理第三方的APPID
 * @param proxyPermissions 代理第三方所需要的授权信息
* @param state 安全标志位,第三方用来保证不是伪造的请求,登录成功后会回传state,放在passData字段里面。建议使用随机数, 最大长度128
 */
- (BOOL)proxyAuthorize:(NSString*)proxyAppid
           permissions:(NSArray*)proxyPermissions
state:(NSString*)state;
proxyAppid不可以传空

  • 示例代码
NSArray* permissions = [NSArray arrayWithObjects:kOPEN_PERMISSION_GET_USER_INFO,kOPEN_PERMISSION_
GET_SIMPLE_USER_INFO,kOPEN_PERMISSION_ADD_SHARE,nil];

//注意:初始化传入自己APP的appid
TencentOAuth *_tencentOAuth = [TencentOAuth initWithAppid:my_appid andDelegate:delegate];

//注意:代理授权传入代理APP的appid
[_tencentOAuth proxyAuthorize:proxy_appid permissions:permissions];
  • 回调说明

回调和普通授权登录共用

- (void)tencentDidLogin; // 登录成功后的回调
- (void)tencentDidNotLogin:(BOOL)cancelled; // 登录失败后的回调
- (void)tencentDidNotNetWork; // 登录时网络有问题的回调
区别是当登录成功后,从TencentOAuth的新增属性proxyAuthResp中获取代理登录的code信息
//TencentOAuth.h
/** 代理登陆成功后,从手Q透传的数据 */
@property(nonatomic, copy) NSDictionary* proxyAuthResp;
  • 数据示例
proxyAuthResp:{
        code = 02DF04BC93E1F9C06C92258FC5A48F57;
        "expires_in" = 0;
    };
state = "xxxxx"

code:代表代理方的code;

expires_in:代表过期时间;

state:第三方传入字段,全程透传

返回顶部