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;

}

在授权成功的回调中拿到服务器所需要的参数传给后台

至此我们所需要做的已经完成了,看后台的验证就行了。

注意:模拟器中没有效果,需要用真机去调试

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/19036.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Apple ID很久没有登录,使用邮件验证修改手机号的方法

背景&#xff1a;没有已登录的苹果设备 手机号已经更换 知道登录密码&#xff08;不知道登录密码&#xff0c;在官网修改&#xff0c;也是通过邮件验证&#xff09; 解决方法 1、登录账号和密码&#xff0c;会提示需要输入验证码。点击“未收到验证码” 2.点击第二项&#x…

Sign In with Apple - 使用苹果账号登录你的应用

编辑&#xff1a;老峰&#xff0c;作者&#xff1a;KANGZUBIN 来源&#xff1a;小专栏《WWDC19 内参》 苹果在 9 月 12 号更新了审核指南&#xff0c;加入 4.8 Sign in with Apple 一条&#xff0c;要求所有使用 第三方登录 的 App&#xff0c;都 必须接入 Sign in with Apple。…

IOS企业应用出现无法验证,需要网络连接以在这台iPad上验证。接入互联网并重试

这两天出现一个很奇怪的现象&#xff0c;IOS 13.5.1版本以上的系统安装应用时企业APP无法信任&#xff0c;但是IOS 13.5.1版本以下又可以信任。然后我做了以下操作之后就可以正常安装和信任了。 1.更换新的Development证书&#xff0c;原先的Development证书类型是Development&…

关于ipad:无法验证服务器身份

ipad 连接网络后&#xff0c;有时候会冒出这个弹窗&#xff0c;并且关掉后仍继续弹出 可以尝试以下几种方法&#xff1a;&#xff08;我是用③解决的&#xff09; ①. 确保你的iPad连接的是稳定的网络。有时候网络连接不稳定会导致无法验证服务器身份。 我们学校这个校园网…

Mirai登陆QQ的登陆验证过程

1.配置好一切,启动mirai进行登陆 设置好Bot的账号密码,启动项目 2.弹出如下弹窗,提示我们需要进行滑块验证 1.复制红框内的URL到浏览器打开 2.记得在加载完后按f12打开控制台 3.控制台切换到network/网络 3. 拖动滑动窗口,正确进行验证,观察控制台的响应 1.找到cap_union_new_…

iOS接入Google登录

目录 1.在Google Cloud后台配置客户端ID 2.iOS配置URL Types​编辑 3.代码实操 1.在Google Cloud后台配置客户端ID 首先要在 Google Cloud 中创建一个项目。新创建的Project需要先配置同意屏幕。一共有4步骤需要配置。 1.OAuth 同意屏幕 User Type选择"外部"进行创…

「超全!」谷歌大神 LeetCode 刷题笔记 PDF 分享

这是一本面向有C++编程基础,但缺乏刷题经验的读者的教科书和工具书(不适合完全的编程小白喔);同时,这是一本总结了15种常见类型题,50种细分类型题,101道题解的LeetCode刷题指南~ 作者高畅是谷歌无人车部门(Waymo)的工程师,从事计算机视觉和机器学习方向。 他在美国…

《LeetCode》—— 哈希

今天刷题讲解的主要讲的是关于——哈希这个知识点的题目讲解。 目录 &#xff08;一&#xff09;缺失的第一个正整数 &#xff08;二&#xff09;数组中只出现一次的两个数字 1、直接法 2、哈希 &#xff08;三&#xff09;直线上最多的点数 &#xff08;一&#xff09;缺…

文心一言 VS 讯飞星火 VS chatgpt (53)-- 算法导论6.2 5题

五、MAX-HEAPIFY的代码效率较高&#xff0c;但第 10 行中的递归调用可能例外&#xff0c;它可能使某些编译器产生低效的代码。请用循环控制结构取代递归&#xff0c;重写 MAX-HEAPIFY代码。 文心一言&#xff1a; 以下是使用循环控制结构取代递归调用的 MAX-HEAPIFY 代码&…

【Day18】LeetCode算法刷题[1694. 重新格式化电话号码 ] [202.快乐数]

刷题打卡&#xff0c;第十八天 题目一、1694. 重新格式化电话号码题目二、202.快乐数 题目一、1694. 重新格式化电话号码 原题链接&#xff1a;1694. 重新格式化电话号码 题目描述&#xff1a; 给你一个字符串形式的电话号码 number 。number 由数字、空格 、和破折号 - 组…

List解答LeetCode杨辉三角

