苹果登录 Objective-C 集成通过 Apple 登录

栏目:国际 2021-12-06 07:49:39
分享到:

目标-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 —使用苹果教程登录

中:登录苹果