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

</pre>(一)、腾讯开放平台创建应用<a target=_blank target="_blank" href="http://op.open.qq.com/manage_centerv2/ios?owner=897240781&uin=897240781">http://op.open.qq.com/manage_centerv2/ios?owner=897240781&uin=897240781</a><p></p><p><span style="font-size:18px">创建好之后我们可以获取到appID </span></p><p><span style="font-size:18px"><img src="https://img-blog.csdn.net/20160521155915903?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></p><p><span style="font-size:18px">之后点击上图中的《QQ登录》==》《应用调试者》填写测试QQ<img src="https://img-blog.csdn.net/20160521160226045?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></p><p><span style="font-size:18px">(二)、下载SDK:<a target=_blank target="_blank" href="http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD">http://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD</a></span></p><p>               <span style="font-size:18px">1、找到以下两个文件,拖入到工程中</span></p><p><span style="font-size:18px"><img src="https://img-blog.csdn.net/20160521160817603?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></p><p><span style="font-size:18px">        2、托入工程后,添加需要的依赖库</span></p><p><span style="font-size:18px">           <img src="https://img-blog.csdn.net/20160521161615301?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></p><p><span style="font-size:18px">    3、修改<span style="font-family:Arial; font-size:18px; line-height:26px">必要的工程配置属性</span></span></p><p><span style="font-size:18px"><span style="font-family:Arial; font-size:18px; line-height:26px">         <span style="font-family:Arial; font-size:14px; line-height:26px">在工程配置中的“Build Settings”一栏中找到“Linking”配置区,给“Other Linker Flags”配置项添加属性值“-fobjc-arc”</span></span></span></p><p><span style="font-size:18px"><span style="font-family:Arial; font-size:18px; line-height:26px"><span style="font-family:Arial; font-size:14px; line-height:26px"><img src="https://img-blog.csdn.net/20160521162152167?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="" /></span></span></span></p><p><span style="font-size:18px"><span style="font-family:Arial; font-size:18px; line-height:26px"><span style="font-family:Arial; font-size:14px; line-height:26px"></span></span></span></p><p><span style="font-size:18px">(四)、代码实现</span></p><p><span style="font-size:18px">         1、在AppDelegate.m中 添加 </span></p><p class="p1"><span class="s1">               <span style="font-size:18px">#import</span></span><span class="s2"><span style="font-size:18px"><TencentOpenAPI/TencentOAuth.h></span></span></p><p class="p1"><span style="font-size:18px">          2、重新下面两个方法</span></p><p class="p1"><span style="font-size:18px">               </span></p><pre code_snippet_id="1691613" snippet_file_name="blog_20160521_2_9541952" name="code" class="objc"><span style="font-size:18px;">- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{
    return [TencentOAuth HandleOpenURL:url];
}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{
    return [TencentOAuth HandleOpenURL:url];
}</span>

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

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

<span style="font-size:18px;">            tencentOAuth = [[TencentOAuth alloc]initWithAppId:@"1105198010"andDelegate:self];
            //4,设置需要的权限列表,此处尽量使用什么取什么。
            NSArray *permissions= [NSArray arrayWithObjects:@"get_user_info", @"get_simple_userinfo", @"add_t", nil];
            [tencentOAuth authorize:permissions inSafari:NO];</span>
                4、实现代理方法

#pragma mark -- TencentSessionDelegate
//登陆完成调用
- (void)tencentDidLogin
{
//    resultLable.text = @"登录完成";
    JYLog(@"登录完成");
    
    if (tencentOAuth.accessToken && 0 != [tencentOAuth.accessToken length])
    {
        //  记录登录用户的OpenID、Token以及过期时间
//        tokenLable.text = tencentOAuth.accessToken;
        [tencentOAuth getUserInfo];
    }
    else
    {
//        tokenLable.text = @"登录不成功 没有获取accesstoken";
        JYLog(@"登录不成功 没有获取accesstoken");
    }
}

//非网络错误导致登录失败:
-(void)tencentDidNotLogin:(BOOL)cancelled
{
    NSLog(@"tencentDidNotLogin");
    if (cancelled)
    {
//        resultLable.text = @"用户取消登录";
        JYLog(@"用户取消登录");
    }else{
//        resultLable.text = @"登录失败";
        JYLog(@"登录失败");
    }
}
// 网络错误导致登录失败:
-(void)tencentDidNotNetWork
{
    NSLog(@"tencentDidNotNetWork");
//    resultLable.text = @"无网络连接,请设置网络";
    JYLog(@"无网络连接,请设置网络");
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

-(void)getUserInfoResponse:(APIResponse *)response
{
    NSLog(@"respons:%@",response.jsonResponse);
}

做到这基本能实现登录了


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

          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" 警告就没有了

现在就应该可以运行了

**************************** *****************最近项目中要使用到QQ第三方登录(2016-11-09), 发现这个方法已经无法解决这个问题了, 看了下代码, 腾讯应该改了好多东西, 所以这个应该是老版本了, 不适用, 今天拿来用又研究了一段时间., 瞬间感觉QQ贼蛋疼了,好了 不说了,干正事要紧 ************************************************************

// 首页,错误原因还是一样的(很多时候搞不懂, 网上好多这个解释, 说的各种配置)

解决办法:

1.    找到TencentOAuth.h

2.  大概450多行找到TencentSessionDelegate的声明中


好了, 问题应该解决了, 可以运行了, 觉得有用的点个赞, 没解决的可以评论

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

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

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


//  若有问题后面再完善

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值