作者&#xff1a;月亮嚼成星~ 博客主页&#xff1a;月亮嚼成星~的博客主页 专栏&#xff1a;数据结构与算法 工欲善其事必先利其器&#xff0c;给大家介绍一款超牛的斩获大厂offer利器——牛客网 点击免费注册和我一起刷题吧 目录 了解杨辉三角 题目要求&#xff1a; 解答思…

张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士...

晓查 萧箫 明敏 鱼羊 发自 凹非寺量子位 | 公众号 QbitAI 张朝阳当物理老师还真是当上瘾了。 刚刚直接完成了一场线下课&#xff0c;当场手推质能方程&#xff0c;一整面黑板墙都差点没盛下。 这个姿势&#xff0c;是不是有你大物老师内范儿了&#xff08;手动狗头&#xff09;…

文心一言 VS 讯飞星火 VS chatgpt (25)-- 算法导论4.2 7题

七、设计算法&#xff0c;仅使用三次实数乘法即可完成复数 abi和cdi 相乘。算法需接收a、b、c和d 为输入&#xff0c;分别生成实部 ac-bd 和虚部adbc。 文心一言&#xff1a; 可以使用如下算法来计算复数 abi 和 cdi 的积&#xff0c;且只需进行三次实数乘法&#xff1a; 1.…

文心一言 VS 讯飞星火 VS chatgpt (24)-- 算法导论4.2 6题

六、用Strassen 算法作为子进程来进行一个 knn 矩阵和一个nkn 矩阵相乘&#xff0c;最快需要花费多长时间?对两个输入矩阵规模互换的情况&#xff0c;回答相同的问题。 文心一言&#xff1a; Strassen 算法是一种用于矩阵乘法的分治算法&#xff0c;它将原始的矩阵分解为较小…

文心一言 VS 讯飞星火 VS chatgpt (41)-- 算法导论5.4 5题

五、在大小为n的集合中&#xff0c;一个k字符串构成一个k排列的概率是多少?这个问题和生日悖论有什么关系? 文心一言&#xff1a; 在大小为n的集合中&#xff0c;一个k字符串构成一个k排列的概率是1/k!&#xff0c;这是由于排列的总数是k!&#xff0c;而每个字符串被选中的…

文心一言 VS 讯飞星火 VS chatgpt (18)-- 算法导论4.1 5题

五、使用如下思想为最大子数组问题设计一个非递归的、线性时间的算法。从数组的左边界开始&#xff0c;由左至右处理&#xff0c;记录到目前为止已经处理过的最大子数组。若已知 A[1…j]门的最大子数组&#xff0c;基于如下性质将解扩展为 A[1…j1]的最大子数组:A[1…j1]的最大…

张朝阳开课手推E=mc²,李永乐现场狂做笔记!CEO当太久都忘了他是MIT物理博士

张朝阳当物理老师还真是当上瘾了。 刚刚直接完成了一场线下课&#xff0c;当场手推质能方程&#xff0c;一整面黑板墙都差点没盛下。 这个姿势&#xff0c;是不是有你大物老师内范儿了&#xff08;手动狗头&#xff09;。 ‍没地方继续推导了&#xff0c;擦黑板前还要感慨一句…

AI 绘画 - 建筑绘图辅助设计之 SD 基础

前情提要 如果你想学会一门东西&#xff0c;那么就给交给自己一个明确的任务&#xff0c;然后独立完成&#xff0c;之后我们就可以掌握这门技术了&#xff1b; 简介 SD建筑绘画主要目的是将建筑概念转化为可视化的表达形式&#xff0c;以便更好地传达设计理念给业主、团队成…

AI 绘画 - 建筑绘图辅助设计之模型训练

前情提要 2023-06-18 周日 杭州 小雨 小记: 昨天搞的好累&#xff0c;10点左右就想着先躺一会儿&#xff0c;然后就睡过去了&#xff0c;很奇怪&#xff0c;如果进行 AI 绘画&#xff0c;晚上就会做很奇怪的梦&#xff0c;说不上来的那种感觉&#xff0c;就是莫名的不舒服。 …

如何使用Midjourney辅助建筑设计,常用的提示和使用效果展示(内附Midjourney提示词网站)

文章目录 一.Midjourney建筑设计的提示技巧1. prompt模板12.prompt模板2 二、著名建筑师为例1.Zaha Hadid&#xff08;扎哈哈迪德&#xff09;2.Ludwig Mies van der Rohe&#xff08;路德维希密斯凡德罗&#xff09;3.Renzo Piano&#xff08;皮亚诺&#xff09;4.Stefano Boe…