开始使用
该存储库包含 RealifeTech SDK,可以使用 CocoaPods 依赖管理器将其安装到您的 Swift 项目中。在这里,您可以找到入门指南以及如何使用 SDK 特性的示例。
1. 确保满足以下要求
- XCode 11.3+
- 部署目标 iOS 13.0+
- CocoaPods 1.8.4+
- Swift 5
请注意,我们的 SDK 目前依赖于 RxSwift 包,这些包通过 CocoaPods 自动管理。此包应与大于 6.1 版本的 RxSwift 和 RxCocoa 的任何依赖项兼容。
2. 安装 RealifeTech-SDK Pod 依赖项
将以下行添加到您 Apps 目标下的 Podfile
pod 'RealifeTech-SDK'
打开您的终端,转到包含您的 podfile 的目录,然后运行
$ pod install
3. 在运行时设置SDK
- 请在调用任何此方法之前配置SDK(参见下面的配置部分)。
- 在使用SDK的其他方法之前,您还需要完成设备注册(见下文)。
配置
重要:如果不调用配置而使用SDK,可能导致运行时错误。请务必配置SDK。
使用以下函数配置SDK以供使用。您的入职部分将提供必要的值。注意,除非在入职时提供唯一端点,否则SDK为API端点提供默认值,留空这些字段。
let configuration = CoreConfiguration(
appCode: "APPLICATION_CODE",
clientSecret: "API_SECRET",
deviceId: "DEVICE_ID" // OPTIONAL
apiUrl: "http://API_URL", // OPTIONAL
graphQLApiUrl: "http://GRAPH_API_URL" // OPTIONAL
)
RealifeTech.configureSDK(with: configuration)
为了确保在使用任何其他功能之前SDK已经配置好,我们建议将代码添加到您的AppDelegate
的applicationDidFinishLaunching(_:)
中。
注意,尽管deviceId是可选的,但我们还是建议初始化配置对象时与其一起,因为如果不行,系统将使用identifierForVendor,而这之间已知的有所变化。
设置核心服务
RealifeTech-SDK在CoreFactory
中提供工厂方法,允许您初始化服务。
- UIDeviceInterface:一个帮助器,用于获取当前设备的UUID、型号和系统版本。
static func makeDeviceHelper() -> UIDeviceInterface
- ReachabilityChecking:一个帮助器,用于检测网络连接和蓝牙状态。
static func makeReachablitiyChecker() -> ReachabilityChecking
- APITokenManagable:一个帮助器,用于设置RealifeTech API,为请求者设置deviceId和配置。
static func makeApiHelper(deviceId: String, configuration: CoreSDKConfiguration) -> APITokenManagable
- GraphQLDispatching:一个调度器,用于请求RealifeTech GraphQL API。
static func makeGraphQLDispatcher(
configuration: CoreSDKConfiguration,
tokenHelper: APITokenManagable,
deviceId: String,
reachabilityHelper: ReachabilityChecking
) -> GraphQLDispatching
- 获取用于使用RealifeTech API的有效令牌。
static func requestValidToken(fromApiHelper apiHelper: APITokenManagable)
通用
设备注册
与我们的后端系统对接需要您的设备在其上进行注册。您可以使用下面的函数进行设备注册。
RealifeTech.General.registerDevice {
// code to run once call has finished
}
如果注册失败(例如由于网络连接问题),我们将重试直到成功。设备未注册之前,您将无法使用大多数SDK功能,您可以使用以下方式检查其状态:
RealifeTech.General.sdkReady // Returns Bool
推送通知
使用以下函数为设备注册推送通知。
RealifeTech.Communicate.registerForPushNotifications(tokenData: Data)
RealifeTech.Communicate.registerForPushNotifications(token: String)
通常,您将该代码添加到AppDelegate方法中,该方法在iOS注册成功后接收APN令牌。在这种情况下,直接将Data对象通过registerForPushNotifications(tokenData: Data)
传递给RealifeTech SDK。
另可随意注册一个设备令牌,或者在使用您自己的逻辑之后。在这种情况下,请使用registerForPushNotifications(token: String)
。
在成功将令牌发送到我们的后端之前,它将被持久存储。应用程序启动时,我们将尝试发送挂起的令牌。一次只能存储一个令牌。
分析
使用以下函数记录分析事件
RealifeTech.Analytics.track(
type: "type",
action: "action",
new: ["someValue": "123"],
old: nil) { result in
switch result {
case success:
// event has been logged
case failure(let error):
// handle error
}
}
例如,如果您想记录登录至Ticketmaster等外部系统,您将发送以下内容
- type:
"user"
- action:
"externalLogin"
- new:
{"userId": "a3890e983e", "provider": "ticketmaster"}
- old:
nil
如果记录失败(例如因连接问题)我们将重试直至成功。
受众
为了判断设备是否是某个受众成员,您将使用以下函数,并传递audienceId
RealifeTech.Audiences.deviceIsMemberOfAudience(audienceId: String) { result in
switch result {
case success(let isMember):
// Our call succeeded
// Check `isMember` for membership status
case failure(let error):
// Handle failure
}
}
注意:在调用之前,您可能需要检查SDK是否已准备就绪
guard RealifeTech.General.sdkReady else {
// Handle SDK not yet ready //
}
跟踪推送通知分析
跟踪接收
选项1:即使应用被强制退出也跟踪
此选项操作更为复杂,但将允许您跟踪在应用处于前台、后台或非活动(强制退出)状态时的推送通知。
实现这一点的一般方法是实现一个“通知服务扩展”,当它的didReceive函数被调用时,调用我们的SDK以进行跟踪。
需求
确保推送通知的负载中包含"mutable-content": 1
步骤
- 在Xcode中添加通知服务扩展(NSE)目标
- 启用具有appGroupId的应用程序组功能 - 这允许应用程序在我们应用程序关闭时执行代码。
- 将appGroupId传递给SDK以配置NSE
- 在didFinishLaunchingWithOptions函数中调用
configureNotificationExtensionWith(appGroupId:configuration)
。
- 在didFinishLaunchingWithOptions函数中调用
- 在NSE目标中使用RLTNotificationsTracker来跟踪接收到的推送通知
- 使用AppGroup ID初始化RLTNotificationsTracker,并在NotificationService.swift的didReceive函数中调用
didReceive(request:withContentHandler:)
。
- 使用AppGroup ID初始化RLTNotificationsTracker,并在NotificationService.swift的didReceive函数中调用
选项2:只有在应用程序在前台或后台时才跟踪
如果您不想使用通知服务扩展,并且确定不会在应用程序被强制退出时接收到跟踪事件,您可以在AppDelegate中使用的以下函数来跟踪收到的通知,并相应地调用我们的SDK。
application(_:didReceiveRemoteNotification:fetchCompletionHandler: @escaping (UIBackgroundFetchResult) -> Void)
限制
当应用程序处于不活动状态(强制退出)时,此函数不会触发,这意味着您只能跟踪在应用程序处于前台和后台时接收到的通知。
当您的应用程序在前台时,用户无法在设备上看到推送通知弹出窗口。您需要编写代码手动显示弹出窗口。
需求
- 在 Xcode 中启用“后台模式 - 远程通知”功能
- 确保您的推送通知有效载荷包含
"content-available": 1
步骤
在 application(_:didReceiveRemoteNotification:fetchCompletionHandler
中调用 SDK 的 Communicate().trackPush
函数,传入
- 事件:.received
- 跟踪信息:userInfo
RealifeTech.Communicate().trackPush(event: .received, trackInfo: userInfo) {
completionHandler(.noData)
}
跟踪打开
- 此功能可以跟踪应用程序是否在后台、前台或非活动状态(强制退出)。
- 使 AppDelegate 遵守 UNUserNotificationCenterDelegate 协议
- 将 AppDelegate 设为协议的代理
func application(_:didFinishLaunchingWithOptions) {
UNUserNotificationCenter.current().delegate = self
}
实现以下内容
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
RealifeTech.Communicate().trackPush(event: .opened, trackInfo: userInfo) {
completionHandler()
}
}