这是 SnapAuth 的官方 Swift SDK。
SnapAuth 能让你迅速为原生 App 添加通行密钥支持!在保持优秀、流畅的用户体验的同时,添加强大的多因素身份验证,或者完全实现无密码登录。
SnapAuth 首页 | SnapAuth 文档 | 控制面板 | Github
此 SDK 支持所有主要的支持通行密钥和硬件验证器的 Apple 平台。
平台 | 通行密钥 | 硬件密钥 | 备注 |
---|---|---|---|
iOS | ✅ 15.0+ | ✅ 15.0+ | |
iPadOS | ✅ 15.0+ | ✅ 15.0+ | |
macOS | ✅ 12.0+ | ✅ 12.0+ | |
macOS (Catalyst) |
|
|
仍在测试中(应该可以工作) |
visionOS | ✅ 1.0+ | ❌ | visionOS 不支持硬件密钥 |
tvOS |
|
❌ | 仍在测试中,tvOS 不支持硬件密钥 |
Apple Watch 不支持通行密钥或硬件密钥,因此本 SDK 不支持 watchOS。如果在未来的 watchOS 版本中添加了支持,我们也会进行相应适配!
如果您尚未注册 SnapAuth,您需要先注册:https://www.snapauth.app/register
与 Web 集成不同,即使是 localhost
也仍然需要 https
(Web 集成允许 https://
)。根据您的开发设置,您可能需要立即添加测试或暂存服务器环境。
提示
如果您需要帮助,请随时给我们发送电子邮件!
警告
这不是 SnapAuth 特有的,但必须完成,否则 API 会立即返回错误。
请参阅关联域名设置指南,配置您的 App 以支持通行密钥。
XCode > 文件 > 添加 Package Dependencies...
在添加包对话框中,搜索我们的 SDK
https://github.com/snapauthapp/sdk-swift
选择一个 Dependency Rule 并将其添加到您的开发目标。我们推荐 "Dependency Rule: Up to Next Major Version"。
我们所有的 SDK 都遵循语义版本控制,因此这应该始终是一个安全的选择。
在任何需要与 SnapAuth 集成的文件中,请务必导入它
import SnapAuth
从 SnapAuth 控制面板获取您的 publishable key
;您将在下面使用它。
这通常在按钮的 action 中完成。这是一个 SwiftUI 中非常简单的登录视图
import SnapAuth
import SwiftUI
struct SignInView: View {
let snapAuth = SnapAuth(publishableKey: "pubkey_yourkey") // Set this value!
@State var userName: String = ""
var body: some View {
VStack {
TextField("Username", text: $userName)
Button("Sign In", systemImage: "person.badge.key") {
signIn()
}
}
}
func signIn() {
Task {
let result = await snapAuth.startAuth(.username(userName))
switch result {
case .success(let auth):
// Send auth.token to your backend to sign in the user
case .failure(let error):
// Decide how to proceed
}
}
}
}
注意
自动填充目前仅在 iOS/iPadOS >= 16 和 visionOS 上受支持。在其他平台或 OS 版本上,这将立即返回一个失败代码,表明缺少平台支持。
要使系统在用户名字段获得焦点时建议通行密钥,请进行以下添加以启动该过程并处理结果
.textContentType(.username)
添加到用户名 TextField
,如果尚未设置TextField("Username", text: $userName)
.textContentType(.username) // <-- Add this
// ...
var body: some View {
VStack {
// ...
}
.onAppear(perform: autofill) // <-- Add this
}
// And this
func autofill() {
Task {
let autofillResult = await snapAuth.handleAutofill()
guard case .success(let auth) = autofillResult else {
// Autofill failed, this is common and generally safe to ignore
return
}
// Send auth.token to your backend to sign in the user, as above
}
}
在我们的测试中,tvOS 中的登录对话框没有打开,至少在模拟器中是这样。
即使使用 Apple 记录的配置,AutoFill API 也无法可靠地提供通行密钥建议。SwiftUI 和 UIKit 内部似乎存在显示问题,导致建议栏无法一致地呈现。我们已向 Apple 提交反馈,但这超出了我们的控制范围。
BSD-3-Clause