Stytch 0.17.0

Stytch 0.17.0

Stytch iOS 开发者 维护。



Stytch 0.17.0

  • 作者:
  • Dan Loman

Stytch iOS SDK Stytch iOS SDK

Test Status Platforms Swift Package Manager Carthage Compatible CocoaPods Compatible

入门指南

什么是 Stytch?

Stytch 是一个认证平台,由开发者编写,专为开发者设计,重点关注通过无密码认证技术提升安全和用户体验。Stytch 提供了直接的 API 集成、特定语言的库和 SDK(如本示例),以尽可能简化为您的应用程序设置认证流程的过程。

为什么我应该使用 Stytch SDK?

Stytch 的 SDK 使得无缝注册、验证和参与用户变得简单。iOS SDK 为您在 Apple 平台上使用 Stytch 提供了最简单的方式。只需几行代码,您就可以轻松验证您的用户,并专注于产品核心。

import StytchCore

// Initiate login/signup
_ = try await StytchClient.magicLinks.email.loginOrCreate(parameters: .init(email: userEmail))

// Later, handle the subsequent deeplink
_ = try await StytchClient.handle(url: deeplinkUrl)

我可以用Stytch SDK做什么?

SDK当前支持多种身份验证产品,未来还将推出更多功能!目前支持的产品列表如下。

消费者应用

  • 魔法链接
    • 通过电子邮件发送/验证魔法链接
  • 生物识别
    • 通过FaceID/TouchID进行验证
  • OTP
    • 通过短信、WhatsApp、电子邮件发送/验证一次性密码
  • OAuth
    • 通过与外部身份提供者(如Apple、Google、Facebook、GitHub等)进行验证
  • 密码
    • 创建或验证用户
    • 检查密码强度
    • 重置密码
  • TOTP
    • 创建一个新的基于时间的一次性密码(TOTP)密钥,用于在验证器应用程序中存储
    • 验证TOTP
    • 获取用户的恢复代码
    • 验证恢复代码
  • 会话
    • 验证/刷新现有会话
    • 撤销会话(注销)
  • 用户管理
    • 获取或检索当前用户对象(同步/缓存或异步选项可用)
    • 根据ID从当前用户中删除因素

B2B应用

  • 魔法链接
    • 通过电子邮件发送/验证魔法链接
    • 通过电子邮件发送/验证发现魔法链接
  • 密码
    • 验证成员
    • 检查密码强度
    • 重置密码
  • 发现
    • 发现成员现有的组织
    • 创建一个新的组织
    • 交换会话以使用不同的组织
  • SSO
    • 开始/验证SSO身份验证流程
  • 会话
    • 验证/刷新现有会话
    • 撤销会话(注销)
  • 成员
    • 获取或检索当前成员对象(同步/缓存或异步选项可用)
  • 组织
    • 获取或检索当前成员的组织

异步选项

SDK 提供了几种处理异步代码的机制,因此您可以选择最适合您需求的选项。

  • Async/Await
  • 组合
  • 回调函数

如何开始使用 Stytch?

如果您对 Stytch 完全陌生,使用 SDK 之前,您需要先访问 Stytch 的主页,注册,并在 仪表板 中创建一个新项目。然后您需要调整您的 SDK 配置——将您应用的 bundle id 添加到 授权环境 中,并启用您希望使用的任何 身份验证方法

要查看 Stytch SDK 的基本、中级和高级使用的深入示例,请参阅我们的 Stytch 教程

要求

Stytch iOS SDK 与以下 Apple 平台的应用兼容

  • iOS 13+
  • macOS 10.15+
  • tvOS 13+

安装

Swift Package Manager

Swift Package Manager 是一个管理 Swift 代码分发的工具。它与 Swift 构建系统集成,以自动化下载、编译和链接依赖项的过程。

  1. 打开 Xcode
  2. 文件 > 添加包
  3. 输入 https://github.com/stytchauth/stytch-ios
  4. 选择包要求(到下一个次要版本,到下一个主要版本等)

Carthage

Carthage 是 Cocoa 的分布式依赖项管理器。要将 Stytch iOS SDK 集成到您的 Xcode 项目中,请将以下内容添加到您的 Cartfile 中。

binary "https://public-assets-stytch-com.s3.amazonaws.com/sdks/swift/carthage/StytchCore.json"

CocoaPods

