ShareSDK 苹果登录实现

描述

根据 苹果审核 指南:如果app专门使用第三方或社交登录服务(例如微信登录,QQ登录,Facebook登录,Google登录,Twitter登录等)来对其进行设置或验证这个app的用户主账户,则该app必须同时提供“通过Apple登录”作为等效选项,用户的主账户时指在app中建立的,用于标识身份,登录和访问功能和相关服务的账户。


在以下情况下,不要求提供“通过 Apple 登录”选项:

  • 您的 app 仅使用公司自有的帐户设置和登录系统。
  • 您的 app 是一款教育、企业或商务 app,要求用户使用现有的教育或企业帐户登录。
  • 您的 app 使用政府或行业支持的公民身份系统或电子身份证来鉴定用户身份。
  • 您的 app 是特定第三方服务的客户端,用户需要使用他们的邮件、社交媒体或其他第三方帐户直接登录才能访问内容。


按钮要求

苹果会提供一个推荐的按钮,如上图,你也可以自定义一个按钮,但必须符合苹果的规范:样式规范官方文档

集成

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登录的话都只显示步骤二的界面。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,陶陶摘苹果的问题可以用C语言来实现。我们可以定义一个数组来表示苹果树上每个苹果的高度,然后用循环遍历数组,判断每个苹果是否符合摘苹果的要求。 以下是一个简单的实现: ``` #include <stdio.h> int main() { int n, m; // n表示苹果树上的苹果数量,m表示陶陶的身高 int apples[100]; // 存储苹果树上每个苹果的高度 int count = 0; // 记录符合要求的苹果数量 // 输入苹果数量和陶陶的身高 scanf("%d %d", &n, &m); // 输入每个苹果的高度 for (int i = 0; i < n; i++) { scanf("%d", &apples[i]); } // 遍历每个苹果,判断是否符合要求 for (int i = 0; i < n; i++) { if (apples[i] <= m) { count++; // 记录符合要求的苹果数量 } } // 输出符合要求的苹果数量 printf("%d", count); return 0; } ``` 在上面的代码中,我们首先定义了变量n和m,分别表示苹果树上的苹果数量和陶陶的身高。然后定义了一个长度为100的数组apples,用来存储每个苹果的高度。接着,我们用循环遍历数组,输入每个苹果的高度。 接下来,我们再次用循环遍历数组,判断每个苹果是否符合要求。如果苹果的高度不大于陶陶的身高,就将符合要求的苹果数量加1。最后,输出符合要求的苹果数量即可。 当然,这只是一个简单的实现,实际情况可能会更加复杂。但是,我们可以通过这个例子来学习如何用C语言实现一个简单的问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MobTech袤博科技

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值