介绍
digime.me 私有共享平台赋予开发者利用来自成千上万个来源的用户数据的方式,完全尊重用户隐私,并符合 GDPR 规定。我们基于同意的解决方案允许您定义您希望使用的数据条款,并让用户完全透明地了解这些条款,使他们能够做出明智的选择,决定是否授予同意。
要求
部署
- iOS 13+
安装
Swift Package Manager
添加依赖
-
将
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
CocoaPods
-
将
DigiMeSDK
添加到您的Podfile
中use_frameworks! source 'https://github.com/CocoaPods/Specs.git' platform :ios, '13.0' target 'TargetName' do pod 'DigiMeSDK' end
注意:我们目前不支持将 DigiMeSDK 链接为静态库。
use_frameworks! 标志必须在 Podfile 中设置
-
转到您的
Podfile
目录,并运行以下命令$ pod install --repo-update
入门教程 - 5 个简单步骤!
我们针对 digi.me 私有共享 SDK 的最常见用例,制作了一份快速入门指南,您可以在下面找到。不过,我们还是建议您 进一步查阅文档。
以下示例将展示如何配置 SDK,并指导您开始使用 检索用户数据。
1. 获取您的合约 ID、应用 ID 和私钥
要访问 digi.me 平台,您需要为您的应用程序获取一个 AppID
。您可以通过填写注册表单 此处 获取。
在生产环境中,您还需要从 digi.me 技术支持处获取您自己的 合约 ID
和 私钥
。但是,出于测试目的,您可以使用示例项目中的一份合约(请参阅 /Examples
目录)。
2. 配置回调转发
由于 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
对象
3. 配置 DigiMe
是您将主要用于与 SDK 交互的对象。它通过一个 Configuration
对象进行实例化。
使用您的 App ID
、Contract ID
和 私钥
实例化 Configuration
对象。下面的代码片段显示了如何将所有这些组合起来以获得配置后的 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 {
...
}
4. 请求同意
在您能够访问用户数据之前,您必须获得他们的同意。这是通过在您的客户端对象上调用 authorize
来实现的。您需要提供一个服务标识符,该标识符用于请求访问权限;这可以通过参考开发文档中的服务定义或使用 发现 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.
}
}
如果用户同意,则会在后台创建一个会话;这用于后续调用以获取数据。如果用户拒绝同意,会返回一个表示此意的错误。请参阅 错误处理。
5. 获取数据
一旦您有了会话,您就可以请求数据。我们努力使其尽可能简单,因此公开了单个方法来执行此操作
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
属性和包含 MIME 类型的 mimeType
属性。对于具有 JSON 或图像 MIME 类型的文件,存在便利的方法将原始数据解码为适当的格式,因此您可以轻松提取推动您应用程序所需的价值。此外,metadata
可用,用于描述文件。在本例中,由于数据来自外部服务,元数据将是一个 mapped
类型,描述文件内容和关联服务的详细信息。
请注意,如果您喜欢自己管理此过程,我们还公开了其他方法。
贡献
digi.me 乐于提供完全开源的 SDK,受 Apache 2.0 许可证 保护;我们欢迎所有开发者的贡献。
在提交拉取请求之前,请确保您的更改符合我们的 贡献指南。
进一步阅读
在《快速入门》部分中讨论的主题仅仅是 digi.me 私有共享为数据消费者(如您)提供的强大功能的一小部分。我们强烈建议您探索 文档 以获取更多深入示例和指南,以及故障排除建议和展示提供的众多功能。
此外,示例文件夹中还有许多在 digi.me 上构建的应用程序示例。您可以自由查看以了解私有共享的力量。