Notifications
Article
Unity新资源包上线,轻松应用“苹果账号登陆”功能
Updated 20 days ago
1.1 K
1
苹果公司于今年6月发布了“使用苹果账号登陆”的功能。Unity紧跟步伐,推出了专门的资源包,帮助你在自己的项目中应用新功能,满足iOS上的开发新要求。
作者:Scott Flynn和Nirali Savla,2019年9月19日
原博地址:https://blogs.unity3d.com/2019/09/19/support-for-apple-sign-in/
在6月的全球开发者大会(WWDC)上,苹果发布了公司的新产品:使用苹果账号登录。在9月19日iOS 13即将发布之际,苹果更新了App Store审核指南,要求所有使用第三方账号登录的新应用加入使用苹果账号登录的选项。而现有应用需要在2020年4月之前添加上苹果登录选项。你可以在苹果开发者网站上了解更多内容。
我们知道许多Unity开发者都会用到第三方账号登录服务。为了让大家更容易地跟上新的规定,我们创建了一个新的资源商店包,你可以将新包添加到已有项目或新的项目中,轻松应用“使用苹果账号登陆”功能。
下文中将包含:
  1. 新资源商店插件使用的手把手教学
  2. 关键指南的链接
  3. 高级的服务器端验证实现方法
玩家身份是许多移动端游戏的核心部分,在保护玩家隐私上也越来越重要。Unity想为玩家提供无缝的游戏体验,为开发者提供更多灵活性,不论使用的是机构内的系统还是第三方登录服务。秉持着这个理念,我们想借此机会与大家分享将在今年推出的User Authentication(用户认证)方案。

开始使用

我们创建了新的资源商店包,帮助你使用新的“使用苹果账号登录”功能,满足iOS 13 API的新要求。
你将需要使用Xcode 11,它能运行在macOS 10.14(Mojave)、10.15(Catalina)或安装了iOS13.0的设备上,请在这里下载Xcode和iOS13。同时建议你阅读这份“使用苹果账号登录”功能入门指南,该指南包含了苹果人机交互界面指南和App Store审核指南。你还需要在苹果开发者入口为应用激活“使用苹果账号登录”功能。
你可以在Unity资源商店下载新的资源包。

若要使用该资源包,你需要:
1. 将包导入现有Unity项目中。
2. 创建一个回调函数脚本,从苹果接收登录数据。请查看示例脚本“SignInWithApple.cs”是如何使用API的。
3. 重建Unity项目,打开Unity创建的相应Xcode项目。
4. 完成Xcode中的权限和框架依赖的设置。
a). 在项目设置中必须添加“使用苹果账号登录(Sign in with Apple)”功能。
b). 必须在项目中添加AuthenticatiionService框架。若想在更早版本的iOS上使用该功能,必须将其设置为Optional(可选)。
下方为上述步骤的演示动图。
注意:Unity 2019.2或更低版本创建的Xcode项目不会带有UnityFramework的目标文件夹。AuthenticationServices框架应该加到Unity-iPhone的目标文件夹下。
5. 当项目设置完成后,我们就可以提取回调的数据,在现有项目代码库中使用它。

服务器端验证

对于那些需要服务器端验证的游戏和应用,你也可以将identityToken传到服务器上进行验证。
苹果的identityToken是一种无法由客户端生成的JSON Web Token (JWT)。若要验证苹果发布的JWT token,并在应用中使用,你必须确保:
1. 应用标准JWT验证:
a). 验证token的格式是否正确。
b). 验证token的签名是否有效。
c). 验证issuer(iss)为:https://appleid.apple.com
d). 验证token仍在有效期内。
A. 确保exp claims(有效期命令)要晚于现在的时间。
2. 确保JWT token的适用对象是你的应用。
a). 从“使用苹果账号登录”收到的token适用对象应为对应的iOS应用ID。服务器端需要检验该token,确保其与应用相对应。

苹果JWT的有效有效载荷声明如下:
大多数的编程语言中都有可用的JWT库,来帮助我们分析验证token。
如果你使用的是javascript,下边有一个验证token的例子。脚本将从stdin缓存中读取token,然后进行验证。请将“your.app.id”字段改为你的苹果应用ID。
const jwt = require('jsonwebtoken') const jwksClient = require('jwks-rsa'); fs = require('fs'); var token = fs.readFileSync('/dev/stdin').toString().trim(); console.log(token); var client = jwksClient({ jwksUri: 'https://appleid.apple.com/auth/keys' }); function getApplePublicKey(header, callback) { client.getSigningKey(header.kid, function (err, key) { var signingKey = key.publicKey || key.rsaPublicKey; callback(null, signingKey); }); } jwt.verify(token, getApplePublicKey, null, function (err, decoded) { if (err) { console.error(err); process.exit(1); } if (decoded.iss !== "https://appleid.apple.com") { console.error("unexpected issuer (iss claim): ", decoded.iss); process.exit(1); } if (decoded.aud !== "your.app.id") { console.error("unexpected audience (aud claim): ", decoded.aud); process.exit(1); } console.log("Validated Apple token: ", decoded); });

未来展望

将来的用户授权方案将包含Unity托管的身份认证和授权API,独立于后端的Unity登录与关键授权工作流的安装包,可满足顾客特殊要求(如“使用苹果账号登录”的要求)的即用预制件。
我们首次发布的User Authentication(用户认证)服务将支持用邮件ID和密码登录,同时将“使用苹果账号登陆”(包括安卓系统)纳入身份提供商中。此外,该方案具有一定可拓展性,用户可将其它自定义或第三方身份提供商的登录选项整合到其中。User Authentication功能让你在Unity编辑器中用常见、简单的API,在多个平台上配置身份提供商的身份文件。此种方法能缩短开发时间,让用户有更多的认证选择。随着消费者们对隐私问题日益重视,多种认证方法的需求会日益增长。
User Authentication的α版将在今年晚些时候发布,请在这里申请早期版本的使用机会。

开发过程中遇到问题?在这里提问:connect.unity.com/g/discussion
觉得这篇博客内容不错or有待提高?请在下方评论区留言。我们会根据大家的需求,优化内容产出^_^
Tags:
Unity China
672
Comments
wk
21 days ago
行走的头条
挺不错的,受益匪浅
1