iOS 第三方登录(QQ 微信 新浪微博)

Posted Robert火山

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 第三方登录(QQ 微信 新浪微博)相关的知识,希望对你有一定的参考价值。

一、QQ登录

1、登录腾讯开放平台,创建一个应用,获取APP_KEY和APP_ID

2、下载对应的SDK

这里写图片描述

3、下载 iOS SDK环境搭建

1、导入SDK,配置工程

1、下载SDK到本地后,将SDK拖入工程中

这里写图片描述

2、添加所需的依赖库

Security.framework
SystemConfiguration.framework
CoreGraphics.Framework
CoreTelephony.framework
libiconv.tdb
libsqlite3.tdb
libstdc++.tdb
libz.tdb

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

这里写图片描述

2 、添加项目代码

1、添加URL SChemes,新的scheme = tencent + appid。

这里写图片描述

2、在plist文件中,设置ATS

这里写图片描述

3、在plist文件中,添加白名单

LSApplicationQueriesSchemes

    mqqapi
    mqq
    mqqOpensdkSSoLogin
    mqqconnect
    mqqopensdkdataline
    mqqopensdkgrouptribeshare
    mqqopensdkfriend
    mqqopensdkapi
    mqqopensdkapiV2
    mqqopensdkapiV3
    mqzoneopensdk
    wtloginmqq
    wtloginmqq2
    mqqwpa
    mqzone
    mqzonev2
    mqzoneshare
    wtloginqzone
    mqzonewx
    mqzoneopensdkapiV2
    mqzoneopensdkapi19
    mqzoneopensdkapi
    mqqbrowser
    mttbrowser

添加之后如下图:

这里写图片描述

2、在AppDelegate.m 中添加代码:

#import "AppDelegate.h"
#import <TencentOpenAPI/TencentOAuth.h>
#import <TencentOpenAPI/QQApiInterface.h>

@interface AppDelegate ()<TencentSessionDelegate>

@property (nonatomic, strong) TencentOAuth *tencentOAuth;

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    //初始化SDK
     _tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222" andDelegate:self];

    //设置应用需要用户授权的API列表
    NSArray *_permissions =  [NSArray arrayWithObjects:@"get_user_info", @"get_simple_userinfo", @"add_t", nil];
    //调用SDK登录
    [_tencentOAuth authorize:_permissions inSafari:NO];
    [_tencentOAuth accessToken] ;
    [_tencentOAuth openId] ;


    return YES;
}

//登录成功
- (void)tencentDidLogin
{
    NSLog(@"登录完成");

    if (_tencentOAuth.accessToken && 0 != [_tencentOAuth.accessToken length]) {
        // 记录登录用户的OpenID、Token以及过期时间
        NSLog(@"%@",_tencentOAuth.accessToken);
    } else {
        NSLog(@"登录不成功 没有获取accesstoken");
    }
}

//非网络错误导致登录失败
-(void)tencentDidNotLogin:(BOOL)cancelled
{
    if (cancelled) {
        NSLog(@"用户取消登录");
    } else {
        NSLog(@"登录失败");
    }
}

//网络错误导致登录失败
-(void)tencentDidNotNetWork
{
    NSLog(@"无网络连接,请设置网络");

}


// 处理来至QQ的请求

- (void)onReq:(QQBaseReq *)req{
   NSLog(@" ----req %@",req);
}


//处理来至QQ的响应
- (void)onResp:(QQBaseResp *)resp{
    NSLog(@" ----resp %@",resp);
}

//处理QQ在线状态的回调

- (void)isOnlineResponse:(NSDictionary *)response{

}

- (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];
}

效果图:

这里写图片描述

3、错误处理

我在集成中遇到了一个配置错误的问题,如下图:

这里写图片描述

解决办法:我在QQ开放平台上注册了一个应用,获得了APPID,但是我并没有提交审核,有可能是没有审核的APPID不可用(推测而已),你可以换一个腾讯提供的APPID:222222。

这里写图片描述

 //初始化SDK
     _tencentOAuth = [[TencentOAuth alloc] initWithAppId:@"222222" andDelegate:self];

DEMO下载

就是这两个地方,设置对了,就可以了。

二、微信登录

1、登录微信开放平台,创建一个应用,获取APP_KEY和APP_ID

2、下载对应的SDK

这里写图片描述

1、导入SDK,配置工程

1、将下载好的SDK拖入工程

2、添加依赖库

