Monetate-personalization-sdk: iOS
概述:- 此 SDK 可以轻松与 Engine API 通信,并可用于由 iOS 构建的应用程序。使用此 SDK,我们可以报告事件并获取 Engine API 的操作。
安装:- pod 'monetate-ios-sdk' pod 'monetate-ios-sdk', :git => 'https://github.com/monetate/monetate-personalization-ios-sdk-cocoapod.git ', :branch => 'main'
开始开发:-
导入 SDK
import "monetate-ios-sdk"
初始化 Personalization.setup( account: Account(instance: "p", domain: "localhost.org", name: "a-701b337c", shortname: "localhost"), user: User(monetateId: "auto"), contextMap: setupContextMap() )
contextMap:- 包含可以传递事件数据的列表。如果要在初始化时传递 AUTO 事件,则应在初始化时在 contextMap 中提及。
func setupContextMap () -> ContextMap { return ContextMap( userAgent: UserAgent(auto: true), ipAddress: IPAddress(ipAddress: "192.168.0.1"), coordinates: Coordinates.init(auto: true), screenSize: ScreenSize(auto: true),
cart: {() in let promise = Promise<Cart, Error>() promise.succeed(value: Cart(cartLines: [CartLine(sku: "SKU-111", pid: "PID-111", quantity: 2, currency: "USD", value: "460"), CartLine(sku: "SKU-222", pid: "PID-222", quantity: 4, currency: "USD", value: "560")])) return promise.future }, purchase: { let promise = Promise<Purchase, Error>() let p = Purchase(account: "account-232", domain: "tem.dom.main", instance: "temp", purchaseId: "pur-23232", purchaseLines: [ PurchaseLine(sku: "SKU-123", pid: "Prod-1232", quantity: 2, currency: "USD", value: "2.99") ]) promise.succeed(value: p) return promise.future }, productDetailView: { () in let promise = Promise<ProductDetailView, Error>() let result = ProductDetailView.init(products: [ Product.init(productId: "PROD-9898", sku: "SKU-9898"), Product.init(productId: "PROD-8989", sku: "SKU-8989") ]) promise.succeed(value: result) return promise.future }, productThumbnailView: { let promise = Promise<ProductThumbnailView, Error>() let result = ProductThumbnailView.init(products: [""]) promise.succeed(value: result) return promise.future }, pageView: { () in let promise = Promise<PageView, Error>() let r = PageView(pageType: "profile", path: "/profile", url: "http:/home", categories: nil, breadcrumbs: nil) promise.succeed(value: r) return promise.future }, metadata: { () in let promise = Promise<Metadata, Error>() let r = Metadata(metadata: JSONValue(dictionaryLiteral: ("Key1", "Val1"), ("Key2", "Val2"))) promise.succeed(value: r) return promise.future }, customVariables: { () in let promise = Promise<CustomVariables, Error>() let r = CustomVariables(customVariables: [ CustomVariablesModel(variable: "TempVariable", value: JSONValue.init(dictionaryLiteral: ("String", "JSONValue"))), CustomVariablesModel(variable: "KEY", value: JSONValue.init(dictionaryLiteral: ("String", "JSONValue"))) ]) promise.succeed(value: r) return promise.future })
}
报告方法:- Personalization.shared.report(context: .UserAgent, event: UserAgent(key))
此方法向 Engine API 报告数据。它接受两个参数,第一个是 eventype,第二个是 eventData,它是可选的。如果没有定义 eventData,则 SDK 会查找初始化时定义的上下文地图中的数据。
获取操作方法
Personalization.shared.getActions(context: .UserAgent, requestId: requestId, event: UserAgent(key)).on(success: { (res) in self.handleAction(res: res) }) 此方法用于请求决策和报告事件。它返回包含适当操作 JSON 的对象。eventType 和 eventData 是可选参数。如果我们只需要操作,可以跳过可选参数。requestId 是将响应与事件关联的请求标识符。
刷新方法 Personalization.shared.flush(); 为了提高性能,事件被排队,并在达到 700 毫秒间隔后一次性(在一个请求内)发送。刷新方法强制立即将所有排队的发送到服务器,并清空队列。