QQ登录是一个很常见的功能, 也有很多第三方库帮我们实现了这样的功能, 今天提到的是一个UI上的问题.
问题重现
1 点击QQ登录按钮, 呼出QQ登录授权页面.
2 点击授权, 进行登录.
3 退出登录.
4 再次点击QQ登录按钮, 这次唤起的是WEB页面
why? 明明已经安装了QQ, 为什么会唤起WEB, 应该调到QQ客户端的授权页面才对啊!
产生问题的原因
点击QQ登录按钮会执行这样的代码
NSArray *permissions = [NSArray arrayWithObjects:@"get_user_info", @"add_share", nil];
[_tencentOAuth authorize:permissions inSafari:NO];
为什么第二次点击的时候会有问题? 因为当我们退出的时候没有调用
[_tencentOAuth logout:self];
这里相当于摘掉代理, 但是_tencentOAuth
还是有值的.
所以再次点击QQ登录按钮的时候要这样做
NSArray *permissions = [NSArray arrayWithObjects:@"get_user_info", @"add_share", nil];
_tencentOAuth = [[TencentOAuth alloc] initWithAppId:kTencentQQSDKDemoAppId andDelegate:self];
_tencentOAuth.redirectURI = @"www.qq.com";
[_tencentOAuth authorize:permissions inSafari:NO];
这样再次点击的时候就重新创建了一个_tencentOAuth
也不会产生二次添加代理的问题. 至此, 问题解决了.
总结: 有些时候, 我们使用一些第三方SDK或者框架, 可能SDK或者框架本身并没问题, 而是我们使用者用的时候没有真正读懂第三方的用法, 相信通过这样的例子, 会让我们了解, 使用第三方的东西的时候一定要深度了解一下, 否则有时候产生了问题真的是很难处理的.