微信第三方登录

微信登录

  • 首先需要确保你的App应用在微信开发平台上注册创建并获得对应的接口,对应登录、支付等功能,在微信开放平台申请获得appid,以及appkey
    在这里插入图片描述
  • 获得appkey后,可以使用第三方平台比如友盟或者shareSDK。

shareSDK微信分享,登录

shareSDK第三方平台获取它们对应的key,pods集成文档可以看这集成所需模块
在这里插入图片描述

#define ShareSDKAppKey @"###########" //ShareSDK Appkey
#define WeChat_AppID @"###########" //微信平台appid
#define WeChat_Secret @"###########" //微信平台Secret

  • 首先在Appdelegate.h文件里面didfinishload函数里面进行初始化
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[self setupShareSDK];
}
#pragma mark -- 设置ShareSDK(pods集成时只集成了微信平台)
+ (void)setupShareSDK{
    [ShareSDK registerActivePlatforms:@[
                                        @(SSDKPlatformTypeWechat)
                                        ]
                             onImport:^(SSDKPlatformType platformType)
     {
         switch (platformType)
         {
             case SSDKPlatformTypeWechat:
                 [ShareSDKConnector connectWeChat:[WXApi class]];
                 break;
             default:
                 break;
         }
     }
                      onConfiguration:^(SSDKPlatformType platformType, NSMutableDictionary *appInfo)
     {
         switch (platformType)
         {
             case SSDKPlatformTypeSinaWeibo:
             case SSDKPlatformTypeWechat:
                 [appInfo SSDKSetupWeChatByAppId:WeChat_AppID
                                       appSecret:WeChat_Secret];
                 break;
                                                 default:
                   break;
                   }
                   }];
     
}
  • 微信回调走的是
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString*, id> *)options
{
    return [self handleAllUrl:app url:url];
}
- (BOOL)handleAllUrl:(UIApplication*)app url:(NSURL*)url
{
    
//    if ([url.host isEqualToString:@"oauth"]){
//        NSLog(@"微信登录返回的东西    ");
// return [WXApi handleOpenURL:url delegate:self];
//    }
}


#pragma mark WXApiDelegate
-(void)onResp:(BaseResp *)resp{
    MDLog(@"========%d%@",resp.errCode,resp.errStr);
    if ([resp isKindOfClass:[SendAuthResp class]])//授权登录
    {
        SendAuthResp *rep = (SendAuthResp *)resp;
        if (rep.errCode == 0)//成功
        {
            [[NSNotificationCenter defaultCenter]postNotificationName:@"WXAuthorizationSuccess" object:@{@"code":rep.code}];
        }
    }
}

*登录界面 点击第三方登录图片的触发事件

//微信
#import “WXApi.h”
#import <TencentOpenAPI/TencentOAuth.h>
//登录
#define WX_ACCESS_TOKEN @“access_token”
#define WX_OPEN_ID @“openid”
#define WX_REFRESH_TOKEN @“refresh_token”

- (void)viewDidLoad {
    [super viewDidLoad];

    [self initView];
    //监听登录回调
    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(WXloginapp:) name:@"WXAuthorizationSuccess" object:nil];
}

*微信按钮点击事件
//第三方微信登录

-(void)WXapploginstate{
f (![WXApi isWXAppInstalled])
        {
           NSLog(@"微信未安装");
        }
        else
        {
            [self loginByWechat];
        }
}

-(void)loginByWechat
{
    SendAuthReq *req = [[SendAuthReq alloc] init];
    req.scope = @"snsapi_userinfo";
    req.state = @"App";
    [WXApi sendReq:req];
}
  • 监听登录回调事件
-(void)WXloginapp:(NSNotification *)notification{
    __weak AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer.timeoutInterval = 15;
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    
    
    NSString *urlstr = [NSString stringWithFormat:@"https://api.weixin.qq.com/sns/oauth2/access_token?appid=%@&secret=%@&code=%@&grant_type=%@",WeChat_AppID,WeChat_AppSecret,notification.object[@"code"],@"authorization_code"];
    NSLog(@"urlstr=%@",urlstr);
    [manager GET:urlstr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSError *error;
        NSDictionary * accessDict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:&error];
        NSLog(@"accessDIXRespoc=%@",accessDict);
        NSString *accessToken = [accessDict objectForKey:WX_ACCESS_TOKEN];
        NSString *openID = [accessDict objectForKey:WX_OPEN_ID];
        NSString *refreshToken = [accessDict objectForKey:WX_REFRESH_TOKEN];
        // 本地持久化,以便access_token的使用、刷新或者持续
        if (accessToken && ![accessToken isEqualToString:@""] && openID && ![openID isEqualToString:@""]) {
            [[NSUserDefaults standardUserDefaults] setObject:accessToken forKey:WX_ACCESS_TOKEN];
            [[NSUserDefaults standardUserDefaults] setObject:openID forKey:WX_OPEN_ID];
            [[NSUserDefaults standardUserDefaults] setObject:refreshToken forKey:WX_REFRESH_TOKEN];
            [[NSUserDefaults standardUserDefaults] synchronize]; // 命令直接同步到文件里,来避免数据的丢失
        }
        [self wechatLoginByRequestForUserInfo];
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        
    }];
    
}
  • 获取授权登录后 获取用户个人信息(UnionID机制)
