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袤博(www.mob.com)是全球领先的数据智能科技平台。自2012年成立以来,旗下MobTech开发者服务依...

128 声望
12 粉丝
0 条评论
推荐阅读
MobTech MobPush|统一推送联盟烂尾,统一推送还能实现吗
统一推送联盟(Unified Push Alliance)是Android(安卓)平台下的移动应用信息推送技术联盟,以改善Android系统用户的推送服务体验。该联盟由工业和信息化部旗下中国泰尔实验室牵头成立于2017年10月,挂靠电信终...

MobTech袤博阅读 145

网易云音乐开源全链路埋点方案-曙光埋点(dawn)
网易云音乐开源了曙光埋点 dawn,一个跨多端的全链路埋点解决方案,旨在构造一个完美的数据理想国。曙光埋点创造性的提出了埋点虚拟树(VTree),并在此基础上实现了诸多能力,解决大前端侧埋点困难、精度差、不...

云音乐技术团队3阅读 2.5k

封面图
深度剖析 Runtime
做很多需求或者是技术细节验证的时候会用到 Runtime 技术,用了挺久的了,本文就写一些场景和源码分析相关的文章。先问几个小问题:class_rw_t的结构是数组,数组里面的元素是数组,那它是二维数组吗?为什么16字...

杭城小刘4阅读 1.1k

封面图
Mac下编译WebRTC(Mac和iOS版本)
随着新冠疫情的影响,这两年音视频的需求呈爆发式增长。在音视频领域中,WebRTC可以说是一个绕不开宝库,包括了音视频采集、编解码、传输、渲染的全过程。本文主要记录下在Mac平台上编译WebRTC Mac和iOS版本的全...

吴尼玛阅读 3.8k

抢鲜解读:Flutter 3.7更新啦
新年伊始,由 Flutter 3.7 正式版来「打头阵」!我们与整个 Flutter 社区们继续在 Flutter 3.7 中优化了框架,包括创建自定义菜单栏和层叠式菜单、更好的国际化工具支持、新的调试工具以及其他功能和特性等。

慕课网阅读 2.5k

封面图
OpenTranslator:一款基于ChatGPT API的翻译神器
这是一款使用 ChatGPT API 进行划词翻译和文本润色的浏览器插件。借助了 ChatGPT 强大的翻译能力,它将帮助您更流畅地阅读外语和编辑外语。

听蝉阅读 2.5k

Flutter中如何取消任务
在开发过程中,取消需求是很常见的,但很容易被忽略。然而,取消需求的好处也很大。例如,在页面中会发送很多请求。如果页面被切走并处于不可见状态,就需要取消未完成的请求任务。如果未及时取消,则可能会导致...

听蝉阅读 2.4k

MobTech袤博(www.mob.com)是全球领先的数据智能科技平台。自2012年成立以来,旗下MobTech开发者服务依...

128 声望
12 粉丝
宣传栏