目标-C集成通过苹果登录
1.在项目中打开“使用苹果登录”功能
在Xcode项目的目标中,选择签名和功能选项卡。点击左上角的“+”按钮,添加“苹果登录”功能。
2.添加身份验证服务框架
在目标—>常规—>框架下添加身份验证服务框架。然后在视图控制器中导入#import文件。
hUi5c.png
3.添加标识符
在这里,我创建了setCurrentIdentifier标识符对象来保存当前用户,然后让当前视图控制器服从代理。
#导入“视图控制器. h”
#导入
NSString * const setCurrentIdentifier = @“setCurrentIdentifier”;
@接口视图控制器
@end
4.创建并加载“通过苹果登录”按钮以启动授权
- setupUI {
// MARK:添加“通过苹果登录”按钮
if){ 0
asaauthorizationappleidbutton * appleIDButton =;
//注意:根据苹果的要求,“通过苹果登录”按钮的尺寸一定不能小于140*30
appleidButton . frame = cgrectMake;
//默认情况下,此按钮有圆角。当然,您也可以自定义圆角的大小
//appleiddbutton . cornerradius = 5;
;
;
}
}
触发按钮点击事件,获取用户的Appid身份信息
#pragma标记-操作
/**
使用“通过苹果登录”按钮点按事件:
1.使用提供程序创建请求
2.使用授权控制器实例执行请求
*/
-handleauthorization:按钮{
if){ 0
//一种根据用户的Apple ID授权用户并生成用户授权请求的机制
asaauthorizationappleidProvider * appleidProvider = init];
//创建新的AppleID授权请求
asaauthorizationappleidrequest * request = appleidprovider . create request;
//用户授权期间请求的联系信息
request . requestedscopes = @;
//由asaauthorizationappleiddprovider创建的授权请求,以及用于管理授权请求的控制器
asaauthorizationcontroller * controller = initwithorizationrequests:@];
//为授权控制器设置代理,通知授权请求的成功或失败
controller.delegate = self
//设置提供呈现上下文的代理,系统可以在其中向用户呈现授权界面
controller . presentationcontextprovider = self;
//在控制器初始化期间启动授权流
;
}
}
5.在授权回调协议中实现该方法
授权成功回拨:
-authorizationController:controller didCompleteWithAuthorization:authorization NS _ SWIFT _ NAME){ 0
如果{
//用户登录使用as authorization appleid credential
asaauthorizationappleidcredential * appleIDCredential = authorization . credential;
NSString * user = appleidcredential . user;
NSString *昵称= appleIDCredential.fullName .昵称;
NSData * identity token = appleidcredential . identity token;
NSLog
//授权成功后,可以获取Apple返回的所有数据,并根据需要与后台进行交互。
//需要使用钥匙扣保存用户的唯一信息,暂时处于测试阶段,NSUserDefaults
//保存苹果返回的唯一标识符
setObject:user forKey:setCurrentIdentifier];
同步];
}否则如果{
//用户使用现有的密码凭据登录
aspassword credential * psdCredential = authorization . credential;
//密码凭证对象的用户标识用户的唯一标识
NSString * user = PSDcredential . user;
//密码凭证对象的密码
NSString * PSD = psdcredential . password;
NSLog
} else {
NSLog
}
}
授权失败回调:
/**
授权失败回调
typedef NS _ ERROR _ ENUM {
as authorizationerrorunknown = 1000,
asaauthorizationerrorcanceled = 1001,
asaauthorizationerrorinvalid response = 1002,
asaauthorizationerrorthandled = 1003,
as authorizationerror failed = 1004,
} API _ AVERAGE,macos,tvos,watch OS);
*/
-authorizationController:controller didCompleteWithError:错误NS _ SWIFT _ NAME){ 0
NSLog
NSString * errorMsg
开关{
案例作为授权错误未知:{ 0
ErrorMsg = @“授权请求失败的未知原因”;
打破;
}
案例作为授权错误取消:{ 0
ErrorMsg = @“授权请求被用户取消”;
打破;
}
案例as authorizationErrorinvalid response:{ 0
ErrorMsg = @“无效的授权请求响应”;
打破;
}
案例as authorizationerrnorhandled:{ 0
ErrorMsg = @ "处理授权请求失败";
打破;
}
案例作为授权错误失败:{ 0
ErrorMsg = @“授权请求失败”;
打破;
}
}
NSLog
}
6.实现显示授权控制器的回调方法
#pragma mark -
//告诉代理在哪个窗口向用户显示内容
-presentationanchorauthorizationcontroller:controller {
返回self . view . window;
}
6.监控授权状态更改的通知
- dealloc {
if){ 0
removeObserver:自身名称:asaauthorizationappleidvprovidercredentialrevokednotification对象:nil];
}
}
-observapplesigninstate {
// MARK:监控苹果登录的授权状态,判断授权是否无效
if){ 0
NSNotificationCenter * center =;
;
}
}
授权状态更改时要执行的方法:
#pragma标记- NSNotificationCenter
/**
typedef NS _ ENUM {
//无效的授权状态
作为authorizationappleiddprovidercredentialrevoked,
//已授权
作为授权应用程序提供者重新授权,
//缺少授权证书
作为authorizationappleiddprovidercredentialnotfound,
//授权的AppleID提供程序证书已被转移
作为授权应用程序提供者重新授权转移,
}
*/
-handlesigninfithapplestatechanged:通知{
NSLog
NSLog
if){ 0
//基于用户Apple ID生成授权用户请求的机制
asaauthorizationappleiddprovider * provider = init];
//请注意,存储用户身份信息需要使用钥匙串来存储NSUserDefaults在我的简单时期制作的简单示例。
NSString * user = object forkey:@ " user identifier "];
NSLog
_ _ block NSString * errorMsg
;
}
}
苹果文档
如何使用“通过苹果登录”功能
“通过苹果登录”指南更新
苹果商店审核指南:4.8通过苹果登录
人机界面指南-登录苹果
示例代码:使用Apple登录实现用户身份验证
网络服务端点:生成和验证令牌
社区博客
stackoverflow:如何在iOS Objective-C中集成‘登录苹果’流程?
简书:登录苹果
简书:iOS开发:登录苹果
使用苹果快速配置登录
中:iOS 13 —使用苹果教程登录
中:登录苹果