SmartlookConsentSDK for iOS
在应用程序中收集分析数据或处理用户个人数据时,获取明确用户同意是建立用户信任和无缝用户体验的重要组成部分。
这也是 App Store 指南(2.5.14 和 5.1.2)中规定的应用程序开发者的义务,必须遵守才能获得您的应用程序的分发批准。
根据指南,如果应用程序使用第三方工具进行分析,则无需第三方工具供应商,自行验证分析工具不会在没有用户明确同意的情况下记录应用程序中的事件。
虽然实现一个简单的对话框来获取用户同意并将其存储以供以后参考看似是一个简单的过程——深入研究之后发现(就像通常的“简单任务”一样)许多编程和设计细节都应该被遵守。
由于实现同意超出了应用程序的核心功能和预期的设计,因此很可能会带来更多的不便,影响时间并干扰现有的开发流程。因此,为什么不使用或重用一些现成的 SDK 呢?
SmartlookConsentSDK
- 提供了一个可配置的控制面板,用户可以选择他们的隐私选项
- 存储应用程序中选择的用户首选项
- 使所有文本完全本地化
- 允许链接到由外部网页提供的隐私政策,并在不离开应用程序的情况下呈现
SmartlookConsentSDK 与 Swift 和 Objective-C 应用程序都很好地配合工作。
代码示例
简单示例
使用默认设置的最直接用途
SmartlookConsentSDK.check() {
if SmartlookConsentSDK.consentState(for: .analytics) == .provided {
// Start analytics tools
}
}
该方法首先检查用户是否已提供/拒绝了对"隐私"和"分析"的同意。如果没有,则显示内置默认值的隐私控制面板(对两者都提供同意)。当用户同意后,回调被调用以让您处理用户偏好。
如果用户之前已经通过这些设置,则不会显示控制面板,而是直接调用回调。
复杂示例
在此示例中,仅请求默认提供的分析同意。
var consentsSettingsDefaults = SmartlookConsentSDK.ConsentsSettings()
// consentsSettingsDefaults.append((.privacy, .notProvided))
consentsSettingsDefaults.append((.analytics, .provided))
SmartlookConsentSDK.check(with: consentsSettingsDefaults) {
if SmartlookConsentSDK.consentState(for: .analytics) == .provided {
// Start analytics tools
}
}
安装
Swift包管理器
使用Swift包管理器集成应用程序完全受支持。
直接框架嵌入
框架已准备好直接嵌入到您的应用中,例如此处演示应用中嵌入的方式。详细描述请参见此苹果开发者门户文档 在应用中嵌入框架
Cocoapods(已弃用)
将 cocoapod SmartlookConsentSDK
添加到您的 Podfile。
将 SmartlookConsentSDK 添加到应用代码
通常,您希望在应用生命周期非常早期的 SmartlookConsentSDK.check()
被调用。具体在哪里调用取决于您的应用架构。如果您不希望将此 SDK 集成到标准的应用设置中,那么根视图控制器的 viewDidLoad()
就足够了。如果您希望有更全面的解决方案,请参考我们的演示应用 AppDelegate
和 ViewController
以获取灵感。
Objective-C
SDK 完全兼容 Objective-C
。请参见相应的演示应用以获取代码示例。
API
同意
同意由一个字符串常数标识。为了方便,SDK 提供了一个 String
别名,其中预定义了两个常数,.privacy
和 .analytics
,以及演示应用 Localizable.strings
中的相应文本占位符。然而,任何字符串都可以,而 Localizable.strings
中使用的命名约定是很明显的。
ConsentState
是一个标准枚举,表示用户是否查看并提供了对某项政策的同意。
- 状态
.unknown
表示用户未查看政策。 - 状态
.notProvided
表示用户明确拒绝同意该政策。 - 状态
.provided
表示用户明确同意该政策。
@objc(SLCConsentState) public enum ConsentState: Int {
case unknown = -2
case notProvided = -1
case provided = 1
}
SmartlookConsentSDK.check()
是该SDK的核心方法。它有两大版本
@objc public static func check(callback: @escaping RequestIdCallback)
一个不带同意配置的版本,可以用于当需要同时请求 .privacy
和 .analytics
政策的默认值为 .provided
时。
public static func check(with consentsSettings: ConsentsSettings, callback: @escaping RequestIdCallback)
带有配置的版本,允许调整所需同意的配置(添加、删除、更改顺序或它们的默认值)
SmartlookConsentSDK.show()
与 check()
类似,它始终为用户提供一个查看当前隐私设置的控制面板。
内容触控通知
无论同意是否更改,当用户关闭由 check()
或 show()
调用打开的面板时,都会广播 SmartlookConsentSDK.consentsTouchedNotification
通知。这提供了另一种方式,通过 callback
块让应用程序知道可能发生了同意变更。
在ObjC中,通知标识符为 SLCConsentsTouchedNotification
。
本地化
控制面板中显示的文本通过标准的 Localizable.strings
机制进行配置。Localizable.strings
还用于提供一个详细政策信息的可选URL(因此链接也是本地化的)。
在以下表中列出了 Localizable.strings
中使用的键,或者您可以简单地重用我们演示应用程序中的该文件。
本地化遵循命名约定。如果添加新的同意类型(在预定义的方便类型.privacy
和.analytics
之上),则必须按照以下模式将相应的键添加到本地化文件中:
"smartlook-consent-sdk-*consent-key*-consent" = "My special consent...";
"smartlook-consent-sdk-*consent-key*-consent-url" = "https://www.my-company.com/consent-policy-details?lang=de"; //optional
其中,*consent-key*
是用于标识政策的简单文本字符串常量。
iOS 设置
Consents SDK 可以轻松集成到iOS设置应用程序中,以便用户也可以在那里查看他们的同意项。即使使用Cocoapods集成SDK,也需要进行一些手动工作。如果您不熟悉将系统设置面板添加到您的应用程序中,请查阅实现iOS设置包,或者只需将一个演示应用程序中的 Settings.bundle
复制到开始处。
SDK 集成的关键是使用与您用于本地化字符串相同的设置项目名称,即,为了将最基本同意设置添加到iOS设置
- 如果没有,添加
Settings.bundle
- 在它里面,为每个同意添加一个
Toggle Switch
。 - 要将它与同意关联,将切换标识符设置为在
Localizable.strings
中使用的相同字符串,例如smartlook-consent-sdk-analytics-consent
- 别忘了,
Settings.bundle
本地化是与应用程序本地化分开的(相应的.strings
文件在Settings.bundle
内部,在演示应用程序中它被命名为Root.strings
)