Developer Chat Apache 2.0 License Swift Web Support


介绍

digi.me 私有共享平台使开发者能够以完全尊重用户隐私并符合 GDPR 的方式,利用来自数千个来源的用户数据。 我们的同意驱动解决方案允许精确定义数据条款,为用户提供授予同意的透明选择。

digi.me SDK 结构

digi.me SDK 分为三个主要组件,以提供模块化集成和灵活性

DigiMeSDK

这是主要的 SDK 模块。 它封装了与 digi.me 平台交互所需的核心功能。 它专为直接集成到您的项目中而设计。

前往 DigiMeSDK 文档

DigiMeCore

DigiMeCore 定义了 SDK 中使用的所有类和基本定义。 它是 DigiMeSDK 构建的基础层。 作为关键依赖模块,将DigiMeSDK集成到您的项目中时,会自动包含DigiMeCore

虽然 DigiMeCore 作为 DigiMeSDK 的一部分自动包含,但您可能需要直接访问其对象定义和类。 在这种情况下,您可以在 Swift 类中显式导入 DigiMeCore 以利用其组件。

前往 DigiMeCore 文档

DigiMeHealthKit

此模块提供特定于 Apple HealthKit 的功能。 它是主 SDK 的可选附加组件,适用于需要访问 Apple Health 数据的应用程序。

前往 DigiMeHealthKit 文档

要求

部署

安装

Swift 包管理器

添加依赖项

  1. DigiMeSDK 包添加到应用程序的 Package.swift 或 Xcode 项目中的依赖项。 将 "x.x.x" 替换为最新的 DigiMeSDK 版本

    .package(name: "DigiMeSDK", url: "https://github.com/digime/digime-sdk-ios.git", from: "x.x.x")
  2. DigiMeSDK 添加到目标的依赖项

    .target(name: "example", dependencies: ["DigiMeSDK"]),

导入包

import DigiMeSDK

使用 Apple Health 功能

如果您的应用程序需要访问 Apple Health 数据,您还需要包含 DigiMeHealthKit 模块。

  1. 将 DigiMeHealthKit 添加到您的 Package.swift 文件
.package(name: "DigiMeHealthKit", url: "https://github.com/digime/digime-healthkit-ios.git", from: "x.x.x")
  1. 在目标的依赖项中包含 DigiMeHealthKit
.target(name: "YourTargetName", dependencies: ["DigiMeSDK", "DigiMeHealthKit"]),

导入 HealthKit 包

使用 Apple Health 功能时,在您的 Swift 文件中导入 DigiMeHealthKit 以访问 DigiMeHealthKit 相关的对象定义

import DigiMeHealthKit

Cocoapods

  1. 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! 标志

  1. 导航到您的 Podfile 目录并运行以下命令

    $ pod install --repo-update

入门 - 5 个简单步骤!

我们采用了 digi.me 私有共享 SDK 的最常见用例,并编译了一个快速入门指南,您可以在下面找到它。 尽管如此,我们恳请您 进一步探索文档

此示例将向您展示如何配置 SDK,并让您开始检索用户数据

1. 获取您的合约 ID、应用程序 ID 和私钥

要访问 digi.me 平台,您需要获取应用程序的 AppID。 您可以通过填写注册表 在此处 获取您的 AppID。

在生产环境中,您还需要从 digi.me 支持部门获得您自己的 Contract IDPrivate Key。 但是,对于沙盒目的,您可以使用示例项目中的合约之一(请参阅 /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

3. 配置 DigiMe 对象

DigiMe 是您主要用于与 SDK 交互的对象。 它使用 Configuration 对象实例化。

Configuration 对象使用您的 App IDContract IDPrivate 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 {
    ...
}

4. 请求同意

在您可以访问用户的数据之前,您必须获得他们的同意。 这是通过在您的客户端对象上调用 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.
    }
}

如果用户授予同意,则会在后台创建一个会话; 这供后续调用用于获取数据。 如果用户拒绝同意,则会返回一个说明此情况的错误。 请参阅 处理错误

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 属性以及 mimeType 属性。 对于具有 JSON 或图像 mime 类型的文件,有一些方便的方法可以将该原始数据解码为适当的格式,以便您可以轻松提取为您的应用程序提供支持所需的值。 此外,还提供描述文件的 metadata。 在此示例中,由于数据来自外部服务,因此元数据将是 mapped 类型,描述文件的内容以及相关服务的详细信息。

请注意,如果您希望自己管理此过程,我们还会公开其他方法。

贡献

digi.me 以根据 Apache 2.0 许可证完全开源地提供我们的 SDK 而自豪; 我们欢迎所有开发人员的贡献。

我们要求在贡献时,请确保您的更改符合我们的 贡献指南,然后再提交拉取请求。

进一步阅读

快速入门 下讨论的主题只是 digi.me 私有共享赋予像您这样的数据消费者的一小部分力量。 我们强烈建议您浏览 文档 以获取更深入的示例和指南,以及故障排除建议和所提供的大量功能的展示。

此外,在 examples 文件夹中还有许多基于 digi.me 构建的示例应用程序。 随意查看这些内容,以了解私有共享的力量。

支持和文档

有关 DigiMeSDK 及其功能的更详细信息,请参阅 官方文档

如果您遇到任何问题或有任何疑问,请通过 support@digi.me 与我们联系。