iOS ios 友盟qq第三方登录录为什么没有安装qq的时候没有显示登录页面

iOS开发之第三方登录QQ -- 史上最全最新第三方登录QQ方式实现
项目地址 : /zhonggaorong/QQLoginDemo/tree/master
最新版本的qq登录实现步骤实现:
1. 首先,你需要去向腾讯申请账号。 地址:
2. 下载最新的SDK 地址:
SDK内容如下:
1. doc: 为说明文档, 方法参数说明。
2.sample 这个是简单的demo
3. TencentOpenApi__Bundle.bundle 资源文件包
4. TencentOpenApi.framework 核心开发框架
接下来就进入正题:
1. 项目配置,手把手教学:
1. 新建一个工程。
2. 把TencentOpenApi.framework 和 TencentOpenApi_IOS_Bundle.bundle 拖入工程。
3. 配置项目。
3.1 添加依赖库:
3.2在工程配置中的&Build Settings&一栏中找到&Linking&配置区,给&Other Linker Flags&配置项添加属性值&-fobjc-arc&
3.3 URLScheme 配置:
3.4 针对ios9以后,需要添加白名单。
在info.plist文件中加入 LSApplicationQueriesSchemes
对应的info.plist 的source code 为
LSApplicationQueriesSchemes
mqqOpensdkSSoLogin
mqqconnect
mqqopensdkdataline
mqqopensdkgrouptribeshare
mqqopensdkfriend
mqqopensdkapi
mqqopensdkapiV2
mqqopensdkapiV3
mqzoneopensdk
wtloginmqq
wtloginmqq2
mqzoneshare
wtloginqzone
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk
3.5 针对iOS9默认使用https,现在先还原成http请求方式。
在Info.plist中添加NSAppTransportSecurity类型Dictionary。
在NSAppTransportSecurity下添加NSAllowsArbitraryLoads类型Boolean,值设为YES
第一步:在plist中添加NSAppTransportSecurity项,此项为NSDictionary
第二步:在NSAppTransportSecurity下添加 NSAllowsArbitraryLoads类型为Boolean,value为YES
4. 开始码代码了, 最欢乐的时刻:
1. 在刚刚新建的项目中 appdelegate.m, 添加代码:
1.引入头文件 :
2. 并遵循代理
@interface AppDelegate ()
3. 在添加跳转的请求方法
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
处理由手Q唤起的跳转请求
\param url 待处理的url跳转请求
\param delegate 第三方应用用于处理来至QQ请求及响应的委托对象
\return 跳转请求处理结果,YES表示成功处理,NO表示不支持的请求协议或处理失败
[QQApiInterface handleOpenURL:url delegate:self];
return [TencentOAuth HandleOpenURL:url];
处理来至QQ的请求
- (void)onReq:(QQBaseReq *)req{
NSLog(@& ----req %@&,req);
处理来至QQ的响应
- (void)onResp:(QQBaseResp *)resp{
NSLog(@& ----resp %@&,resp);
处理QQ在线状态的回调
- (void)isOnlineResponse:(NSDictionary *)response{
现在就是具体的登录controller.m了。
授权相关的字段
/** 发表一条说说到QQ空间(需要申请权限) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_TOPIC;
/** 发表一篇日志到QQ空间(需要申请权限) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ONE_BLOG;
/** 创建一个QQ空间相册(需要申请权限) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_ALBUM;
/** 上传一张照片到QQ空间相册(需要申请权限) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_UPLOAD_PIC;
/** 获取用户QQ空间相册列表(需要申请权限) */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_LIST_ALBUM;
/** 同步分享到QQ空间、腾讯微博 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_ADD_SHARE;
/** 验证是否认证空间粉丝 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_CHECK_PAGE_FANS;
/** 获取登录用户自己的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_INFO;
/** 获取其他用户的详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_OTHER_INFO;
/** 获取会员用户基本信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_INFO;
/** 获取会员用户详细信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_VIP_RICH_INFO;
/** 获取用户信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_USER_INFO;
/** 移动端获取用户信息 */
FOUNDATION_EXTERN NSString *const kOPEN_PERMISSION_GET_SIMPLE_USER_INFO;
直接上, 源码里面有注释,一看就明白了
ViewController.m
QQLoginDemo
Created by 张国荣 on 16/6/17.
Copyright & 2016年 BateOrganization. All rights reserved.
#import &ViewController.h&
//#define TENCENT_CONNECT_APP_KEY @&&
#define APP_ID @&你的appid&
@interface ViewController ()
TencentOAuth *_tencentOA
NSMutableArray *_permissionA
//权限列表
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
self.view.backgroundColor = [UIColor whiteColor];
- (IBAction)loginAction:(id)sender {
_tencentOAuth=[[TencentOAuth alloc]initWithAppId:APP_ID andDelegate:self];
//设置权限数据 , 具体的权限名,在sdkdef.h 文件中查看。
_permissionArray = [NSMutableArray arrayWithObjects: kOPEN_PERMISSION_GET_SIMPLE_USER_INFO,nil];
//登录操作
[_tencentOAuth authorize:_permissionArray inSafari:NO];
* 登录成功后的回调
- (void)tencentDidLogin{
/** Access Token凭证,用于后续访问各开放接口 */
if (_tencentOAuth.accessToken) {
//获取用户信息。 调用这个方法后,qq的sdk会自动调用
//- (void)getUserInfoResponse:(APIResponse*) response
//这个方法就是 用户信息的回调方法。
[_tencentOAuth getUserInfo];
NSLog(@&accessToken 没有获取成功&);
* 登录失败后的回调
* \param cancelled 代表用户是否主动退出登录
- (void)tencentDidNotLogin:(BOOL)cancelled{
if (cancelled) {
NSLog(@& 用户点击取消按键,主动退出登录&);
NSLog(@&其他原因, 导致登录失败&);
* 登录时网络有问题的回调
- (void)tencentDidNotNetWork{
NSLog(@&没有网络了, 怎么登录成功呢&);
* 因用户未授予相应权限而需要执行增量授权。在用户调用某个api接口时,如果服务器返回操作未被授权,则触发该回调协议接口,由第三方决定是否跳转到增量授权页面,让用户重新授权。
* \param tencentOAuth 登录授权对象。
* \param permissions 需增量授权的权限列表。
* \return 是否仍然回调返回原始的api请求结果。
* \note 不实现该协议接口则默认为不开启增量授权流程。若需要增量授权请调用\ref TencentOAuth#incrAuthWithPermissions: \n注意:增量授权时用户可能会修改登录的帐号
- (BOOL)tencentNeedPerformIncrAuth:(TencentOAuth *)tencentOAuth withPermissions:(NSArray *)permissions{
// incrAuthWithPermissions是增量授权时需要调用的登录接口
// permissions是需要增量授权的权限列表
[tencentOAuth incrAuthWithPermissions:permissions];
return NO; // 返回NO表明不需要再回传未授权API接口的原始请求结果;
// 否则可以返回YES
* [该逻辑未实现]因token失效而需要执行重新登录授权。在用户调用某个api接口时,如果服务器返回token失效,则触发该回调协议接口,由第三方决定是否跳转到登录授权页面,让用户重新授权。
* \param tencentOAuth 登录授权对象。
* \return 是否仍然回调返回原始的api请求结果。
* \note 不实现该协议接口则默认为不开启重新登录授权流程。若需要重新登录授权请调用\ref TencentOAuth#reauthorizeWithPermissions: \n注意:重新登录授权时用户可能会修改登录的帐号
- (BOOL)tencentNeedPerformReAuth:(TencentOAuth *)tencentOAuth{
return YES;
* 用户通过增量授权流程重新授权登录,token及有效期限等信息已被更新。
* \param tencentOAuth token及有效期限等信息更新后的授权实例对象
* \note 第三方应用需更新已保存的token及有效期限等信息。
- (void)tencentDidUpdate:(TencentOAuth *)tencentOAuth{
NSLog(@&增量授权完成&);
if (tencentOAuth.accessToken
&& 0 != [tencentOAuth.accessToken length])
{ // 在这里第三方应用需要更新自己维护的token及有效期限等信息
// **务必在这里检查用户的openid是否有变更,变更需重新拉取用户的资料等信息** _labelAccessToken.text = tencentOAuth.accessT
NSLog(@&增量授权不成功,没有获取accesstoken&);
* 用户增量授权过程中因取消或网络问题导致授权失败
* \param reason 授权失败原因,具体失败原因参见sdkdef.h文件中\ref UpdateFailType
- (void)tencentFailedUpdate:(UpdateFailType)reason{
switch (reason)
case kUpdateFailNetwork:
_labelTitle.text=@&增量授权失败,无网络连接,请设置网络&;
NSLog(@&增量授权失败,无网络连接,请设置网络&);
case kUpdateFailUserCancel:
_labelTitle.text=@&增量授权失败,用户取消授权&;
NSLog(@&增量授权失败,用户取消授权&);
case kUpdateFailUnknown:
NSLog(@&增量授权失败,未知错误&);
* 获取用户个人信息回调
* \param response API返回结果,具体定义参见sdkdef.h文件中\ref APIResponse
* \remarks 正确返回示例: \snippet example/getUserInfoResponse.exp success
错误返回示例: \snippet example/getUserInfoResponse.exp fail
- (void)getUserInfoResponse:(APIResponse*) response{
NSLog(@& response %@&,response);
- (void)didReceiveMemoryWarning {
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.iOS友盟第三方登录分享
我的图书馆
iOS友盟第三方登录分享
//&需要引入框架
// 1. SystemConfiguration.framework
// 2. CoreGraphics.framework
// 3. libsqlite3.dylib
// 4. CoreTelephony.framework
// 5. libstdc++.dylib,
// 6. libz.dylib
//&下载最新的SDK,
//&将UMSocial_Sdk-x.x.x的文件夹拖入工程目录下
libUMSocial_Sdk-x.x.x.a&&libUMSocial_Sdk_comment_3.0.a&&&库文件
// Header&&头文字
// SocialSDKXib&&
// en.Iproj,
zh-Hans.Iproj&&英文和中文语言文件
frameworks&&&使用的第三方SDK,里面的Wechat,TencentOperAPI,TencentWeiboSSO,分别代表微信、手机QQ和腾讯微博SDK
//&设置友盟分享
[UMSocialData&setAppKey:@"52b13dc70e7148"];
//&设置手机QQ的使用
[UMSocialConfig&setQQAppId:@""&url:nil&importClasses:@[[QQApiInterface&class], [TencentOAuthclass]]];
//&设置微信功能
[UMSocialConfig&setWXAppId:@"wx34bdad5a"&url:nil];
mark&使用第三方登录需要重写下面两个方法
- (void)applicationDidBecomeActive:(UIApplication&*)application
&&//&登录需要编写
&&[UMSocialSnsService&applicationDidBecomeActive];
- (BOOL)application:(UIApplication&*)application
openURL:(NSURL&*)url
sourceApplication:(NSString*)sourceApplication
annotation:(id)annotation
&&return&[UMSocialSnsService&handleOpenURL:url&wxApiDelegate:nil];
#pragma mark&直接分享
- (IBAction)share:(id)sender
&&//&设置分享内容与分享平台
&&//&弹出UIActivityViewController样式的列表
&&[UMSocialSnsService&presentSnsIconSheetView:self&appKey:Nil&shareText:@"要分享的内容"&shareImage:nilshareToSnsNames:@[UMShareToQzone,&UMShareToSina,&UMShareToTencent,&UMShareToRenren,
UMShareToSms,UMShareToEmail,&UMShareToFacebook,&UMShareToTwitter,&UMShareToWechatSession,&UMShareToWechatTimeline,
UMShareToQQ]&delegate:nil];
mark&自定义分享平台的图标、文字、点击事件
- (IBAction)diyPlatformInfo:(id)sender
&&//&获取到新浪微博分享平台
&&UMSocialSnsPlatform&*sinaPlatform
= [UMSocialSnsPlatformManagergetSocialPlatformWithName:UMShareToSina];
&&//&设置平台图片
&&sinaPlatform.bigImageName&=&@"sina_icon@2x.png";
&&//&设置平台名称
&&sinaPlatform.displayName&=&@"新浪的微博";
&&//&设置点击平台图标的事件
&&sinaPlatform.snsClickHandler&=
^(UIViewController&*presentingController,&UMSocialControllerService*socialControllerService,&BOOL&isPresentInController)
&&NSLog(@"点击了新浪微博分享");
&&//&弹出UITableView样式的分享列表
&&[UMSocialSnsService&presentSnsController:self&appKey:nil&shareText:@"要分享的内容"&shareImage:nilshareToSnsNames:@[UMShareToSina]&delegate:nil];
#pragma mark&设置分享的类型
- (IBAction)shareType:(id)sender
&&//&设置分享音乐类型
&&[[UMSocialData&defaultData].urlResource&setResourceType:UMSocialUrlResourceTypeMusic];
&&//&设置图片类型并附带网址
&&[[UMSocialData&defaultData].urlResource&setResourceType:UMSocialUrlResourceTypeImageurl:@"/uploads/2062983nmcUZA6K.jpg"];
&&//&设置视频类型,并附带网址
&&[[UMSocialData&defaultData].urlResource&setResourceType:UMSocialUrlResourceTypeVideourl:@"/video/benshankuaileying/0.mp4"];
&&//&显示各个平台类型
&&[UMSocialSnsService&presentSnsIconSheetView:self&appKey:Nil&shareText:@"要分享的内容"&shareImage:nilshareToSnsNames:@[UMShareToSina]&delegate:nil];
#pragma mark&分享到QQ
- (IBAction)shareToQQ:(id)sender
&&[UMSocialSnsService&presentSnsIconSheetView:self&appKey:nil&shareText:@"发送分享内容"&shareImage:nilshareToSnsNames:@[UMShareToQQ]&delegate:nil];
#pragma mark&微信分享
- (IBAction)shareWeiXin:(id)sender
&&//&设置微信分享应用类型,用户点击消息将跳转到应用,或者到下载页面
UMSocialWXMessageTypeImage为图片类型
&&[UMSocialData&defaultData].extConfig.wxMessageType&=&UMSocialWXMessageTypeApp;
&&//&分享图盘到微信朋友圈显示字数比较少,只显示分享标题
&&[UMSocialData&defaultData].extConfig.title&=&@"朋友圈分享内容";
&&//&显示分享平台
&&[UMSocialSnsService&presentSnsController:self&appKey:nil&shareText:@"分享的内容"&shareImage:nilshareToSnsNames:@[UMShareToWechatSession,&UMShareToWechatTimeline]&delegate:nil];
#pragma mark&第三方登录
- (IBAction)otherLogin:(id)sender
&&//&使用Sina微博账号登录
&&UMSocialSnsPlatform&*snsPlatform
= [UMSocialSnsPlatformManagergetSocialPlatformWithName:UMShareToSina];
&&snsPlatform.loginClickHandler(self,
[UMSocialControllerService&defaultControllerService],&YES,
^(UMSocialResponseEntity&*response) {
&&NSLog(@"response is %@", response);
&&//&如果是授权到新浪微博,SSO之后如果想获取用户的昵称、头像等需要再获取一次账户信息
&&[[UMSocialDataService&defaultDataService]requestSocialAccountWithCompletion:^(UMSocialResponseEntity&*response)
&&//&打印用户昵称
&&NSLog(@"SinaWeibo's user name is
[[[response.data&objectForKey:@"accounts"]objectForKey:UMShareToSina]&objectForKey:@"username"]);
TA的最新馆藏}

我要回帖

更多关于 ios qq第三方登录接口 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信