Accurat iOS SDK
以下是可以将 Accurat SDK 集成到您的 iOS 应用说明。
内容
- 需求
- 兼容性
- 配置项目
- 将 SDK 添加到项目
- 将 SDK 集成到应用
- 提交到 App Store
- 联系
需求
- iOS 14.0+
- Xcode 12.0+
从 1.x.x 升级到 2.x.x
当从 1.x.x 升级到 2.x.x 版本时,您需要将导入语句从 import Accurat
更改为 import AccuratSDK
。其他一切应该和往常一样工作。
配置项目
在您的项目设置中,转到 能力 > 背景模式 并启用 后台获取。
然后,将适当的位置使用描述添加到您的应用程序的 Info.plist
中。当请求用户位置权限时会显示这些字符串。
对于 Xcode 14
<key>NSLocationAlwaysUsageDescription</key>
<string>This makes it possible to send you notifications with relevant info, even when you are not using the app.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>That way, we can personalize the content and ads in the app based on your preferences.</string>
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This makes it possible to send you notifications with relevant info, even when you are not using the app.</string>
为了支持多种语言,为每个要支持的语言,在 <language>.lproj
目录中创建一个 InfoPlist.strings
文件。
示例语言
en.lproj
NSLocationAlwaysUsageDescription = "This makes it possible to send you notifications with relevant info, even when you are not using the app.";
NSLocationWhenInUseUsageDescription = "That way, we can personalize the content and ads in the app based on your preferences.";
NSLocationAlwaysAndWhenInUseUsageDescription = "This makes it possible to send you notifications with relevant info, even when you are not using the app.";
nl.lproj
NSLocationAlwaysUsageDescription = "Zo is het mogelijk om u notificaties te versturen met gepersonaliseerde inhoud, ook wanneer u de app niet gebruikt.";
NSLocationWhenInUseUsageDescription = "Zo kunnen we in de app de inhoud en advertenties personaliseren op maat van jouw voorkeuren.";
NSLocationAlwaysAndWhenInUseUsageDescription = "Zo is het mogelijk om u notificaties te versturen met gepersonaliseerde inhoud, ook wanneer u de app niet gebruikt.";
fr.lproj
NSLocationAlwaysUsageDescription = "Il est donc possible de vous envoyer des notifications avec un contenu personnalisé, même lorsque vous n'utilisez pas l'application.";
NSLocationWhenInUseUsageDescription = "Comme ça, nous pouvons personnaliser le contenu et les publicités dans l'app en fonction de vos préférences.";
NSLocationAlwaysAndWhenInUseUsageDescription = "Il est donc possible de vous envoyer des notifications avec un contenu personnalisé, même lorsque vous n'utilisez pas l'application.";
手动将这些文件添加到项目包中。这可以通过在 Xcode 中右键单击项目名称并选择添加文件到 X 选项来实现,然后选择文件。
将 SDK 添加到项目中
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。您可以使用以下命令安装它
$ gem install cocoapods
要使用 CocoaPods 将 Accurat 集成到您的 Xcode 项目中,请在您的 Podfile
中指定它
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '8.0'
use_frameworks!
target '<Your Target Name>' do
pod 'Accurat', :git => 'https://github.com/accuratai/pod-ios'
end
然后,运行以下命令
$ pod install
Swift 包管理器
使用 Swift 包管理器集成 Accurat 到您的 Xcode 项目中,请按照以下步骤在 Xcode 中操作:
- 转到
文件 > Swift Packages > 添加包依赖
。 - 选择正确的项目
- 输入以下 URL
https://github.com/accuratai/pod-ios
- 选择
版本
并保持默认设置 - 点击
下一步
并将该包添加到项目
将 SDK 集成到应用程序中
导入 SDK(必需)
import AccuratSDK
初始化 SDK(必需)
在调用任何其他 Accurat 方法之前,在您的 AppDelegate
类中初始化 SDK。
在 application(_:didFinishLaunchingWithOptions:)
中调用
let config = AccuratConfig(username: "ACCURAT_USERNAME", password: "ACCURAT_PASSWORD", features: [.gdpr, .location])
Accurat.shared.initialize(config: config)
其中 ACCURAT_USERNAME
和 ACCURAT_PASSWORD
是包含您的 Accurat 用户名和密码的字符串。features
是一个可选参数,表示 SDK 要求的同意(请参阅同意流程部分)。
在后台获取位置(必须)
在您的 AppDelegate
中实现以下方法
func application(_ application: UIApplication, performFetchWithCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
Accurat.shared.performBackgroundFetchWithCompletionHandler(completionHandler)
}
开始跟踪(必须)
调用 startTracking
方法以开始跟踪。如果已配置,这将也会触发同意流程(见“同意流程”部分)。
Accurat.shared.startTracking()
您还可以传递一个闭包以在 SDK 完成同意流程时收到事件(闭包是可选的)
Accurat.shared.startTracking(_ onComplete: (() -> Void)?)
必须在每个应用程序启动时调用 startTracking
方法。
建议在 AppDelegate
中的 initialize
方法之后实现此方法。
同意流程(必须)
在 SDK 开始跟踪用户坐标之前,用户必须给出两个同意:
- GDPR 同意,这是一个法律上的同意,是处理个人数据的必要条件。
- 位置同意,这是一种技术上的同意,是收集用户位置数据的必要条件。
可以由 SDK(推荐)或应用程序开发者本身实现请求同意的过程。
由 SDK 实现
当在初始化阶段提供.gdpr
和.location
功能时,调用startTracking
-方法时将自动启动询问这些同意的流程。同意流程如图所示:
首先,通过弹窗屏幕要求用户给予GDPR同意。其次,如果用户同意GDPR同意,会显示弹窗对话框询问其获取位置权限。如果用户给予了GDPR同意和位置权限,则启动跟踪。
增加了一些功能以提高转换率(用户给予GDPR和位置同意)
- 如果用户不同意,则至少延迟48小时再次请求同意,最多请求3次。
- 在显示iOS请求应用内位置权限的弹窗(屏幕2b)之前,我们解释为什么用户应该给予其权限(屏幕2a)。
- 向用户解释iOS将请求其始终位置权限(屏幕2d),并解释为什么用户应该给予此权限(屏幕2c)。
弹出屏幕中的文本和延迟次数(默认为3)可以通过我们的后端进行更改。
可以通过在您的AppDelegate
中添加此代码来实现整个流程
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let config = AccuratConfig(username: "ACCURAT_USERNAME", password: "ACCURAT_PASSWORD", features: [.gdpr, .location])
Accurat.shared.initialize(config: config)
// start tracking (which will also starts the consent flow)
Accurat.shared.startTracking {
//consent flow is finished, eg. ask permission to send push notifications
}
}
由应用开发者实现
同意也可以由应用开发者通过应用程序现有的流程进行请求。请注意,仅当SDK收到批准的gdpr和位置同意时,跟踪才能正常工作。
可以通过调用updateConsent()
-方法,并提供同意类型和同意状态来更新GDPR同意状态
Accurat.shared.updateConsent(.gdpr, state: 0/1)
如果您想获取GDPR同意的状态,请调用getConsentState()
-方法
Accurat.shared.getConsentState(.gdpr)
不需要将位置权限传递给SDK,因为SDK通过设备的设置在应用内检索用户的位置权限。
最后调用startTracking()
以开始跟踪。请注意,即使在没有更改同意状态时,也必须在每次应用启动时调用startTracking()
。
可以通过在您的AppDelegate
中添加此代码来实现整个流程
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let config = AccuratConfig(username: "ACCURAT_USERNAME", password: "ACCURAT_PASSWORD", features: [])
Accurat.shared.initialize(config: config)
if (userOpensTheAppForTheFirstTime()) {
// Own GDPR consent handling
let gdprState = askOwnGdprConsent();
Accurat.shared.updateConsent(.gdpr, gdprState)
// Own location permission handling
askOwnLocationPermission();
}
// start tracking
Accurat.shared.startTracking()
}
同意流程也可以部分由SDK实现,部分由应用开发者实现。例如,通过仅将.location
传递到配置中,GDPR同意必须由应用开发者处理,但位置权限将由SDK处理。
停止跟踪(可选)
要停止定位跟踪,请调用 stopTracking
方法
Accurat.shared.stopTracking()
启用调试日志?(可选)
如果想要启用调试日志,可以通过初始化函数或配置文件传入true布尔值
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Accurat.shared.initialize(username: "ACCURAT_USERNAME", password: "ACCURAT_PASSWORD", enableDebugLogs: true)
}
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
let config = AccuratConfig(username: "ACCURAT_USERNAME", password: "ACCURAT_PASSWORD", features: [.gdpr, .location], enableDebugLogs: true)
Accurat.shared.initialize(config: config)
}
跟踪是否启用?(可选)
如果想知道跟踪是否启用,请调用 isTrackingEnabled
变量
Accurat.shared.isTrackingEnabled
接收位置更新(可选)
当SDK接收到新的位置时,将接收到回调。数组中将至少包含一个表示当前位置的位置对象
Accurat.shared.onLocationUpdate(callback: ([CLLocation]) -> Void)
通知(可选)
如果您要接收本地通知以及需要订阅的相关额外数据,请在您的AppDelegate
中订阅它。
func application(_ application: UIApplication, didReceive notification: UILocalNotification)
notification.userInfo
将包含与该通知相关的额外数据。
设置语言(可选)
如果您要更改用户的语言,可以更新语言设置。此语言将用于同意弹出窗口和地理围栏通知等。如果没有指定语言,则使用设备语言或英文(如果设备语言不受支持)。
Accurat.shared.setLanguage(.en/.nl/.fr)
交互(可选)
根据给定的品牌、活动和触点为消费者添加交互。如果不存在活动和/或触点,则将创建它们。
Accurat.shared.interact(_ group: String, campaign: String, touchpoint: String, campaignStart: Date?, campaignEnd: Date?, campaignId: String?, onComplete: ((isSuccess) -> Void)?)
获取分段(可选)
获取当前消费者所属的分段。如果消费者不存在,则返回空列表。
Accurat.shared.getSegments(onComplete: @escaping (Array<String>) -> Void)
调用权利(可选)
这可以用来通知我们用户是否调用了数据主体的GDPR权利。
Accurat.shared.invokeRight(right: String, info: String?, completion: ((Result<Void, Error>) -> Void)?)
获取元数据(可选)
检索消费者的元数据。如果消费者不存在或未允许跟踪,将返回空列表。
Accurat.shared.getMeta(completion: ([String: String]) -> Void)
Accurat.shared.startTracking {
Accurat.shared.getMeta { metaResult in
}
}
设置元数据(可选)
添加或更新消费者的元数据。如果消费者不存在或未允许跟踪,则元数据将不会保留更改。注意:应在调用 startTracking
后调用
Accurat.shared.setMeta(key: String, value: String?, completion: ((Result<Void, Error>) -> Void)?)
示例
Accurat.shared.startTracking {
Accurat.shared.setMeta(key: String, value: String?) { result in
}
}
提交至应用商店
苹果要求你证明你对后台位置的用途。在应用商店描述的底部添加以下类似内容:本应用使用后台位置来个性化用户体验。持续使用后台位置可能会降低电池寿命。
联系我们
您有任何问题吗?请通过电子邮件发送至 [email protected]。