iOS QQ实现第三方登录以及遇到的问题

本文详细介绍了如何在iOS应用中集成QQ第三方登录功能,包括在腾讯开放平台注册应用、下载并配置SDK、实现代码逻辑等步骤,并针对实现过程中可能遇到的问题提供了解决方案。
 

iOS QQ实现第三方登录以及遇到的问题 

标签: QQ第三方登录iOS QQ登录iOS第三方登录
  652人阅读  评论(0)  收藏  举报
  分类:
 

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1.   
(一)、腾讯开放平台创建应用 http://op.open.qq.com/manage_centerv2/ios?owner=897240781&uin=897240781

创建好之后我们可以获取到appID 


之后点击上图中的《QQ登录》==》《应用调试者》填写测试QQ

(二)、下载SDK:http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD

               1、找到以下两个文件,拖入到工程中


        2、托入工程后,添加需要的依赖库

           

    3、修改必要的工程配置属性

         在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”



(四)、代码实现

         1、在AppDelegate.m中 添加 

               #import <TencentOpenAPI/TencentOAuth.h>

          2、重新下面两个方法

               

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{  
  2.     return [TencentOAuth HandleOpenURL:url];  
  3. }  
  4.   
  5. - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{  
  6.     return [TencentOAuth HandleOpenURL:url];  
  7. }</span>  

          3、在你QQ登录界面声明一个

                TencentOAuth *tencentOAuth   对象,然后在QQ登录按钮的点击事件中

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. <span style="font-size:18px;">            tencentOAuth = [[TencentOAuth alloc]initWithAppId:@"1105198010"andDelegate:self];  
  2.             //4,设置需要的权限列表,此处尽量使用什么取什么。  
  3.             NSArray *permissions= [NSArray arrayWithObjects:@"get_user_info"@"get_simple_userinfo"@"add_t", nil nil];  
  4.             [tencentOAuth authorize:permissions inSafari:NO];</span>  
                 4、实现代理方法

[objc]  view plain  copy
  在CODE上查看代码片 派生到我的代码片
  1. #pragma mark -- TencentSessionDelegate  
  2. //登陆完成调用  
  3. - (void)tencentDidLogin  
  4. {  
  5. //    resultLable.text = @"登录完成";  
  6.     JYLog(@"登录完成");  
  7.       
  8.     if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length])  
  9.     {  
  10.         //  记录登录用户的OpenID、Token以及过期时间  
  11. //        tokenLable.text = tencentOAuth.accessToken;  
  12.         [tencentOAuth getUserInfo];  
  13.     }  
  14.     else  
  15.     {  
  16. //        tokenLable.text = @"登录不成功 没有获取accesstoken";  
  17.         JYLog(@"登录不成功 没有获取accesstoken");  
  18.     }  
  19. }  
  20.   
  21. //非网络错误导致登录失败:  
  22. -(void)tencentDidNotLogin:(BOOL)cancelled  
  23. {  
  24.     NSLog(@"tencentDidNotLogin");  
  25.     if (cancelled)  
  26.     {  
  27. //        resultLable.text = @"用户取消登录";  
  28.         JYLog(@"用户取消登录");  
  29.     }else{  
  30. //        resultLable.text = @"登录失败";  
  31.         JYLog(@"登录失败");  
  32.     }  
  33. }  
  34. // 网络错误导致登录失败:  
  35. -(void)tencentDidNotNetWork  
  36. {  
  37.     NSLog(@"tencentDidNotNetWork");  
  38. //    resultLable.text = @"无网络连接,请设置网络";  
  39.     JYLog(@"无网络连接,请设置网络");  
  40. }  
  41.   
  42. - (void)didReceiveMemoryWarning {  
  43.     [super didReceiveMemoryWarning];  
  44.     // Dispose of any resources that can be recreated.  
  45. }  
  46.   
  47. -(void)getUserInfoResponse:(APIResponse *)response  
  48. {  
  49.     NSLog(@"respons:%@",response.jsonResponse);  
  50. }  

做到这基本能实现登录了


(五)、过程中遇到的问题

          1.  l_OBJC_PROTOCOL_$_TencentApiInterfaceDelegate", referenced from:  和  linker command failed with exit code 1 (use -v to see invocation)

这个问题重点还是在   <TencentSessionDelegate> 这代理的警告: Cannot find protocol definition for 'TencentsessionDelegate'

          这种明明都能运行还说我没有定义的警告,是因为你这个协议虽然定义了,但是你这个协议可能还遵守了XX协议,然后这个XX协议没有定义导致会报这种警告,所以遇到这种警告要往“父协议”找。 举个栗子,上面这行就是腾讯授权的库里面报的警告

           注:  解决办法  :此协议遵守了TencentApiInterfaceDelegate协议,在TencentOAuth.h类中#import "TencentApiInterface.h" 警告就没有了

现在就应该可以运行了

          2.如果你的输出信息是 xxxx - error: "This app is not allowed to query for scheme xxxx"

            (在这里因为我的 App 集成了分享到QQ、微信、微博的功能,xxxx部分我看到了 mqq、wechat、sinaweibosso 等多条信息)

       解决办法: 去 Info.plist 里面建立一个叫 LSApplicationQueriesSchemes 的 Array,把你在xxxx部分看到的词汇一个一个填进去,直至控制台没有任何相关输出即可。


//  若有问题后面再完善

评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值