CocoaPods 是 Swift 和 Objective-C Cocoa 项目的集中式依赖项管理器。要将 Stytch iOS SDK 集成到您的 Xcode 项目中,请将以下内容添加到您的 Podfile 中。

pod 'Stytch/StytchCore'

与其他依赖项管理器不同,在 CocoaPods 中,您将导入 Stytch 而非 StytchCore

使用方式

配置

要开始使用 Stytch 客户端(StytchClient 或 StytchB2BClient),您必须通过以下两种技术之一进行配置:1) 自动,通过在主应用包中包含一个 StytchConfiguration.plist 文件(示例)或 2) 在应用程序启动时编程(见下文 .task {}。)

相关域名

如果您正在使用重定向认证产品(电子邮件魔法链接/OAuth),您需要在 您的网站 和应用程序的权限中设置相关域名(示例)。

Entitlements screenshot Entitlements screenshot

手动配置/深链接处理

此示例显示了一个假设的 SwiftUI 应用文件,其中包含自定义配置(见 .task {}),以及深链接/通用链接处理。

@main
struct YourApp: App {
    private let stytchPublicToken = "your-public-token" // Perhaps fetched from your backend

    @State private var session: Session?

    var body: some Scene {
        WindowGroup {
            ContentView(session: session) 
                .task {
                    StytchClient.configure(publicToken: stytchPublicToken)
                }
                // Handle web-browsing/universal deeplinks
                .onContinueUserActivity(NSUserActivityTypeBrowsingWeb) { userActivity in
                    guard let url = userActivity.webpageURL else { return }
                    handle(url: url)
                }
                // Handle deeplinks
                .onOpenURL(perform: handle(url:))
        }
    }

    private func handle(url: URL) {
        Task {
            do {
                switch try await StytchClient.handle(url: url) {
                case let .handled(response):
                    self.session = response.session
                case .notHandled:
                    // Handle via alternative means
                }
            } catch { ... }
        }
    }
}

认证

如在 我可以使用 Stytch SDK 做什么? 中看到,有多种不同的认证产品可供使用。在此,我们将展示使用 OTP 产品的一个简单示例。

一次性密码

本例展示了您可以用于在应用中管理短信认证的可假想类,底层大部分工作委托给StytchClient。

import StytchCore

final class SMSAuthenticationController {
    private let onAuthenticate: (Session, User) -> Void
    private var methodId: String?

    // phoneNumber must be a valid phone number in E.164 format (e.g. +1XXXXXXXXXX)
    func login(phoneNumber: String) async throws {
        let response = try await StytchClient.otps.loginOrCreate(
            parameters: .init(deliveryMethod: .sms(phoneNumber: phoneNumber))
        )
        // Store the methodId for the subsequent `authenticate(code:)` call
        methodId = response.methodId
    }

    func authenticate(code: String) async throws {
        guard let methodId = methodId else { throw YourCustomError }
        
        let response = try await StytchClient.otps.authenticate(
            parameters: .init(code: code, methodId: methodId)
        )

        onAuthenticate(response.session, response.user)
    }
}

文档

完整的参考文档可在此处找到。

FAQ

  1. SDK与API有何不同?
    1. SDK基本上直接反映了API — 虽然它对与这些方法的交互提供了一种更为明确的看法;为您管理本地状态并引入了一些默认设置(可在相应的初始化/函数参考文档中查看)。使用SDK的主要好处是您可以直接从客户端与Stytch交互,而无需通过您的后端中继调用。
  2. SDK有哪些默认行为?
    1. 这里有几点:1) 会话令牌/JWT将存储在/从系统密钥链中检索,因此可以安全地跨应用启动持久保存。2) 会话和用户对象由SDK缓存在内存中,但这些必须首先通过成功的authenticate调用接收。3) 在成功进行身份验证调用后,SDK将开始后台轮询以刷新会话及其对应的JWT,以确保JWT始终有效(JWT每5分钟过期,无论会话是否过期。)
  3. 是否有可用指南或示例应用程序来查看此在使用中的样子?
    1. 是的!这里有可用的UIKit示例消费者应用程序在此。还有一个SwiftUI macOS/iOS 消费者应用程序和包括在此存储库中的UIKit iOS B2B应用程序

有疑问吗?

请随时通过[email protected]与我们联系,在我们的Slack论坛中。

许可证

Stytch iOS SDK遵循MIT许可证发布。有关详细信息,请参阅LICENSE