第四十一篇:微信第三方登录

2024-05-12 20:08

本文主要是介绍第四十一篇:微信第三方登录,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

登录前效果图:


登录后效果图:


一、准备工作

第一步:下载友盟SDK,下载友盟SDK 根据需要选择下载,下载完成后把 UMSocial 文件添加到工程中;

第二步:添加配置,在 Build Settings --> Linking --> Other Linker Flags --> Debug 或 Release 对应的行后加入-ObjC ,

第三步:在项目的.plist 文件中添加如下配制,使允许网络加载


第四步:添加在项目中的所有 SDK 所需的 依懒库,下列是一些常见的登录或分享所需的依懒库

libsqlite3.tbd        // 这两个是必须添加的
CoreGraphics.framework // 微信的依懒库
SystemConfiguration.framework
CoreTelephony.framework
libsqlite3.tbd
libc++.tbd
libz.tbd// QQ 的依懒库
SystemConfiguration.framework
libc++.tbd // 新浪微博的依懒库
CoreTelephony.framework
ImageIO.framework
libsqlite3.tbd
libz.tbd // 短信 的依懒库
MessageUI.framework

第五步:配制SSO白名单

         如果你的应用使用了如SSO授权登录或跳转到第三方分享功能,在iOS9/10下就需要增加一个可跳转的白名单,即LSApplicationQueriesSchemes,否则将在SDK判断是否跳转时用到的canOpenURL时返回NO,进而只进行webview授权或授权/分享失败。 在项目中的info.plist中加入应用白名单,右键info.plist选择source code打开(plist具体设置在Build Setting -> Packaging -> Info.plist File可获取plist路径) 请根据选择的平台对以下配置进行裁剪:

<key>LSApplicationQueriesSchemes</key>
<array><!-- 微信 URL Scheme 白名单--><string>wechat</string><string>weixin</string><!-- 新浪微博 URL Scheme 白名单--><string>sinaweibohd</string><string>sinaweibo</string><string>sinaweibosso</string><string>weibosdk</string><string>weibosdk2.5</string><!-- QQ、Qzone URL Scheme 白名单--><string>mqqapi</string><string>mqq</string><string>mqqOpensdkSSoLogin</string><string>mqqconnect</string><string>mqqopensdkdataline</string><string>mqqopensdkgrouptribeshare</string><string>mqqopensdkfriend</string><string>mqqopensdkapi</string><string>mqqopensdkapiV2</string><string>mqqopensdkapiV3</string><string>mqqopensdkapiV4</string><string>mqzoneopensdk</string><string>wtloginmqq</string><string>wtloginmqq2</string><string>mqqwpa</string><string>mqzone</string><string>mqzonev2</string><string>mqzoneshare</string><string>wtloginqzone</string><string>mqzonewx</string><string>mqzoneopensdkapiV2</string><string>mqzoneopensdkapi19</string><string>mqzoneopensdkapi</string><string>mqqbrowser</string><string>mttbrowser</string><!-- 支付宝 URL Scheme 白名单--><string>alipay</string><string>alipayshare</string><!-- 钉钉 URL Scheme 白名单--><string>dingtalk</string><string>dingtalk-open</string><!--Linkedin URL Scheme 白名单--><string>linkedin</string><string>linkedin-sdk2</string><string>linkedin-sdk</string><!-- 点点虫 URL Scheme 白名单--><string>laiwangsso</string><!-- 易信 URL Scheme 白名单--><string>yixin</string><string>yixinopenapi</string><!-- instagram URL Scheme 白名单--><string>instagram</string><!-- whatsapp URL Scheme 白名单--><string>whatsapp</string><!-- line URL Scheme 白名单--><string>line</string><!-- Facebook URL Scheme 白名单--><string>fbapi</string><string>fb-messenger-api</string><string>fbauth2</string><string>fbshareextension</string><!-- Kakao URL Scheme 白名单-->  <!-- 注:以下第一个参数需替换为自己的kakao appkey--> <!-- 格式为 kakao + "kakao appkey"-->    <string>kakaofa63a0b2356e923f3edd6512d531f546</string><string>kakaokompassauth</string><string>storykompassauth</string><string>kakaolink</string><string>kakaotalk-4.5.0</string><string>kakaostory-2.9.0</string><!-- pinterest URL Scheme 白名单-->  <string>pinterestsdk.v1</string><!-- Tumblr URL Scheme 白名单-->  <string>tumblr</string><!-- 印象笔记 --><string>evernote</string><string>en</string><string>enx</string><string>evernotecid</string><string>evernotemsg</string><!-- 有道云笔记--><string>youdaonote</string><string>ynotedictfav</string><string>com.youdao.note.todayViewNote</string><string>ynotesharesdk</string><!-- Google+--><string>gplus</string><!-- Pocket--><string>pocket</string><string>readitlater</string><string>pocket-oauth-v1</string><string>fb131450656879143</string><string>en-readitlater-5776</string><string>com.ideashower.ReadItLaterPro3</string><string>com.ideashower.ReadItLaterPro</string><string>com.ideashower.ReadItLaterProAlpha</string><string>com.ideashower.ReadItLaterProEnterprise</string><!-- VKontakte--><string>vk</string><string>vk-share</string><string>vkauthorize</string>
</array>

