Apple 说:我们只从 OIDC 标准里取了一些我们喜欢的,然后扔掉了其他的

参考《三步开发社交账号登录(以钉钉登录举例) - Jeff Tian的文章 - 知乎 》,我在自己的 App 里增加了多个社交账号登录,很是兴奋,得意地将更新提交到了 App Store。

然后被拒了,原因是如果要在 App 里增加社交登录,则必须增加 AppleID 登录,并且需要将其设置在其他社交账号方式之前。

于是,就再对接一个 Apple ID 登录,再提交更新,然后又得到了被拒绝的结果。

<font style=color:rgb(23, 43, 77);>Your app offers Sign in with Apple as a login option but does not follow the design and user experience requirements for Sign in with Apple. Specifically:

<font style=color:rgb(23, 43, 77);>* Your app requires users to provide their name after using Sign in with Apple. This information is already provided by the

Authentication Services framework<font style=color:rgb(23, 43, 77);>.

<font style=color:rgb(23, 43, 77);>These requirements provide the consistent experience users expect when using Sign In with Apple to authenticate or log in to an account.

<font style=color:rgb(23, 43, 77);>并附上了一个截图:

1699852546340 4ba0ad8a 75eb 478b b37a 3530bd6fa59d

即将 AppleID 登录设置了社交登录方式的首选还不行,还不能向用户询问姓名,因为使用 Apple ID 登录时,姓名会自动带过来。

为了验证这一点,我决定自己试一试,重新设置了自己的 Apple ID 资料中的姓名:

1699852793641 9ff5921b 589e 45f9 ab79 ec6d3def9524

发现在 Apple ID 里还可以设置一个可选的 Middle name。不过,按照 Apple 开发者官网文档,他们只会提供 First name 和 Last name 给到开发者。

然而,测试时我发现,在 Apple ID 登录成功后,回调自己的服务器时,并拿不到用户的 Apple 姓名,只能拿到一个 email,即使设置了官网文档提到的 3 个 Scope:“name”、“openid”、“email”,并没有什么卵用。

反复验证后,才知道,用户的姓名,Apple ID 只在第一次回调开发者服务时提供,一旦账号链接建立完成,就不再提供……

也就是,当在登录授权页看到如下的界面时,开发者服务是拿不到姓名的:

1699853345339 9a9d7c3e 95c3 4075 b1f7 773605c3858b

这时,需要从 Apple ID 的控制面板里,断掉和开发者应用的链接(即撤销之前的授权),然后再使用 Apple ID 登录,才能获取到用户的姓名。

1699873621812 3f3e7393 b1ce 4505 81a3 105f0fa4402c

这时,Apple ID 对应的授权页面长这样:

1699853379842 e01b6823 16ca 47fd bf94 0263f18d6c7c

折腾完毕后,忍不住为 Apple 免费设计了一个新的 LOGO:

1699853424395 fb5d74e6 29d9 4b18 9820 4711191e69ef

Apple 让人又爱又恨,让我想起多年前写的打油诗:

<font style=color:rgb(18, 18, 18);>苹果

<font style=color:rgb(18, 18, 18);>是恶魔

<font style=color:rgb(18, 18, 18);>夏娃受诱惑

<font style=color:rgb(18, 18, 18);>亚当跟随堕落

<font style=color:rgb(18, 18, 18);>就要咬一口的快乐

<font style=color:rgb(18, 18, 18);>哪管被永世逐出天国!