- (void)wechatLoginByRequestForUserInfo {
    
    NSString *accessToken = [[NSUserDefaults standardUserDefaults] objectForKey:WX_ACCESS_TOKEN];
    NSString *openID = [[NSUserDefaults standardUserDefaults] objectForKey:WX_OPEN_ID];
    //链接格式参考微信开放文档
    NSString *userUrlStr = [NSString stringWithFormat:@"%@/userinfo?access_token=%@&openid=%@", @"https://api.weixin.qq.com/sns", accessToken, openID];
    // 请求用户数据
    __weak AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    manager.requestSerializer.timeoutInterval = 15;
    manager.responseSerializer = [AFHTTPResponseSerializer serializer];
    [manager GET:userUrlStr parameters:nil progress:^(NSProgress * _Nonnull downloadProgress) {
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSError *error;
        NSDictionary * accessDict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:&error];
        NSLog(@"请求用户信息的response = %@", accessDict);
        // NSMutableDictionary *userDict = [NSMutableDictionary dictionaryWithDictionary:responseObject];
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
    }];
}
  • 得到的数据格式
    在这里插入图片描述

  • 最后就是把获得的授权token值 传给公司后台,再根据公司需求进行下一步操作了

友盟登录

  • // SDK key

#define kUMAnalyticsAppKey @"**********" //友盟统计Appkey(从友盟第三方平台申请)
在这里插入图片描述

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
 // 配置第三方sdk
    [self configureOhter:launchOptions];
}

#pragma mark 配置第三方sdk
- (void)configureOhter:(NSDictionary *)launchOptions
{
 /* 设置友盟appkey */
    [[UMSocialManager defaultManager] setUmSocialAppkey:UmengKey];
    /* 设置微信的appKey和appSecret */
    [[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession
                                          appKey:WeixinAppId
                                       appSecret:WeixinSecret
                                     redirectURL:@"http://mobile.umeng.com/social"];
}
  • 登录
        if (![WXApi isWXAppInstalled])
            {
                [FanweMessage alertTWMessage:@"微信未安装"];
            }
            else
            {
                [self loginByWechat];
            }
pragma mark 微信登录
- (void)loginByWechat
{
    [self getUserInfoForPlatform:UMSocialPlatformType_WechatSession];
    
    /*
     // 构造SendAuthReq结构体
     SendAuthReq* req =[[SendAuthReq alloc ] init ];
     req.scope = @"snsapi_userinfo" ;
     req.state = @"123" ;
     // 第三方向微信终端发送一个SendAuthReq消息结构
     [WXApi sendReq:req];
     */
}   

  • #pragma mark 根据对应类型进行登录操作
- (void)getUserInfoForPlatform:(UMSocialPlatformType)platformType{
 [[UMSocialManager defaultManager] getUserInfoWithPlatform:platformType currentViewController:self completion:^(id result, NSError *error) {
        
        UMSocialUserInfoResponse *resp = result;
        //            // 授权信息

//            NSLog(@"Wechat uid: %@", resp.uid);

//            NSLog(@"Wechat openid: %@", resp.openid);

//            NSLog(@"Wechat unionid: %@", resp.unionId);

//            NSLog(@"Wechat accessToken: %@", resp.accessToken);

//            NSLog(@"Wechat refreshToken: %@", resp.refreshToken);

//            NSLog(@"Wechat expiration: %@", resp.expiration);

//

//            // 用户信息

//            NSLog(@"Wechat name: %@", resp.name);

//            NSLog(@"Wechat iconurl: %@", resp.iconurl);

//            NSLog(@"Wechat gender: %@", resp.unionGender);

//

//            // 第三方平台SDK源数据

//            NSLog(@"Wechat originalResponse: %@", resp.originalResponse);


         if (resp)
        {
        if (platformType == UMSocialPlatformType_WechatSession)
            {
                [parmDict setObject:@"wx_login" forKey:@"act"];
                [parmDict setObject:resp.openid forKey:@"openid"];
                [parmDict setObject:resp.accessToken forKey:@"access_token"];
              }
              
             [self login];//调登录方法把得到的token传给后台服务器
}     
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值