ios swift5 “Sign in with Apple“(使用苹果登录)怎样接入(第三方登录)集成AppleID登录

文章目录

  • 截图
  • 1.在开发者网站的app id中添加Sign in with Apple功能
  • 2.在Xcode中添加Sign in with Apple功能
  • 3.代码:只有第一次登录的时候可以获取到用户名
  • 参考博客
  • chatGPT答案

截图

请添加图片描述

1.在开发者网站的app id中添加Sign in with Apple功能

1.1 如果你新建app id,记得在新建的时候就选中Sign in with Apple功能
请添加图片描述
请添加图片描述
1.2 如果app已经上线了,后面再需要加苹果登录的功能,也可以在app id的配置中加这个功能,只是勾选Sign in with Apple点击Save后,profilex需要重新生成
请添加图片描述

2.在Xcode中添加Sign in with Apple功能

请添加图片描述

3.代码:只有第一次登录的时候可以获取到用户名

import AuthenticationServices
//MARK: Sign in with Apple 苹果第三方登录
extension LoginVC{func addAppleLoginBtn(){let appleLoginButton = ASAuthorizationAppleIDButton(type: .signIn, style: .black)view.addSubview(appleLoginButton)appleLoginButton.snp.makeConstraints { make inmake.top.equalTo(fbLoginButton.snp_bottomMargin).offset(40*GLratioHeight)make.centerX.equalToSuperview()make.width.equalTo(200)make.height.equalTo(40)}appleLoginButton.addTarget(self, action: #selector(appleLoginButtonTapped), for: .touchUpInside)}@objc func appleLoginButtonTapped() {// 在这里处理按钮点击事件,启动苹果登录流程let appleIDProvider = ASAuthorizationAppleIDProvider()let request = appleIDProvider.createRequest()request.requestedScopes = [.fullName, .email]let authorizationController = ASAuthorizationController(authorizationRequests: [request])authorizationController.delegate = selfauthorizationController.presentationContextProvider = selfauthorizationController.performRequests()}}extension LoginVC: ASAuthorizationControllerDelegate {func authorizationController(controller: ASAuthorizationController, didCompleteWithAuthorization authorization: ASAuthorization) {printXY(#function, obj: self, line: #line)if let credential = authorization.credential as? ASAuthorizationAppleIDCredential {// 用户成功登录,可以获取用户身份信息并进行相应操作let userIdentifier = credential.user//名字只有第一登录的时候可以获取到,后面都是nillet fullName = credential.fullNamelet name = (fullName?.givenName ?? "xxx") + " " + (fullName?.familyName ?? "apple")let email = credential.email// 在这里处理用户身份信息,例如创建用户账户、进行授权等}}func authorizationController(controller: ASAuthorizationController, didCompleteWithError error: Error) {// 登录过程中出现错误,可以在这里处理错误情况print("Apple Login Error: \(error.localizedDescription)")}
}extension LoginVC: ASAuthorizationControllerPresentationContextProviding {func presentationAnchor(for controller: ASAuthorizationController) -> ASPresentationAnchor {return self.view.window!}
}

参考博客

iOS 苹果登录(第三方登录) - csdn
集成AppleID登录 - 简书

chatGPT答案

要在你的 iOS 应用中接入苹果登录,你需要按照以下步骤进行:

苹果开发者账号: 确保你有一个苹果开发者账号,因为在使用苹果登录功能之前,你需要在苹果开发者网站上注册你的应用,并创建相应的身份验证密钥。

Xcode 中配置应用: 打开你的 Xcode 项目,然后转到你的应用目标设置。在 “Signing & Capabilities”(签名与能力)选项卡中,确保你的应用已启用 “Sign in with Apple”(使用苹果登录)功能。如果没有,请点击 “+” 按钮,然后添加该功能。

在苹果开发者网站上配置身份验证密钥: 登录苹果开发者网站,转到 “Certificates, Identifiers & Profiles”(证书、标识符与配置文件)部分。然后,创建一个新的认证密钥,选择 “Sign in with Apple”(使用苹果登录)选项。

集成苹果登录 SDK: 在你的应用中集成苹果登录 SDK。苹果提供了一个名为 “AuthenticationServices” 的框架,你可以使用它来处理苹果登录。确保在需要使用苹果登录功能的视图控制器中导入该框架,并按照苹果的文档进行配置。

实现登录流程: 在你的应用中添加适当的按钮或页面,用于触发苹果登录流程。在用户点击登录按钮时,调用苹果登录 SDK 提供的方法启动登录流程。然后,处理登录成功或失败的回调,并根据情况执行相应的操作。

处理用户数据: 登录成功后,你将收到一个包含用户身份信息的认证令牌。你可以使用这些信息来创建用户账户、进行授权或执行其他操作。确保遵循苹果的隐私政策和最佳实践,正确处理用户数据。

测试和优化: 在集成苹果登录后,进行全面的测试,确保它能够在各种情况下正常工作。此外,考虑优化用户体验,确保登录流程简单直观,并提供适当的错误处理和反馈。

通过以上步骤,你应该能够在你的 iOS 应用中成功集成苹果登录功能。

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

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

相关文章

Spring事务简介,事务角色,事务属性

1.Spring事务简介 事务作用:在数据层保障一系列的数据库操作同成功同失败Spring事务作用:在数据层或业务层保障一系列的数据操作同成功同失败 public interface PlatformTransactionManager{void commit(TransactionStatus status) throws TransactionE…

Qt 翻译工具:使用 tr() 函数实现多语言支持

引言 在开发跨平台应用程序时,支持多语言是一个常见需求。Qt 提供了一套完整的国际化工具,帮助开发者轻松实现应用程序的本地化。本文将介绍如何在 Qt 中使用 tr() 函数进行翻译,并总结一些常见的困难和解决方法。 使用 tr() 函数进行翻译 …

CSS中的类命名

CSS类名在开发中一般都是简单的命名一下,例如 nav、title、menu 等等,但是这也带来了问题,出现命名冲突的时候不知道是哪里引起的,加上 CSS 本身权重的问题就更加棘手。如果是小项目,代码不多、开发人员较少还可以控制…

plasmo开发浏览器插件动态setIcon修改插件图标和setBadgeText显示徽标

动态修改图标和设置徽标主要用到action这个api,官网地址:https://developer.chrome.com/docs/extensions/reference/api/action?hlzh-cn#method-setIcon 如果你使用官方原生的方式开发,加载和修改图标应该是比较简单的,但是如果…

2024.4.7力扣每日一题——王位继承顺序

2024.4.7 题目来源我的题解方法一 哈希表多叉树的前序遍历 题目来源 力扣每日一题;题序:1600 我的题解 方法一 哈希表多叉树的前序遍历 发现继承顺序的生成与多叉树的前序遍历一致,只需要在遍历过程中将已经去世的给排除就可以了。 如何存…

Ubuntu系统中,使用`nohup`命令启动Java程序。nohup参数说明、验证启动、停止程序详细教程

在Ubuntu系统中,使用nohup命令启动Java程序可以实现在后台运行程序,即使终端关闭或用户注销,程序也会继续运行。以下是使用nohup启动Java程序的步骤: 打开终端。 进入到你的Java程序所在的目录,或者确保JAVA_HOME环境…

valgrind 是个啥?

最近在看PG代码时,看到许多VALGRIND相关的宏,例如 VALGRIND_MAKE_MEM_DEFINED、 VALGRIND_MAKE_MEM_NOACCESS,特别是移植PG的某模块到OG时,由于OG中没有定义这些宏,遇到这些宏,一开始我也不知道该怎么办了。…

C语言面试题之合并排序的数组

合并排序的数组 实例要求 1、给定两个排序后的数组 A 和 B,其中 A 的末端有足够的缓冲空间容纳 B; 2、编写一个方法,将 B 合并入 A 并排序; 3、初始化 A 和 B 的元素数量分别为 m 和 n; 示例: 输入: A [1,2,3,0…

小剧场短剧剧集收费短剧小程序APP

1. 内容展现 付费、免费、任务解锁:用户可以通过付费直接观看短剧,也可以通过完成平台任务(如签到、分享等)获得免费观看的机会。这种灵活的解锁方式既满足了用户的多种需求,也促进了平台的活跃度。主流展现形式&…

蓝桥杯简单模板

目录 最大公约数 两个数的最大公约数 多个数的最大公约数 最小公倍数 两个数的最小公倍数 多个数的最小公倍数 素数 ​编辑 位数分离 正写 ​编辑 反写 闰年 最大公约数 两个数的最大公约数 之前看见的是辗转相除法,例如现在让算一个49,21…

libVLC 提取视频帧使用OpenGL渲染

在上一节中,我们讲解了如何使用QWidget渲染每一帧视频数据。 由于我们不停的生成的是QImage对象,因此对 CPU 负荷较高。其实在绘制这块我们可以使用 OpenGL去绘制,利用 GPU 减轻 CPU 计算负荷,本节讲解使用OpenGL来绘制每一帧视频…

Leetcode面试经典150_Q169多数元素

题目: 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊n/2⌋ 的元素。 你可以假设数组是非空的,并且给定的数组总是存在多数元素。 解题思路: 1. 注意“大于 ⌊n/2⌋”,…

【每日一题】2529. 正整数和负整数的最大计数-2024.4.9

题目: 2529. 正整数和负整数的最大计数 给你一个按 非递减顺序 排列的数组 nums ,返回正整数数目和负整数数目中的最大值。 换句话讲,如果 nums 中正整数的数目是 pos ,而负整数的数目是 neg ,返回 pos 和 neg二者中…

A Survey for LLM

一、背景介绍 我们关注大模型中的两个主流:大语言模型和预训练的基础模型。01 大语言模型(LLMs) 语言建模是许多自然语言处理任务的基础,而大语言模型(LLMs)的初衷是为了提高语言建模的性能。与传统的神经语…

STM32之HAL开发——串行FLASH文件系统FatFs

文件系统 文件系统是为了存储和管理数据,而在存储介质建立的一种组织结构,这些结构包括操作系统引导区、目录和文件。 常见的 windows 下的文件系统格式包括 FAT32、 NTFS、exFAT。 在使用文件系统前,要先对存储介质进行格式化。格式化先擦除…

React 状态管理:高效处理数组数据的5种方法

1.原因 为什么在 React 中,状态(state)如果是数组类型,需要单独处理?主要有以下几个原因: 不可变性(Immutability): React 中的状态是不可变的,意味着我们不能直接修改状态,而是要创建一个新的状态对象。对于数组来说,直接修改数组元素是不符合 React 的设计原则的…

[LeetCode][LCR133]位 1 的个数——快速从右边消去1

题目 LCR 133. 位 1 的个数 编写一个函数,输入是一个无符号整数(以二进制串的形式),返回其二进制表达式中数字位数为 ‘1’ 的个数(也被称为 汉明重量).)。 提示: 请注意,在某些语言…

多个代理proxy配置——日志查看代理后的地址

一个项目接口有两个域名,需要配置两个代理复制一个axios封装文件,修改baseUrl为新的标识 ququ新接口文件引入新的request1即可 proxy: {// 新接口采用 /ququ前缀/ququ: {target: http://192.168.2.82:8888, //鑫哥 changeOrigin: true,logLevel: debug, …

【Python】RocketMQ 基础使用

目录 1. 介绍 2. 实践 2.1. 启动消费者 2.2. 启动生产者 1. 介绍 RocketMQ是一个开源的分布式消息传递系统,最初由阿里巴巴集团开发并于2012年开源。它旨在解决高可靠性、高吞吐量、低延迟和可伸缩性等大规模分布式系统下的消息通信需求。 RocketMQ的设计目标…

vue对比react18

1.模板语法-——>jsx JSX表达式用{}包裹&#xff0c;vue模板表达式用{{}}包裹&#xff0c;其余一致。 注意:if语句、switch语句、变量声明属于语句&#xff0c;不是表达式&#xff0c;不能出现在{}或{{}}中 <!--vue--> <template><div><p>I have…