第六步:在项目的 plist 文件中配制 URL Scheme




二、实现第三方登录功能

       前言:现在已经有了一个空项目里面有一个友盟SDK,并做了相关的配制后,接下来就是要实现该功能。在实现之前需要自己去申请一个友盟AppKey


1.创建一个公共的文件 CommentHeader.h ,用来存放 key 值

//
//  CommentHeader.h
//  QJWeixinLogin
//
//  Created by 瞿杰 on 2017/6/15.
//  Copyright © 2017年 yiniu. All rights reserved.
//#ifndef CommentHeader_h
#define CommentHeader_h//测试微信相关参
static NSString *kTestWxAppId = @"wxdc1e388c3822c80b";static NSString *kTestWxAppSecret = @"3baf1193c85774b3fd9d18447d76cab0";//友盟AppKey
static NSString *kUMengAppKey = @"xxxxxxxxxx";#endif /* CommentHeader_h */




2.项目的 AppDelegate 文件

//
//  AppDelegate.h
//  QJWeixinLogin
//
//  Created by 瞿杰 on 2017/6/15.
//  Copyright © 2017年 yiniu. All rights reserved.
//#import <UIKit/UIKit.h>
#import <CoreData/CoreData.h>@interface AppDelegate : UIResponder <UIApplicationDelegate>@property (strong, nonatomic) UIWindow *window;@property (readonly, strong) NSPersistentContainer *persistentContainer;- (void)saveContext;@end
//
//  AppDelegate.m
//  QJWeixinLogin
//
//  Created by 瞿杰 on 2017/6/15.
//  Copyright © 2017年 yiniu. All rights reserved.
//#import "AppDelegate.h"#import "ViewController.h"
#import "CommentHeader.h"
#import <UMSocialCore/UMSocialCore.h>
#import "WXApi.h"@interface AppDelegate ()@end@implementation AppDelegate// 初始化环境
-(void)initEnvironment
{//打开调试日志[[UMSocialManager defaultManager] openLog:YES];//设置友盟AppKey[[UMSocialManager defaultManager] setUmSocialAppkey:kUMengAppKey];//设置微信的appKey和appSecret[[UMSocialManager defaultManager] setPlaform:UMSocialPlatformType_WechatSession appKey:kTestWxAppId appSecret:kTestWxAppSecret redirectURL:@"http://mobile.umeng.com/social"];
}- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {// Override point for customization after application launch.// 初始化微信登录环境[self initEnvironment];self.window = [[UIWindow alloc] init];self.window.backgroundColor = [UIColor grayColor];self.window.rootViewController = [[ViewController alloc] init];[self.window makeKeyAndVisible];return YES;
}#pragma mark - 回调
-(BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{return [[UMSocialManager defaultManager] handleOpenURL:url];
}

3.控制器文件 ViewController

//
//  ViewController.h
//  QJWeixinLogin
//
//  Created by 瞿杰 on 2017/6/15.
//  Copyright © 2017年 yiniu. All rights reserved.
//#import <UIKit/UIKit.h>@interface ViewController : UIViewController@end
//
//  ViewController.m
//  QJWeixinLogin
//
//  Created by 瞿杰 on 2017/6/15.
//  Copyright © 2017年 yiniu. All rights reserved.
//#import "ViewController.h"#import "ThirdPartyLoginTools.h"
#import "UIImageView+QJWebImage.h"@interface ViewController ()<ThirdPartyLoginToolsDelegate>@property (nonatomic , strong)UIImageView * imageView ;
@property (nonatomic , strong)UILabel * nameLabel ;
@property (nonatomic , strong)UILabel * sexLabel ;@property (nonatomic , strong)UIButton * weixinLogin ;@end@implementation ViewController- (void)viewDidLoad {[super viewDidLoad];self.view.backgroundColor = [UIColor redColor];[self setUpViews];
}-(void)setUpViews
{self.imageView = [[UIImageView alloc] init];self.imageView.frame = CGRectMake(100, 100, 100, 100);self.imageView.backgroundColor = [UIColor blueColor];[self.view addSubview:self.imageView];self.nameLabel = [[UILabel alloc] init];self.nameLabel.backgroundColor = [UIColor whiteColor];self.nameLabel.textColor = [UIColor blackColor];self.nameLabel.frame = CGRectMake(100, 210, 100, 50);self.nameLabel.text = [NSString stringWithFormat:@"用户名:xxx"];[self.view addSubview:self.nameLabel];self.sexLabel = [[UILabel alloc] init];self.sexLabel.backgroundColor = [UIColor whiteColor];self.sexLabel.textColor = [UIColor blackColor];self.sexLabel.frame = CGRectMake(100, 270, 100, 50);self.sexLabel.text = [NSString stringWithFormat:@"性别:x"];[self.view addSubview:self.sexLabel];UIButton * weixinLogin = [[UIButton alloc] init];self.weixinLogin = weixinLogin ;[weixinLogin setTitle:@"微信登录" forState:UIControlStateNormal];[weixinLogin setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];weixinLogin.backgroundColor = [UIColor whiteColor];[weixinLogin addTarget:self action:@selector(weixinLoginBtnDidClicked) forControlEvents:UIControlEventTouchUpInside];[self.view addSubview:weixinLogin];weixinLogin.frame = CGRectMake(100, 380, 100, 100);
}-(void)weixinLoginBtnDidClicked
{NSLog(@"weixinLoginBtnDidClicked");[ThirdPartyLoginTools weChatLogin:self delegate:self];
}#pragma mark - ThirdPartyLoginToolsDelegate
-(void)loginToolsWithUserMessgate:(UMSocialUserInfoResponse *)response
{[self.imageView qj_setImageWithUrlStr:response.iconurl];self.nameLabel.text = [NSString stringWithFormat:@"用户名:%@",response.name];self.sexLabel.text = [NSString stringWithFormat:@"性别:%@",response.gender];
}@end

4.第三方登录工具文件 ThirdPartyLoginTools
//
//  ThirdPartyLoginTools.h
//  DuoBao
//
//  Created by 瞿杰 on 17/6/15.
//
//#import <Foundation/Foundation.h>
#import <UIKit/UIKit.h>
#import <UMSocialCore/UMSocialCore.h>typedef enum : NSUInteger {ThirdPartyPlatformTypeQQ = 3,ThirdPartyPlatformTypeWechat = 4,ThirdPartyPlatformTypeSina = 5,
} ThirdPartyPlatformType;@protocol ThirdPartyLoginToolsDelegate <NSObject>@required
-(void)loginToolsWithUserMessgate:(UMSocialUserInfoResponse *)response ;@end@interface ThirdPartyLoginTools : NSObject/***  新浪登陆**  @param controller*/
+(void)sinaLogin:(UIViewController *)controller  delegate:(id<ThirdPartyLoginToolsDelegate>) delegate;
/***  微信登陆**  @param controller*/
+(void)weChatLogin:(UIViewController *)controller delegate:(id<ThirdPartyLoginToolsDelegate>) delegate;
/***  QQ登陆**  @param controller*/+(void)qqLogin:(UIViewController *)controller delegate:(id<ThirdPartyLoginToolsDelegate>) delegate;/**** 登陆*  @param platformName 平台名字*  @param controller*/
+(void)loginWithPlatformName:(ThirdPartyPlatformType)type withController:(UIViewController *)controller  delegate:(id<ThirdPartyLoginToolsDelegate>) delegate;/***  第三方授权成功,登陆接口**  @param loginType  登陆类型*  @param openId     第三方唯一标识*  @param avatar     头像地址*  @param sex        性别*  @param birthday   生日*  @param controller */
+(void)thirdPartyLoginWithPlatformType:(NSInteger)loginType  openId:(NSString *)openId name:(NSString *)name avatar:(NSString *)avatar sex:(NSString *)sex  birthDay:(NSString *)birthday iconUrl:(NSString*)iconUrl  controller:(UIViewController *)controller;
@end
//
//  ThirdPartyLoginTools.m
//  DuoBao
//
//  Created by 瞿杰 on 17/6/15.
//
//#import "ThirdPartyLoginTools.h"
//#import "UserInfoUtils.h"
#import "WXApi.h"
#import "WeiboSDK.h"
#import <TencentOpenAPI/TencentOAuth.h>@implementation ThirdPartyLoginTools+(void)sinaLogin:(UIViewController *)controller  delegate:(id<ThirdPartyLoginToolsDelegate>) delegate
{if ([WeiboSDK isWeiboAppInstalled]) {[self loginWithPlatformName:ThirdPartyPlatformTypeSina withController:controller delegate:delegate];}else{NSLog(@"请安装新浪客户端");}
}+(void)weChatLogin:(UIViewController *)controller delegate:(id<ThirdPartyLoginToolsDelegate>) delegate
{if ([WXApi isWXAppInstalled]) {[self loginWithPlatformName:ThirdPartyPlatformTypeWechat withController:controller delegate:delegate];}else{NSLog(@"请安装微信客户端");
//        [ToastUtil toast:@"请安装微信客户端"];}
}+(void)qqLogin:(UIViewController *)controller delegate:(id<ThirdPartyLoginToolsDelegate>) delegate
{if ([TencentOAuth iphoneQQInstalled]) {[self loginWithPlatformName:ThirdPartyPlatformTypeQQ withController:controller delegate:delegate];}else{NSLog(@"请安装QQ客户端");}
}+(void)loginWithPlatformName:(ThirdPartyPlatformType)type withController:(UIViewController *)controller  delegate:(id<ThirdPartyLoginToolsDelegate>) delegate
{//此处调用授权的方法,你可以把下面的platformName 替换成 UMShareToSina,UMShareToTencent等UMSocialPlatformType platformName  ;if (ThirdPartyPlatformTypeWechat == type) {platformName = UMSocialPlatformType_WechatSession ;}else if (ThirdPartyPlatformTypeQQ == type){platformName = UMSocialPlatformType_QQ ;}else{platformName = UMSocialPlatformType_Sina ;}[[UMSocialManager defaultManager] getUserInfoWithPlatform:platformName currentViewController:controller completion:^(id result, NSError *error) {if (error) {} else {UMSocialUserInfoResponse *resp = result;if ([delegate respondsToSelector:@selector(loginToolsWithUserMessgate:)]) {[delegate loginToolsWithUserMessgate:resp];}// 授权信息NSLog(@"Wechat uid: %@", resp.uid);NSLog(@"Wechat openid: %@", resp.openid);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.gender);// 第三方平台SDK源数据NSLog(@"Wechat originalResponse: %@", resp.originalResponse);[self thirdPartyLoginWithPlatformType:type openId:resp.uid name:resp.name avatar:resp.iconurl sex:[NSString stringWithFormat:@"%ld",[[resp.originalResponse objectForKey:@"sex"] integerValue]] birthDay:nil iconUrl:resp.iconurl controller:controller];}}];
}+(void)thirdPartyLoginWithPlatformType:(NSInteger)loginType  openId:(NSString *)openId name:(NSString *)name avatar:(NSString *)avatar sex:(NSString *)sex  birthDay:(NSString *)birthday iconUrl:(NSString*)iconUrl  controller:(UIViewController *)controller
{// 自家APP登录获取数据
}@end

5.对于 UIImageView+QJWebImage.h 文件是用于下载图片的,自个封装的,如有不足之处,可用SDWebImage框架代替。下载 QJWebImage,结构如下:




三、学习参考网址:友盟官方网址






这篇关于第四十一篇:微信第三方登录的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/983618

相关文章

Oracle登录时忘记用户名或密码该如何解决

《Oracle登录时忘记用户名或密码该如何解决》:本文主要介绍如何在Oracle12c中忘记用户名和密码时找回或重置用户账户信息,文中通过代码介绍的非常详细,对同样遇到这个问题的同学具有一定的参... 目录一、忘记账户:二、忘记密码:三、详细情况情况 1:1.1. 登录到数据库1.2. 查看当前用户信息1.

MobaXterm远程登录工具功能与应用小结

《MobaXterm远程登录工具功能与应用小结》MobaXterm是一款功能强大的远程终端软件,主要支持SSH登录,拥有多种远程协议,实现跨平台访问,它包括多会话管理、本地命令行执行、图形化界面集成和... 目录1. 远程终端软件概述1.1 远程终端软件的定义与用途1.2 远程终端软件的关键特性2. 支持的

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

Oracle数据库如何切换登录用户(system和sys)

《Oracle数据库如何切换登录用户(system和sys)》文章介绍了如何使用SQL*Plus工具登录Oracle数据库的system用户,包括打开登录入口、输入用户名和口令、以及切换到sys用户的... 目录打开登录入口登录system用户总结打开登录入口win+R打开运行对话框,输php入:sqlp

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

Security OAuth2 单点登录流程

单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,当用户登录时,就可以获取所有系统的访问权限,不用对每个单一系统都逐一登录。这项功能通常是以轻型目录访问协议(LDAP)来实现,在服务器上会将用户信息存储到LDAP数据库中。相同的,单一注销(single sign-off)就是指

W外链微信推广短连接怎么做?

制作微信推广链接的难点分析 一、内容创作难度 制作微信推广链接时,首先需要创作有吸引力的内容。这不仅要求内容本身有趣、有价值,还要能够激起人们的分享欲望。对于许多企业和个人来说,尤其是那些缺乏创意和写作能力的人来说,这是制作微信推广链接的一大难点。 二、精准定位难度 微信用户群体庞大,不同用户的需求和兴趣各异。因此,制作推广链接时需要精准定位目标受众,以便更有效地吸引他们点击并分享链接

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

如何更优雅地对接第三方API

如何更优雅地对接第三方API 本文所有示例完整代码地址:https://github.com/yu-linfeng/BlogRepositories/tree/master/repositories/third 我们在日常开发过程中,有不少场景会对接第三方的API,例如第三方账号登录,第三方服务等等。第三方服务会提供API或者SDK,我依稀记得早些年Maven还没那么广泛使用,通常要对接第三方