SystemConfiguration.framework
libz.tdb
libsqlite3.0.tdb
libc++.tdb
Security.framework
CoreTelephony.framework
CFNetwork.framework

如果某些依赖库已经有了,就不需要重复添加了。

3、在你的工程文件中选择Build Setting,在”Other Linker Flags”中加入”-Objc -all_load”

这里写图片描述

4、在Xcode中,选择你的工程设置项,选中“TARGETS”一栏,在“info”标签栏的“URL type“添加“URL scheme”为你所注册的应用程序id

这里写图片描述

2、添加相关代码

1、在AppDelegate.m 中导入头文件

#import "WXApi.h"

2、添加协议:

WXApiDelegate

3、注册微信SDK:


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [WXApi registerApp:@"wxd477edab60670232"];

    return YES;
}

4、页面跳转处理

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

    if([[url scheme] hasPrefix:@"tencent"]) {
        return [TencentOAuth HandleOpenURL:url]; 
    }else if([[url scheme] hasPrefix:@"wx"]){
        return [WXApi handleOpenURL:url delegate:self];
    }
    return YES;


}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{

    if([[url scheme] hasPrefix:@"tencent"]) {
        return [TencentOAuth HandleOpenURL:url];
    } else if([[url scheme] hasPrefix:@"wx"]) {
        return [WXApi handleOpenURL:url delegate:self];
    }
    return YES;
}

如果项目中集成了多种第三方登录的,需要进行判断。

5、发送请求微信登录

在你需要调用微信登录的按钮方法中添加如下代码:

 SendAuthReq* req = [[SendAuthReq alloc] init];
 req.scope = @"snsapi_message,snsapi_userinfo,snsapi_friend,snsapi_contact"; // @"post_timeline,sns"
    req.state = @"xxx";

[WXApi sendAuthReq:req viewController:self delegate:nil];

效果图

这里写图片描述

Demo下载

三、新浪微博登录

1、登录新浪微博开放平台,创建一个应用,获取APPID和APPKEY.

2、下载对应的SDK

1、导入SDK,配置工程

1、下载好SDK后,将SDK拖入工程

这里写图片描述

2、在工程中引入静态库之后,需要在编译时添加-ObjC,Target->Build Settings->Linking 下 Other Linker Flags 添加 -ObjC。(如果添加过了,就不需要重复添加了)

3、添加依赖库 (如果某些依赖库添加过了,就不需要重复添加了)

QuartzCore.framework
ImageIO.framework
SystemConfiguration.framework
Security.framework
CoreTelephony.framework
CoreText.framework
UIKit.framework
Foundation.framework
CoreGraphics.framework
libz.tdb
libsqlite3.tdb

4、添加URL Schemes

这里写图片描述

2、添加相关代码

在AppDelegate.m 在添加头文件

#import "WeiboSDK.h"

添加协议

WeiboSDKDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.

    [WeiboSDK registerApp:@"2045436852"];

    return YES;
}

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{

    if([[url scheme] hasPrefix:@"tencent"]) {
        return [TencentOAuth HandleOpenURL:url];
    }else if([[url scheme] hasPrefix:@"wx"]){
        return [WXApi handleOpenURL:url delegate:self];
    } else {
        return [WeiboSDK handleOpenURL:url delegate:self];
    }


}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url{

    if([[url scheme] hasPrefix:@"tencent"]) {
        return [TencentOAuth HandleOpenURL:url];
    } else if([[url scheme] hasPrefix:@"wx"]) {
        return [WXApi handleOpenURL:url delegate:self];
    } else {
        return [WeiboSDK handleOpenURL:url delegate:self];
    }
    return YES;
}

在你需要调用新浪微博登录的按钮方法中添加代码:

 WBMessageObject *message = [WBMessageObject message];
    message.text = @"测试使用";

    WBSendMessageToWeiboRequest *request = [WBSendMessageToWeiboRequest requestWithMessage:message];
    [WeiboSDK sendRequest:request];

新浪微博登录需要用真机测试。

Demo下载

以上是关于iOS 第三方登录(QQ 微信 新浪微博)的主要内容,如果未能解决你的问题,请参考以下文章

实现QQ微信新浪微博和百度第三方登录(Android Studio)

ASP.NET MVC应用程序中支持用户使用腾讯QQ和微信以及新浪微博的第三方登录

基于Qt下移动平台第三方接入-ShareSDK(新浪微博,微信朋友圈等分享登录)

对于QQ微博微信第三方登录的思考

Android授权登录新浪微博获取用户个人信息

QQ,微信,新浪原生分享