iOS 苹果登录(第三方登录)
Sign In with Apple是iOS 13的新增功能
所以现在苹果的app有第三方登录的功能需要加上苹果的登录(不然审核时会被拒掉)
一、证书文件配置
登录开发者账号,创建Bundle ID时 勾选 Sign In With Apple ,开启登录功能(勾选或取消服务,会导致之前的 profile 描述文件失效,不需要新建,只要点击 Edit 重新编辑对应的 profile文件,然后保存下载使用新的profile文件即可)
二、xcode配置
在xcode中去添加Sign In with Apple
三、代码集成
1.导入头文件,添加代理
ASAuthorizationControllerDelegate, ASAuthorizationControllerPresentationContextProviding
2.添加苹果登录的按钮
如果不用苹果提供的样式,可以让UI自定义一个样式 (注意样式不能太随便,不然也会被拒掉)
3.点击登录
#pragma mark - 授权苹果ID
- (void)authorizationAppleID {
if (@available(iOS 13.0, *)) {
// 基于用户的Apple ID授权用户,生成用户授权请求的一种机制
ASAuthorizationAppleIDProvider * appleIDProvider = [[ASAuthorizationAppleIDProvider alloc] init];
// 创建新的AppleID 授权请求
ASAuthorizationAppleIDRequest * authAppleIDRequest = [appleIDProvider createRequest];
NSMutableArray <ASAuthorizationRequest *> * array = [NSMutableArray arrayWithCapacity:2];
if (authAppleIDRequest) {
[array addObject:authAppleIDRequest];
}
NSArray <ASAuthorizationRequest *> * requests = [array copy];
// 由ASAuthorizationAppleIDProvider创建的授权请求 管理授权请求的控制器
ASAuthorizationController * authorizationController = [[ASAuthorizationController alloc] initWithAuthorizationRequests:requests];
// 设置授权控制器通知授权请求的成功与失败的代理
authorizationController.delegate = self;
// 设置提供 展示上下文的代理,在这个上下文中 系统可以展示授权界面给用户
authorizationController.presentationContextProvider = self;
// 在控制器初始化期间启动授权流
[authorizationController performRequests];
} else {
// 处理不支持系统版本
NSLog(@"系统不支持Apple登录");
}
}
4.代理回调方法
#pragma mark - ASAuthorizationControllerDelegate
// 授权成功
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithAuthorization:(ASAuthorization *)authorization API_AVAILABLE(ios(13.0)) {
if ([authorization.credential isKindOfClass:[ASAuthorizationAppleIDCredential class]]) {
ASAuthorizationAppleIDCredential * credential = (ASAuthorizationAppleIDCredential *)authorization.credential;
// 苹果用户唯一标识符,该值在同一个开发者账号下的所有 App下是一样的,开发者可以用该唯一标识符与自己后台系统的账号体系绑定起来。
NSString * userID = credential.user;
// // 苹果用户信息 如果授权过,可能无法再次获取该信息
// NSPersonNameComponents * fullName = credential.fullName;
NSString * email = credential.email;
// // 服务器验证需要使用的参数
// NSString * authorizationCode = [[NSString alloc] initWithData:credential.authorizationCode encoding:NSUTF8StringEncoding];
// NSString * identityToken = [[NSString alloc] initWithData:credential.identityToken encoding:NSUTF8StringEncoding];
NSString *tokenStr = [@"ios" stringByAppendingString:userID];
[self rquestThirdLogin:tokenStr withEmail:email];
} else if ([authorization.credential isKindOfClass:[ASPasswordCredential class]]) {
// 这个获取的是iCloud记录的账号密码,需要输入框支持iOS 12 记录账号密码的新特性,如果不支持,可以忽略
// 用户登录使用现有的密码凭证
ASPasswordCredential * passwordCredential = (ASPasswordCredential *)authorization.credential;
// 密码凭证对象的用户标识 用户的唯一标识
NSString * user = passwordCredential.user;
//把用户的唯一标识 传给后台 判断该用户是否绑定手机号,如果绑定了直接登录,如果没绑定跳绑定手机号页面
// 密码凭证对象的密码
NSString * password = passwordCredential.password;
NSLog(@"userID: %@", user);
NSLog(@"password: %@", password);
} else {
}
}
// 授权失败
- (void)authorizationController:(ASAuthorizationController *)controller didCompleteWithError:(NSError *)error API_AVAILABLE(ios(13.0)) {
NSString *errorMsg = nil;
switch (error.code) {
case ASAuthorizationErrorCanceled:
errorMsg = @"用户取消了授权请求";
break;
case ASAuthorizationErrorFailed:
errorMsg = @"授权请求失败";
break;
case ASAuthorizationErrorInvalidResponse:
errorMsg = @"授权请求响应无效";
break;
case ASAuthorizationErrorNotHandled:
errorMsg = @"未能处理授权请求";
break;
case ASAuthorizationErrorUnknown:
errorMsg = @"授权请求失败未知原因";
break;
}
NSLog(@"%@", errorMsg);
}
#pragma mark - ASAuthorizationControllerPresentationContextProviding
- (ASPresentationAnchor)presentationAnchorForAuthorizationController:(ASAuthorizationController *)controller API_AVAILABLE(ios(13.0)) {
return self.view.window;
}
在授权成功的回调中拿到服务器所需要的参数传给后台
至此我们所需要做的已经完成了,看后台的验证就行了。
注意:模拟器中没有效果,需要用真机去调试
iOS 苹果登录(第三方登录)相关推荐
- iOS微信实现第三方登录的方法
这篇文章主要介绍了iOS微信第三方登录实现的全过程,一步一步告诉大家iOS微信实现第三方登录的方法,感兴趣的小伙伴们可以参考一下 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0 ...
- 苹果cms第三方登录QQ互联正确回调设置方法
QQ互联进行注册认证:https://connect.qq.com 登陆qq后点击头像申请开发者完善资料后提交审核. 域名填写你的网站域名 回调地址正确填写:http://域名/index.php/u ...
- CAS单点登录-第三方登录[QQ、微信、CSDN、GitHub](十四)
CAS单点登录-第三方登录[QQ.微信.CSDN.GitHub](十四) 注: 目前博文使用cas版本为5.1.5,由于5.2.x与5.1.x构建模式有差异,所以部分配置会有些偏差. 本章内容 简答介 ...
- iOS开发-Umeng第三方登录-个人整理
官方网址: http://dev.umeng.com/social/ios/operation#2 一.注册友盟账号 登陆友盟官网,在我的产品页面添加新应用,然后获取到Appkey. http://w ...
- iOS - Share 分享/第三方登录
1.系统方式创建分享 按照下图在 Info.plist 文件中将 Localization native development region 的值改为 China.如果不设置此项弹出的分享页面中显示 ...
- iOS实现微信第三方登录
一.接入微信第三方登录准备工作. 移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统. 在进行微信OAuth2.0授权登录接入之前,在微信开放平台注册开发者帐号,并拥 ...
- [转载]iOS开发之第三方登录QQ
转载自 iOS_developer_zhong 1. 申请腾讯开发账号. 地址:点击打开链接 2. 下载最新的SDK 地址: SDK下载 SDK内容如下: 1.sample 这个是简单的demo ...
- iOS开发之第三方登录QQ -- 史上最全最新第三方登录QQ方式实现
项目地址 : https://github.com/zhonggaorong/QQLoginDemo/tree/master 最新版本的qq登录实现步骤实现: 1. 首先,你需要去向腾讯申请账号. ...
- iOS开发之第三方登录微博-- 史上最全最新第三方登录微博方式实现
相关资源地址: 本项目demo地址 : https://github.com/zhonggaorong/weiboSDKDemo 最新SDK下载: 最新微博SDK 官网注册地址:点击打开链接 最 ...
- ios 友盟第三方登录遇到的各种坑。
//未使用pod的点友盟官方文档 http://dev.umeng.com/social/ios/quick-integration 首先pod导入 pod 'UMengSocialCOM', '~& ...
最新文章
- Warning in install.packages : package ‘RGtk2’ is not available for this version of R
- Vue中插入HTML代码的方法
- c语言常见50题 及答案(递归 循环 以及常见题目)
- OpenCV 读取一张图片并显示和保存
- python中0xFFFFFFFFFFFFFFFF这种字符串是什么意思呢
- 辽宁科技大学计算机好调剂吗,2020年辽宁科技大学硕士研究生调剂办法
- Msys2 国内源(2017.3.30)
- Emlog博客MetBlogm主题-博客开源主题源码
- 内存分配器ptmalloc,jemalloc,tcmalloc调研与对比
- select weui 动态加载数据_浪尖以案例聊聊spark3的动态分区裁剪
- 用JavaScript编码URL?
- linux数据库redis主从配置,redis介绍及主从配置
- Geohash介绍及针对具体需求的改良
- 论文A Tutorial on Graph-Based SLAM 学习笔记
- yoga710怎么进入bios_联想笔记本怎么进入BIOS联想手提电脑进BIOS方法汇总
- 围棋棋盘 -《跟小海龟学Python》案例代码
- 快速拿到 win10 锁屏壁纸
- 有关XLS文件的读取
- 光荣使命微信版服务器,腾讯光荣使命手游微信可以和QQ一起玩么 微信QQ帐号数据互通么...
- Spark案例之流量统计(三种方法)
热门文章
- 使用计算机用眼卫生,电脑族日常保护眼睛小常识
- 小写字母转大写字母并输出ASCLL值
- 微信开放平台Android应用签名的本质及如何获取
- java中将Fri Feb 19 17:32:34 CST 2021时间格式转为yyyy-MM-dd HH:mm:ss时间格式
- 还在用ListView?!OutMan!RecyclerView!
- SVN update拒绝访问,clean up失败
- LNMP添加、删除虚拟主机
- 一个技术创业者的2018年度回顾和总结 | 掘金年度征文
- Linux C编程(五) 之 gdb详解
- 流媒体后视镜方案关键技术--调节后视图像显示范围