Affise Attribution iOS 库
| Pod | 版本 |
|---|---|
AffiseAttributionLib |
1.6.9 |
AffiseSKAdNetwork |
1.6.9 |
AffiseModule/Status |
1.6.9 |
描述
Affise SDK 是一种软件,您可以使用它来收集应用程序使用统计信息、设备标识符、deeplink 使用情况以及跟踪安装推荐者。
快速开始
集成
作为CocoaPods进行集成
使用CocoaPods添加SDK时,请在Podfile中指定要使用的版本。
# Affise SDK library
pod 'AffiseAttributionLib', '~> 1.6.9'
# Affise module
pod 'AffiseModule/Status', '~> 1.6.9'直接从GitHub获取源代码
# Affise SDK library
pod 'AffiseAttributionLib', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.9'
# Affise module
pod 'AffiseModule/Status', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.9'初始化
将库作为依赖项添加后,与gradle文件同步项目并初始化。
用于Swift
演示应用 AppDelegate.swift
import AffiseAttributionLib
@main
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
// Override point for customization after application launch.
let properties = AffiseInitProperties(
affiseAppId: "Your appId", //Change to your app id
secretKey: "Your secretKey" //Change to your appToken
)
Affise.shared.load(app: application, initProperties: properties, launchOptions: launchOptions)
return true
}
}用于Objective-C
演示应用 AppDelegate.m
#import "AppDelegate.h"
#import <AffiseAttributionLib/AffiseAttributionLib-Swift.h>
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
AffiseInitProperties *initProperties = [[AffiseInitProperties alloc]
initWithAffiseAppId:@"Your appId" //Change to your app id
secretKey:@"Your secretKey" //Change to your appToken
];
[Affise.shared loadWithApp:application initProperties:initProperties launchOptions:launchOptions];
return YES;
}
@end检查库是否已初始化
Affise.shared.isInitialized()StoreKit广告网络
使用CocoaPods添加SDK时,请在Podfile中指定要使用的版本。
# Wrapper for StoreKit Ad Network
pod 'AffiseSKAdNetwork', '~> 1.6.9'直接从GitHub获取源代码
# Wrapper for StoreKit Ad Network
pod 'AffiseSKAdNetwork', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.9'使用范围
针对iOS版本低于15.4
import AffiseSKAdNetwork
AffiseSKAdNetwork.shared()?.registerAppForAdNetworkAttribution(completionHandler: { error in
// Handle error
})
AffiseSKAdNetwork.shared()?.updateConversionValue(conversionValue, completionHandler: { error in
// Handle error
})针对iOS 15.4
import AffiseSKAdNetwork
AffiseSKAdNetwork.shared()?.updatePostbackConversionValue(fineValue, completionHandler: { error in
// Handle error
})针对iOS 16.1
import AffiseSKAdNetwork
AffiseSKAdNetwork.shared()?.updatePostbackConversionValue(fineValue, coarseValue, completionHandler: { error in
// Handle error
})配置您的应用将反向副本发送到Affise
将键 NSAdvertisingAttributionReportEndpoint 添加到 Info.plist。将键值设置为 https://affise-skadnetwork.com/
示例: example/ios/Runner/Info.plist
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>NSAdvertisingAttributionReportEndpoint</key>
<string>https://affise-skadnetwork.com/</string>
</dict>
</array>特点
设备标识收集
为了匹配用户与发送的事件和数据库,这些标识被收集
AFFISE_APP_IDAFFISE_PKG_APP_NAMEAPP_VERSIONAPP_VERSION_RAWSTOREINSTALLED_TIMEFIRST_OPEN_TIMEINSTALLED_HOURFIRST_OPEN_HOURINSTALL_BEGIN_TIMEINSTALL_FINISH_TIMEREFERRAL_TIMECREATED_TIMECREATED_TIME_MILLICREATED_TIME_HOURUNINSTALL_TIMEREINSTALL_TIMELAST_SESSION_TIMECONNECTION_TYPECPU_TYPEHARDWARE_NAMENETWORK_TYPEDEVICE_MANUFACTURERPROXY_IP_ADDRESSDEEPLINK_CLICKDEVICE_ATLAS_IDAFFISE_DEVICE_IDAFFISE_ALT_DEVICE_IDADIDANDROID_IDANDROID_ID_MD5MAC_SHA1MAC_MD5GAID_ADIDGAID_ADID_MD5OAIDOAID_MD5REFTOKENREFTOKENSREFERRERUSER_AGENTMCCODEMNCODEISPREGIONCOUNTRYLANGUAGEDEVICE_NAMEDEVICE_TYPEOS_NAMEPLATFORMAPI_LEVEL_OSAFFISE_SDK_VERSIONOS_VERSIONRANDOM_USER_IDAFFISE_SDK_POSTIMEZONE_DEVLAST_TIME_SESSIONTIME_SESSIONAFFISE_SESSION_COUNTLIFETIME_SESSION_COUNTAFFISE_DEEPLINKAFFISE_PART_PARAM_NAMEAFFISE_PART_PARAM_NAME_TOKENAFFISE_APP_TOKEN标签AFFISE_SDK_SECRET_IDUUIDAFFISE_APP_OPENEDPUSHTOKEN事件AFFISE事件计数
事件跟踪
例如,我们想跟踪用户通常添加到购物车中的商品。要发送事件,首先要使用以下代码创建它
class Presenter {
func onUserAddsItemsToCart(items: String) {
let items = [
("items", "cookies, potato, milk")
]
Affise.shared.sendEvent(event: AddToCartEvent("groceries")
.addPredefinedParameter(PredefinedString.DESCRIPTION, string: "best before 2029")
.addPredefinedParameter(PredefinedObject.CONTENT, object: items)
)
}
}用于Objective-C
- (void)onUserAddsItemsToCart:(NSString *)itemsToCart {
NSArray *items = @[
@{"items", itemsToCart}
];
Event *event = [[AddToCartEvent alloc] init:@"groceries"];
[event addPredefinedParameter:PredefinedStringADREV_AD_TYPE value:@"best before 2029"];
[event addPredefinedParameter:PredefinedObjectCONTENT object:items];
[Affise.shared sendEventWithEvent: event];
}使用上述示例,您可以实现其他事件
达到等级添加支付信息添加到购物车添加到心愿单点击广告完成注册完成流媒体播放完成试用完成教程联系观看内容条目定制产品DeepLinked捐款查找位置启动结账启动购买启动流邀请最后归因触摸潜在客户列表视图登录来自推送通知打开订单订单取消订单退货请求订单退货请求取消购买评分重新参与预订销售安排搜索分享消费积分开始注册开始试用开始教程提交申请订阅旅行预订解锁成就退订更新查看广告查看购物车查看内容查看商品查看商品列表初始订阅初始试用初始优惠已转换试用已转换优惠重试试用重试优惠重试订阅续订订阅重试失败订阅重试失败优惠重试失败试用失败订阅失败优惠失败试用重新激活订阅重试续订订阅重试已转换优惠重试已转换试用退订
自定义事件跟踪
使用任何自定义事件,如果默认事件不符合您的场景
自定义ID01自定义ID02自定义ID03自定义ID04自定义ID05自定义ID06自定义ID07自定义ID08自定义ID09自定义ID10
预定义事件参数
为了丰富您的事件并增加另一个维度,您可以使用预定义参数处理大多数常见情况。将其添加到任何事件中。
class Presenter {
func onUserAddsItemsToCart(items: String) {
let items = [
("items", "cookies, potato, milk")
]
let addToCart = AddToCartEvent("groceries")
.addPredefinedParameter(PredefinedString.DESCRIPTION, string: "best before 2029")
.addPredefinedParameter(PredefinedObject.CONTENT, object: items)
Affise.shared.sendEvent(event: addToCart)
}
}用于Objective-C
- (void)onUserAddsItemsToCart:(NSString *)itemsToCart {
NSArray *items = @[
@{"items", itemsToCart}
];
Event *event = [[AddToCartEvent alloc] init:@"groceries"];
[event addPredefinedParameter:PredefinedStringADREV_AD_TYPE value:@"best before 2029"];
[event addPredefinedParameter:PredefinedObjectCONTENT object:items];
[Affise.shared sendEventWithEvent: event];
}在上面的示例中,《预定义参数.DESCRIPTION》和《预定义对象.CONTENT》已使用,但许多其他参数也可用。
| 预定义参数 | 类型 |
|---|---|
| 预定义字符串 | 字符串 |
| 预定义长整数 | Int64 |
| 预定义浮点数 | 浮点数 |
| 预定义对象 | [(字符串,任何)] |
| 预定义列表对象 | [[(字符串,任何)]] |
| 预定义字符串列表 | [字符串] |
预定义字符串
成就_ID广告类型品牌建筑目录_ID渠道类型城市类别内容_ID内容名称内容类型转换_IDCOUNTRY优惠券代码货币客户细分市场客户类型客户用户_ID深度链接描述目的地_A目的地_B目的地列表新版本旧版本订单_ID参数_01参数_02参数_03参数_04参数_05参数_06参数_07参数_08参数_09参数_10支付信息可用首选邻域产品_ID产品名称购买货币收据_IDREGION注册方法评论文本搜索字符串细分市场状态订阅_ID成功建议目的地建议酒店教程_IDUTM活动UTM媒介UTM来源验证垂直虚拟货币名称优惠券代码
预定义长数
金额日期_A日期_B出发到达日期出发出发日期酒店评分等级最高评分值成人数量儿童数量婴儿数量偏好停靠次数偏好星级评分数量评分值返回到达日期返回出发日期评分旅游开始旅游结束用户评分事件开始事件结束
预定义浮点数
首选价格范围价格收入纬度经度
预定义对象
内容
预定义列表对象
内容列表
预定义列表字符串
内容ID
事件缓冲
Affise库将会在首次机会发送任何挂起的事件,但如果没有网络连接或设备被禁用,则事件将在本地保存7天后删除。
推送令牌跟踪
为了让Affise跟踪推送令牌,您需要从推送服务提供商接收它,并将其传递给Affise库。首先将Firebase集成到您的应用程序中,完成以下步骤:[Firebase文档](https://firebase.google.com/docs/cloud-messaging/ios/client)
完成Firebase集成后,将您的云消息服务的onNewToken方法添加到Affise.share.addPushToken(token)
func messaging(_ messaging: Messaging, didReceiveRegistrationToken fcmToken: String?) {
print("Firebase registration token: \(String(describing: fcmToken))")
// New token generated
Affise.share.addPushToken(pushToken: fcmToken)
}重装/卸载跟踪
Affise通过使用静默推送技术自动跟踪重装事件,要使此功能生效,需在用户重置推送标记时及应用程序启动时传递推送标记。
Affise.share.addPushToken(pushToken: token)深度链接
要集成深度链接支持,您可以在官方文档中找到如何设置深度链接的说明。
在Affise.share.init(..)之后立即注册深度链接回调。
Affise.share.init(..)
Affise.shared.registerDeeplinkCallback { url in
let component = URLComponents(string: url.absoluteString)!
let screen = component.queryItems?.first(where: {$0.name == "screen"})?.value
if let screen = screen, screen == "special_offer" {
// open special offer activity
} else {
// open another activity
}
}将深度链接处理器添加到AppDelegate.swift
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
Affise.shared.handleDeeplink(url: url)
return true
}将键CFBundleURLTypes添加到Info.plist
<key>CFBundleURLTypes</key>
<array>
<dict>
<key>CFBundleTypeRole</key>
<string>Editor</string>
<key>CFBundleURLName</key>
<string>YOUR_AFFISE_APP_ID.affattr.com</string>
<key>CFBundleURLSchemes</key>
<array>
<string>affise</string>
</array>
</dict>
</array>获取随机用户ID
使用SDK的下一个公开方法
Affise.shared.getRandomUserId()获取随机设备ID
使用SDK的下一个公开方法
Affise.shared.getRandomDeviceId()WebView跟踪
初始化WebView
为了将库集成到JavaScript环境中,我们在JavaScript和本地SDK之间建立了一个桥梁。现在您可以直接从Webview发送事件和使用本地库的功能。以下是逐步说明
// retreive WebView from view hierarhy
@IBOutlet weak var webView: WKWebView!
// make sure javascript is enabled
override func viewDidLoad() {
super.viewDidLoad()
webView.configuration.preferences.javaScriptEnabled = true
}
// initialize WebView with Affise native library
Affise.shared.registerWebView(webView: webView)
下面描述了其他JavaScript环境功能。
事件跟踪JS
演示应用 app/app/index.html
WebView初始化后,您从JavaScript环境发送事件
let data = { card: 4138, type: 'phone' };
let event = new AddPaymentInfoEvent({
userData: 'taxi',
};
event.addPredefinedParameter(PredefinedString.PURCHASE_CURRENCY, 'USD');
event.addPredefinedParameter(PredefinedFloat.PRICE, 2.19);
event.addPredefinedParameter(PredefinedObject.CONTENT, data);
Affise.sendEvent(event);与本地SDK一样,javascript环境还提供了一些默认事件,可以从WebView传递
达到等级事件添加付款信息事件添加到购物车事件添加到愿望单事件点击广告事件完成注册事件完成流媒体事件完成试用事件完成教程事件联系事件内容项目视图事件自定义ID01事件自定义ID02事件自定义ID03事件自定义ID04事件自定义ID05事件自定义ID06事件自定义ID07事件自定义ID08事件自定义ID09事件自定义ID10事件定制产品事件深度链接事件捐赠事件查找位置事件开始结账事件开始购买事件开始流媒体事件邀请事件最后 attributedtouchevent引荐事件列表视图事件登录事件从推送通知打开事件订单事件订单取消事件订单退货请求事件订单退货请求取消事件购买事件评分事件重新参与事件预订事件销售事件安排事件搜索事件分享事件消费点数事件开始注册事件开始试用事件开始教程事件提交申请事件订阅事件旅行预订事件解锁成就事件退订事件更新事件观看广告事件查看购物车事件查看内容事件查看商品事件查看商品列表事件初始订阅事件初始试用事件初始出价事件转换试用事件转换出价事件重试试用事件重试出价事件重试订阅事件续订订阅事件重试失败订阅事件重试失败出价事件重试失败试用事件失败订阅事件失败出价事件失败试用事件重新激活订阅事件重试续订订阅事件重试转换出价事件重试转换试用事件取消订阅事件
JavaScript内置事件参数
每个事件都可以通过自定义事件参数进行扩展。通过调用 addPredefinedParameter 函数,您可以传递 内置参数
例如
let event = ...
event.addPredefinedParameter(PredefinedString.PURCHASE_CURRENCY, 'USD');
event.addPredefinedParameter(PredefinedFloat.PRICE, 2.19);
event.addPredefinedParameter(PredefinedLong.QUANTITY, 1);
event.addPredefinedParameter(PredefinedObject.CONTENT, { card: 4138, type: 'phone' });
event.addPredefinedParameter(PredefinedListObject.CONTENT_LIST, [{content:'songs'}, {content:'videos'}]);
Affise.sendEvent(event);JavaScript自定义事件
如果上述事件功能仍然无法满足您的需求,您总是可以扩展 Event 类来覆盖您缺失的字段
class MyCustomEvent extends Event {
constructor(args) {
super('MyCustom', args)
}
}自定义
ConversionId
添加3个内置字符串值:PredefinedString.CONVERSION_ID、PredefinedString.ORDER_ID、PredefinedString.PRODUCT_ID
CONVERSION_ID=ORDER_ID_PRODUCT_ID
let event = AddToCartEvent()
let conversionId = event.customPredefined().conversionId("ORDER_ID", "PRODUCT_ID")
Affise.shared.sendEvent(event: event)