ShareSDK 苹果登录最佳实现
描述
根据[](https://developer.apple.com/cn/app-store/review/guidelines/>苹果审核 指南:如果app专门使用第三方或社交登录服务(例如微信登录,QQ登录,Facebook登录,Google登录,Twitter登录等)来对其进行设置或验证这个app的用户主账户,则该app必须同时提供“通过Apple登录”作为等效选项,用户的主账户时指在app中建立的,用于标识身份,登录和访问功能和相关服务的账户。
</p>
<p>
在以下情况下,不要求提供“通过 Apple 登录”选项:</p>
<ul>
<li>您的 app 仅使用公司自有的帐户设置和登录系统。</li>
<li>您的 app 是一款教育、企业或商务 app,要求用户使用现有的教育或企业帐户登录。</li>
<li>您的 app 使用政府或行业支持的公民身份系统或电子身份证来鉴定用户身份。</li>
<li>您的 app 是特定第三方服务的客户端,用户需要使用他们的邮件、社交媒体或其他第三方帐户直接登录才能访问内容。
</li>
</ul>
<p>
按钮要求</p>
<p><img src=)
[](https://developer.apple.com/cn/app-store/review/guidelines/>苹果审核 指南:如果app专门使用第三方或社交登录服务(例如微信登录,QQ登录,Facebook登录,Google登录,Twitter登录等)来对其进行设置或验证这个app的用户主账户,则该app必须同时提供“通过Apple登录”作为等效选项,用户的主账户时指在app中建立的,用于标识身份,登录和访问功能和相关服务的账户。
</p>
<p>
在以下情况下,不要求提供“通过 Apple 登录”选项:</p>
<ul>
<li>您的 app 仅使用公司自有的帐户设置和登录系统。</li>
<li>您的 app 是一款教育、企业或商务 app,要求用户使用现有的教育或企业帐户登录。</li>
<li>您的 app 使用政府或行业支持的公民身份系统或电子身份证来鉴定用户身份。</li>
<li>您的 app 是特定第三方服务的客户端,用户需要使用他们的邮件、社交媒体或其他第三方帐户直接登录才能访问内容。
</li>
</ul>
<p>
按钮要求</p>
<p><img src=)
[苹果会提供一个推荐的按钮,如上图,你也可以自定义一个按钮,但必须符合苹果的规范:](https://developer.apple.com/cn/app-store/review/guidelines/>苹果审核 指南:如果app专门使用第三方或社交登录服务(例如微信登录,QQ登录,Facebook登录,Google登录,Twitter登录等)来对其进行设置或验证这个app的用户主账户,则该app必须同时提供“通过Apple登录”作为等效选项,用户的主账户时指在app中建立的,用于标识身份,登录和访问功能和相关服务的账户。
</p>
<p>
在以下情况下,不要求提供“通过 Apple 登录”选项:</p>
<ul>
<li>您的 app 仅使用公司自有的帐户设置和登录系统。</li>
<li>您的 app 是一款教育、企业或商务 app,要求用户使用现有的教育或企业帐户登录。</li>
<li>您的 app 使用政府或行业支持的公民身份系统或电子身份证来鉴定用户身份。</li>
<li>您的 app 是特定第三方服务的客户端,用户需要使用他们的邮件、社交媒体或其他第三方帐户直接登录才能访问内容。
</li>
</ul>
<p>
按钮要求</p>
<p><img src=)样式规范官方文档。
集成
ShareSDK从4.3.4版本开始支持苹果登录,将苹果返回的数据全部返回给用户。在使用ShareSDK提供的苹果登录功能后,还将提供一个可以监听苹果登录状态变化的功能,在登录状态被注销时可以实时检测。可以参考demo例子,在demo中的体现为: 在用户登录后,进设置界面(可以在另一台设备上操作)删除该app登录权限,则app能实时接收登录账号失效的状态(重新启动需要在进入前台后才能获取),从而使app更安全。
下载SDK
登录我们的 官网,进行下载,需要苹果登录,请勾选。
导入SDK
将下载的SDK导入到项目里,并添加依赖库
AuthenticationServices.framework
项目配置
证书开通Sign In with Apple选项,并且在Xcode的项目里配置
代码实现
(自己可以打印返回的信息,需要什么可以根据key去获取)
/**
授权
@param platformType 平台类型
@param settings 授权设置,接受scopes属性设置,如新浪微博关注官方微博:@{@"scopes" : @[@"follow_app_official_microblog"]},类似“follow_app_official_microblog”这些字段是各个社交平台提供的。QQ平台如设置二维码授权,添加字段为QQAuthType:@{@"QQAuthType":@1}, 0为网页账号密码登录授权
@param stateChangedHandler 授权状态变更回调处理
@return 会话id
*/
+ (SSDKSession *)authorize:(SSDKPlatformType)platformType
settings:(NSDictionary *)settings
onStateChanged:(SSDKAuthorizeStateChangedHandler)stateChangedHandler;
示例代码
[ShareSDK authorize:SSDKPlatformTypeAppleAccount
settings:nil
onStateChanged:^(SSDKResponseState state, SSDKUser *user, NSError *error) {
if (state == SSDKResponseStateSuccess)
{
NSLog(@"rawData---%@",user.rawData);
NSLog(@"credential--%@",[user.credential rawData]);
}
else
{
NSLog(@"%@",error.userInfo);
}
}];
登录状态监听
(根据自己的需求可加可不加)
/**
监听apple登录状态
@param object 添加监听的对象,在对象销毁时移除监听
@param isFirstAddCallBack 第一次添加时就回调当前状态
@param handler 返回apple登录状态
*/
+ (void)addObserve:(nullable id)object isFirstAddCallBack:(BOOL)isFirstAddCallBack
forAppleAccountLoginStateHandler:(void (^) (SSDKAppleAccountState state, SSDKUser *user, NSError *error))handler;
示例代码
[AppleAccountConnector addObserve:nil
isFirstAddCallBack:YES
forAppleAccountLoginStateHandler:^(SSDKAppleAccountState state, SSDKUser * _Nonnull user, NSError * _Nonnull error) {
if (state != SSDKAppleAccountStateAuthorized){}
else{
if (user) {
NSLog(@"------%@", user.rawData);}
}
}];
点击登录按钮发起流程如下:
i. 第一次登陆
可以输入姓名、邮箱,之后,通过输入密码、指纹、faceID等登录,在返回时,返回user、token、姓名、邮箱等信息。
ii. 第二次登陆
无需输入信息,直接通过输入密码、指纹、faceID等登录,但此时只能获取到用户的user及token信息。
iii.退出登录
在"设置->账户->密码与安全性->使用您的apple ID 的 App"中删除此应用的user记录。此时,如果再打开app进行苹果登录的话需要从第一步开始。否则只要登陆过,不论在任何设备用同一个appleID登录的话都只显示步骤二的界面。
MobTech MobPush|统一推送联盟烂尾,统一推送还能实现吗
MobTech袤博阅读 145
网易云音乐开源全链路埋点方案-曙光埋点(dawn)
云音乐技术团队赞 3阅读 2.5k
深度剖析 Runtime
杭城小刘赞 4阅读 1.1k
Mac下编译WebRTC(Mac和iOS版本)
吴尼玛阅读 3.8k
抢鲜解读:Flutter 3.7更新啦
慕课网阅读 2.5k
OpenTranslator:一款基于ChatGPT API的翻译神器
听蝉阅读 2.5k
Flutter中如何取消任务
听蝉阅读 2.4k
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。