Contents
  1. 1. 1.首先导入的是 #import <TencentOpenAPI/TencentOAuth.h>
  2. 2. 2.l_OBJC_PROTOCOL_$_TencentApiInterfaceDelegate", referenced from:
  3. 3. 3.真机无法回调 tencentDidLogin 等代理方法

在腾讯开放平台上集成 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

对他们表示感谢。

Contents
  1. 1. 1.首先导入的是 #import <TencentOpenAPI/TencentOAuth.h>
  2. 2. 2.l_OBJC_PROTOCOL_$_TencentApiInterfaceDelegate", referenced from:
  3. 3. 3.真机无法回调 tencentDidLogin 等代理方法