RealifeTech-SDK 1.18.0

RealifeTech-SDK 1.18.0

[email protected]维护,由Aleksandrs Proskurins维护。



 
依赖
RxSwift~> 6.1.0
RxCocoa~> 6.1.0
Apollo~> 0.51.2
Apollo/SQLite>= 0
SwiftLint~> 0.51.0
 

  • Realife Tech

开始使用

该存储库包含 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

  1. 请在调用任何此方法之前配置SDK(参见下面的配置部分)。
  2. 在使用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已经配置好,我们建议将代码添加到您的AppDelegateapplicationDidFinishLaunching(_:)中。

注意,尽管deviceId是可选的,但我们还是建议初始化配置对象时与其一起,因为如果不行,系统将使用identifierForVendor,而这之间已知的有所变化。

设置核心服务

RealifeTech-SDK在CoreFactory中提供工厂方法,允许您初始化服务。

  1. UIDeviceInterface:一个帮助器,用于获取当前设备的UUID、型号和系统版本。
static func makeDeviceHelper() -> UIDeviceInterface
  1. ReachabilityChecking:一个帮助器,用于检测网络连接和蓝牙状态。
static func makeReachablitiyChecker() -> ReachabilityChecking
  1. APITokenManagable:一个帮助器,用于设置RealifeTech API,为请求者设置deviceId和配置。
static func makeApiHelper(deviceId: String, configuration: CoreSDKConfiguration) -> APITokenManagable
  1. GraphQLDispatching:一个调度器,用于请求RealifeTech GraphQL API。
static func makeGraphQLDispatcher(
        configuration: CoreSDKConfiguration,
        tokenHelper: APITokenManagable,
        deviceId: String,
        reachabilityHelper: ReachabilityChecking
    ) -> GraphQLDispatching
  1. 获取用于使用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)
  • 在NSE目标中使用RLTNotificationsTracker来跟踪接收到的推送通知
    • 使用AppGroup ID初始化RLTNotificationsTracker,并在NotificationService.swift的didReceive函数中调用didReceive(request:withContentHandler:)

选项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()
    }
}