iOS 微信第三方登陆并获取微信用户信息

本文介绍如何在iOS应用中集成微信OAuth2.0登录系统,包括注册开发者账号、集成SDK、设置URL Schemes及ATS等步骤,并提供AppDelegate代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统。

在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥有一个已审核通过的移动应用,并获得相应的AppID和AppSecret,申请微信登录且通过审核后,可开始接入流程。

1、集成微信SDK

CocoaPods配置:

pod 'WechatOpenSDK'

 

2、添加URL Schemes

 

 

 

3、针对iOS9增加白名单

 

 

4、iOS9中新增App Transport Security(简称ATS)特性

 

 

5、集成代码:

在AppDelegate.m中

#import "AppDelegate.h"
//导入主头文件
#import <WXApi.h>

@interface AppDelegate ()<WXApiDelegate>

@end

@implementation AppDelegate


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Override point for customization after application launch.
    
    //向微信注册应用
    [WXApi registerApp:APPID];
    
    return YES;
}

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    [WXApi handleOpenURL:url delegate:self];
    
    return YES;
}


//收到一个来自微信的处理结果,调用一次sendReq后会收到onResp
- (void)onResp:(BaseResp *)resp
{
    NSLog(@"errCode = %d",resp.errCode);
    
    /*
         enum  WXErrCode {
             WXSuccess           = 0,    成功
             WXErrCodeCommon     = -1,  普通错误类型
             WXErrCodeUserCancel = -2,    用户点击取消并返回
             WXErrCodeSentFail   = -3,   发送失败
             WXErrCodeAuthDeny   = -4,    授权失败
             WXErrCodeUnsupport  = -5,   微信不支持
         };
         */
    if ([resp isKindOfClass:[SendAuthResp class]]) { //授权登录的类
        SendAuthResp *sendResp = (SendAuthResp *)resp;
        if (resp.errCode == 0) { //成功
            //可获取 accessToken
            NSString* urlStr = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=authorization_code",
                                @"wxb9e8f5aa1fe010ce",@"ffec13c05f48b8976b8b998a39b2b923",sendResp.code];
            
            AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
            manager.responseSerializer = [AFJSONResponseSerializer serializer];//申明返回的结果是JSON类型
            [manager GET:urlStr parameters:@{} progress:^(NSProgress * _Nonnull downloadProgress) {
                
            } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
                //成功的返回结果
                NSLog(@"responseObject = %@",responseObject);
                
                //通过成功返回的 access_token 和 openid 获取微信用户信息
                [self getWechatUserInfoWithAccessToken:responseObject[@"access_token"] openId:responseObject[@"openid"]];
            } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
                NSLog(@"error = %@",error);
            }];
        }else{ //失败
            
        }
    }
}


/**
 获取微信用户信息

 @param accessToken 成功返回的access_token
 @param openId 成功返回的openid
 */
- (void)getWechatUserInfoWithAccessToken:(NSString *)accessToken openId:(NSString *)openId
{
    NSString* urlStr = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/userinfo?access_token=%@&openid=%@",accessToken,openId];
    
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.responseSerializer = [AFJSONResponseSerializer serializer];//申明返回的结果是JSON类型
    [manager GET:urlStr parameters:@{} progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        //成功的返回结果
        NSLog(@"微信用户信息:%@",responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error = %@",error);
    }];
}



@end

 

在你微信登录的类中

#pragma mark - 微信登录事件
- (IBAction)weChatLogin:(UIButton *)sender {
    if ([WXApi isWXAppInstalled]) { //判断设备已经安装了微信
        //构造SendAuthReq结构体
        SendAuthReq *req = [[SendAuthReq alloc]init];
        req.scope = @"snsapi_userinfo";
        req.state = @"123";
        //第三方向微信终端发送一个SendAuthReq消息结构
        [WXApi sendReq:req];
    }else{
        UIAlertController *alertController = [UIAlertController alertControllerWithTitle:nil message:@"您的设备未装有微信,请先进行安装" preferredStyle:UIAlertControllerStyleAlert];
        UIAlertAction *sure = [UIAlertAction actionWithTitle:@"知道了" style:UIAlertActionStyleDefault handler:nil];
        [alertController addAction:sure];
        [self presentViewController:alertController animated:YES completion:nil];
    }
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值