digi.me 私有共享平台使开发者能够以完全尊重用户隐私并符合 GDPR 的方式,利用来自数千个来源的用户数据。 我们的同意驱动解决方案允许精确定义数据条款,为用户提供授予同意的透明选择。
digi.me SDK 分为三个主要组件,以提供模块化集成和灵活性
DigiMeSDK: 主要 SDK 模块,提供用于集成的核心功能和接口。
DigiMeCore: 包含 SDK 中使用的所有类定义和基础元素。
DigiMeHealthKit: 一个独立的模块,扩展了 SDK 以用于消费或使用 Apple Health 数据的应用程序。 只有当您的应用程序打算访问 Apple Health 数据时,才应包含此模块。
这是主要的 SDK 模块。 它封装了与 digi.me 平台交互所需的核心功能。 它专为直接集成到您的项目中而设计。
DigiMeCore 定义了 SDK 中使用的所有类和基本定义。 它是 DigiMeSDK 构建的基础层。 作为关键依赖模块,将DigiMeSDK
集成到您的项目中时,会自动包含DigiMeCore
。
虽然 DigiMeCore
作为 DigiMeSDK
的一部分自动包含,但您可能需要直接访问其对象定义和类。 在这种情况下,您可以在 Swift 类中显式导入 DigiMeCore
以利用其组件。
此模块提供特定于 Apple HealthKit 的功能。 它是主 SDK 的可选附加组件,适用于需要访问 Apple Health 数据的应用程序。
将 DigiMeSDK
包添加到应用程序的 Package.swift
或 Xcode 项目中的依赖项。 将 "x.x.x"
替换为最新的 DigiMeSDK
版本。
.package(name: "DigiMeSDK", url: "https://github.com/digime/digime-sdk-ios.git", from: "x.x.x")
将 DigiMeSDK
添加到目标的依赖项
.target(name: "example", dependencies: ["DigiMeSDK"]),
import DigiMeSDK
如果您的应用程序需要访问 Apple Health 数据,您还需要包含 DigiMeHealthKit 模块。
.package(name: "DigiMeHealthKit", url: "https://github.com/digime/digime-healthkit-ios.git", from: "x.x.x")
.target(name: "YourTargetName", dependencies: ["DigiMeSDK", "DigiMeHealthKit"]),
使用 Apple Health 功能时,在您的 Swift 文件中导入 DigiMeHealthKit 以访问 DigiMeHealthKit 相关的对象定义
import DigiMeHealthKit
将 DigiMeSDK
添加到您的 Podfile
use_frameworks!
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '13.0'
target 'TargetName' do
pod 'DigiMeSDK'
pod 'DigiMeHealthKit' # If your application requires access to Apple Health data, you will also need to include the DigiMeHealthKit module.
end
注意:我们目前不支持将 DigiMeSDK 作为静态库链接。
必须在 Podfile 中设置 use_frameworks! 标志
导航到您的 Podfile
目录并运行以下命令
$ pod install --repo-update
我们采用了 digi.me 私有共享 SDK 的最常见用例,并编译了一个快速入门指南,您可以在下面找到它。 尽管如此,我们恳请您 进一步探索文档。
此示例将向您展示如何配置 SDK,并让您开始检索用户数据。
要访问 digi.me 平台,您需要获取应用程序的 AppID
。 您可以通过填写注册表 在此处 获取您的 AppID。
在生产环境中,您还需要从 digi.me 支持部门获得您自己的 Contract ID
和 Private Key
。 但是,对于沙盒目的,您可以使用示例项目中的合约之一(请参阅 /Examples
目录)。
由于 digi.me 私有共享 SDK 挂接到您的浏览器以接收回调,因此您需要将 openURL
事件转发到 SDK,以便它可以处理响应。 在您的应用程序的委托中(通常是 SceneDelegate
),重写 scene:openURLContexts:
方法,如下所示
func scene(_ scene: UIScene, openURLContexts URLContexts: Set<UIOpenURLContext>) {
guard let context = URLContexts.first else {
return
}
CallbackService.shared().handleCallback(url: context.url)
}
并注册自定义 URL 方案,以便您的应用可以从 Digi.me 应用接收回调。 仍然在 Info.plist
中添加
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>Consent Access</string>
<key>CFBundleURLSchemes</key>
<array>
<string>digime-ca-YOUR_APP_ID</string>
</array>
</dict>
</array>
其中 YOUR_APP_ID
应替换为您的 AppID
。
DigiMe
是您主要用于与 SDK 交互的对象。 它使用 Configuration
对象实例化。
Configuration
对象使用您的 App ID
、Contract ID
和 Private Key
实例化。 下面的代码片段向您展示了如何组合所有这些以获得配置的 DigiMe
对象
let privateKey = """
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEA...
-----END RSA PRIVATE KEY-----
"""
do {
let configuration = try Configuration(appId: "YOUR_APP_ID", contractId: "YOUR_CONTRACT_ID", privateKey: privateKey)
let digiMe = DigiMe(configuration: configuration)
}
catch {
...
}
在您可以访问用户的数据之前,您必须获得他们的同意。 这是通过在您的客户端对象上调用 authorize
来实现的。 您需要为您要请求访问的服务提供服务标识符;可以通过参考开发者文档中的服务定义或使用 Discovery API 找到此标识符。
digiMe.authorize(serviceId: service?.identifier, readOptions: nil) { result in
switch result {
case .success(let credentials):
// store credentials and continue on to fetch data.
case.failure(let error):
// handle failure.
}
}
如果用户授予同意,则会在后台创建一个会话; 这供后续调用用于获取数据。 如果用户拒绝同意,则会返回一个说明此情况的错误。 请参阅 处理错误。
获得会话后,您可以请求数据。 我们努力使其尽可能简单,因此公开了一个用于执行此操作的单一方法
let credentials = my_stored_credentials
digiMe.readAllFiles(credentials: credentials, readOptions: nil) { result in
switch result {
case .success(let file):
// Access data or metadata of file.
case .failure(let error):
// Handle Error
}
} completion: { result in
switch result {
case .success(let (fileList, refreshedCredentials)):
// Handle success and update stored credentials as these may have been refreshed.
case .failure(let error):
// Handle failure.
}
}
对于每个文件,将调用第一个“文件处理程序”块。 如果下载成功,您将收到一个 File
对象。 如果下载失败,则会收到一个错误。
下载完所有文件后,将调用第二个块以通知您此情况。 如果数据流中断,或者上面获得的会话无效(例如,它可能已过期),您将在第二个块中收到一个错误。 请参阅 处理错误。
File
公开了包含文件原始数据的 data
属性以及 mimeType
属性。 对于具有 JSON 或图像 mime 类型的文件,有一些方便的方法可以将该原始数据解码为适当的格式,以便您可以轻松提取为您的应用程序提供支持所需的值。 此外,还提供描述文件的 metadata
。 在此示例中,由于数据来自外部服务,因此元数据将是 mapped
类型,描述文件的内容以及相关服务的详细信息。
请注意,如果您希望自己管理此过程,我们还会公开其他方法。
digi.me 以根据 Apache 2.0 许可证完全开源地提供我们的 SDK 而自豪; 我们欢迎所有开发人员的贡献。
我们要求在贡献时,请确保您的更改符合我们的 贡献指南,然后再提交拉取请求。
在 快速入门 下讨论的主题只是 digi.me 私有共享赋予像您这样的数据消费者的一小部分力量。 我们强烈建议您浏览 文档 以获取更深入的示例和指南,以及故障排除建议和所提供的大量功能的展示。
此外,在 examples 文件夹中还有许多基于 digi.me 构建的示例应用程序。 随意查看这些内容,以了解私有共享的力量。
有关 DigiMeSDK 及其功能的更详细信息,请参阅 官方文档。
如果您遇到任何问题或有任何疑问,请通过 support@digi.me 与我们联系。