QQ 登录中遇到的问题
Contents
在腾讯开放平台上集成 QQ 登录详细教程和文档很多地方都有,简书上也很多。
在这里记录几个关键点。
1.首先导入的是 #import <TencentOpenAPI/TencentOAuth.h>
2.l_OBJC_PROTOCOL_$_TencentApiInterfaceDelegate", referenced from:
TencentSessionDelegate
有一个警告没注意到,原来它还遵守了 TencentApiInterfaceDelegate
协议。但是 TencentApiInterface.h
不在路径里,需要将这个一起 import 进来。
3.真机无法回调 tencentDidLogin
等代理方法
在模拟器上可以以网页的形式登录然后回调,但在真机却不行。这是因为在 handleOpenURL
中没处理好。
在项目中通常会集成多个 SDK 在 handleOpenURL
处理回调回来的 URL Schema。
我使用这样一个私有方法处理
- (BOOL)p_handleMultiSocialSDKUrl:(NSURL *)url {
ATAOAuthManager *manager = [ATAOAuthManager sharedManager];
if ([[url absoluteString] hasPrefix:[NSString stringWithFormat:@"wb%@", kWeiboKey]]) {
return [WeiboSDK handleOpenURL:url delegate:manager];
} else if ([[url absoluteString] hasPrefix:kWechatId]){
return [WXApi handleOpenURL:url delegate:manager];
} else if ([[url absoluteString] hasPrefix:[NSString stringWithFormat:@"tencent%@", kTencentID]]) {
return [TencentOAuth HandleOpenURL:url];
} else {
return YES;
}
}
问题就出在这最后一个 else if
把它写成了 [url absoluteString] hasPrefix:kTencentID]
的样子(受微信的影响 囧),然而 url 是 tencentAPPID
的形式。直接跳到最后的 else
进而没有任何回调了。而网页登录不存在 handleOpenURL
的问题,因此不受影响。
在网上检索信息时这些网页帮助了我:
http://blog.csdn.net/u012121216/article/details/51470803
https://github.com/zhonggaorong/QQLoginDemo
对他们表示感谢。