Torus-direct-swift-sdk
简介
此仓库允许 iOS 应用直接从 Torus 网络检索存储的密钥。Torus 网络的声明层是通用的,以下是使用 SDK 通过 Google 访问密钥的示例。您可以在此处阅读更多有关与 Torus 网络交互的信息 这里。
功能
- 所有 API 返回 Promise (mxcl/PromiseKit)。您可以从 "yannickl/AwaitKit" 导入以将 API 转换为 async/await 格式。
用法
1. 安装
Swift 包管理器
在项目设置中,将 Github URL 添加为 swift 包依赖项。
import PackageDescription
let package = Package(
name: "TorusSwiftDirectSDK",
dependencies: [
.package(name: "TorusSwiftDirectSDK", url: "https://github.com/torusresearch/torus-direct-swift-sdk", from: "1.0.0"))
]
)
CocoaPods
pod 'Torus-directSDK', '~> 1.0.0'
手动导入或其他包
如果您需要除 SPM 或 Cocoapods 以外的包管理器,请与我们联系 [email protected],或者您可以手动克隆存储库并在项目中将其作为框架导入。
2. 初始化
根据所需的登录方式初始化 SDK。以下示例展示了如何对一个单个 Google 登录进行初始化。 redirectURL
指的是登录流程重定向到您的应用的 URL,它应该有您的应用已在其他处注册的方案,例如 com.mycompany.myapp://redirect
。 browserRedirectURL
指的是浏览器在登录流程中应使用的页面,它应该有 http 或 https 方案。
import TorusSwiftDirectSDK
let sub = SubVerifierDetails(loginType: .installed, // default .web
loginProvider: .google,
clientId: "<your-client-id>",
verifierName: "<verifier-name>",
redirectURL: "<your-redirect-url>",
browserRedirectURL: "<your-browser-redirect-url>")
let tdsdk = TorusSwiftDirectSDK(aggregateVerifierType: "<type-of-verifier>," aggregateVerifierName: "<verifier-name>", subVerifierDetails: [sub], network: <etherum-network-to-use>)
// controller is used to present a SFSafariViewController.
tdsdk.triggerLogin(controller: <UIViewController>?, browserType: <method-of-opening-browser>, modalPresentationStyle: <style-of-modal>).done{ data in
print("private key rebuild", data)
}.catch{ err in
print(err)
}
登录依赖于验证器脚本/验证器。还有其他验证器,包括 single_id_verifier
、and_aggregate_verifier
、or_aggregate_verifier
和 single_logins
,根据您所需的登录方式可能需要使用它们之一。为了设置您应用程序的验证器脚本,请联系 [email protected],或详细了解验证器,请参阅 文档。
3. 处理 OAuth/认证 URL 重定向
您可以通过两种方式设置重定向;URL方案或通用链接。通常我们建议用户使用URL方案,因为通用链接需要额外的用户交互。《code>handle(url: URL) 类方法实现 NSNotification 以处理 URL 回调。
设置URL方案
在您的目标信息标签中,添加应用程序名称(例如:my-wallet-app)。在 OAuth 提供商设置页面中,将重定向 URL 添加到允许的重定向 URL 列表中。
- 对于 SwiftUI,不使用代理(iOS 14+)
.onOpenURL { url in
guard let url = URLContexts.first?.url else {
return
}
TorusSwiftDirectSDK.handle(url: url)
}
- 对于 SwiftUI,在 SceneDelegate 中实现以下内容
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let url = URLContexts.first?.url else {
return
}
TorusSwiftDirectSDK.handle(url: url)
}
- 对于 Storyboard,在 app AppDelegate 中实现以下内容
func application(_ app: UIApplication, open url: URL, options: [UIApplication.OpenURLOptionsKey : Any] = [:]) -> Bool {
if url.host == "my-wallet-app" {
TorusSwiftDirectSDK.handle(url: url)
}
return true
}
通用链接
通用链接允许用户智能地跟随链接到您的应用内的内容或您的网站。请参考实现文档。
- 对于 SwiftUI,
func scene(_ scene: UIScene, continue userActivity: NSUserActivity) {
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb, let urlToOpen = userActivity.webpageURL else {
return
}
TorusSwiftDirectSDK.handle(url: urlToOpen)
}
- 对于 Storyboard,
func application(_ application: UIApplication, continue userActivity: UIUserActivity, restorationHandler: @escaping ([UIUserActivityRestoring]?) -> Void) -> Bool
{
// Get URL components from the incoming user activity
guard userActivity.activityType == NSUserActivityTypeBrowsingWeb,
let incomingURL = userActivity.webpageURL,
let components = NSURLComponents(url: incomingURL, resolvingAgainstBaseURL: true) else {
return false
}
TorusSwiftDirectSDK.handle(url: incomingURL)
}
完成设置后,请联系[email protected]开始测试网络上验证器的配置。
要求
- Swift 5