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_ID
AFFISE_PKG_APP_NAME
APP_VERSION
APP_VERSION_RAW
STORE
INSTALLED_TIME
FIRST_OPEN_TIME
INSTALLED_HOUR
FIRST_OPEN_HOUR
INSTALL_BEGIN_TIME
INSTALL_FINISH_TIME
REFERRAL_TIME
CREATED_TIME
CREATED_TIME_MILLI
CREATED_TIME_HOUR
UNINSTALL_TIME
REINSTALL_TIME
LAST_SESSION_TIME
CONNECTION_TYPE
CPU_TYPE
HARDWARE_NAME
NETWORK_TYPE
DEVICE_MANUFACTURER
PROXY_IP_ADDRESS
DEEPLINK_CLICK
DEVICE_ATLAS_ID
AFFISE_DEVICE_ID
AFFISE_ALT_DEVICE_ID
ADID
ANDROID_ID
ANDROID_ID_MD5
MAC_SHA1
MAC_MD5
GAID_ADID
GAID_ADID_MD5
OAID
OAID_MD5
REFTOKEN
REFTOKENS
REFERRER
USER_AGENT
MCCODE
MNCODE
ISP
REGION
COUNTRY
LANGUAGE
DEVICE_NAME
DEVICE_TYPE
OS_NAME
PLATFORM
API_LEVEL_OS
AFFISE_SDK_VERSION
OS_VERSION
RANDOM_USER_ID
AFFISE_SDK_POS
TIMEZONE_DEV
LAST_TIME_SESSION
TIME_SESSION
AFFISE_SESSION_COUNT
LIFETIME_SESSION_COUNT
AFFISE_DEEPLINK
AFFISE_PART_PARAM_NAME
AFFISE_PART_PARAM_NAME_TOKEN
AFFISE_APP_TOKEN
标签
AFFISE_SDK_SECRET_ID
UUID
AFFISE_APP_OPENED
PUSHTOKEN
事件
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
内容名称
内容类型
转换_ID
COUNTRY
优惠券代码
货币
客户细分市场
客户类型
客户用户_ID
深度链接
描述
目的地_A
目的地_B
目的地列表
新版本
旧版本
订单_ID
参数_01
参数_02
参数_03
参数_04
参数_05
参数_06
参数_07
参数_08
参数_09
参数_10
支付信息可用
首选邻域
产品_ID
产品名称
购买货币
收据_ID
REGION
注册方法
评论文本
搜索字符串
细分市场
状态
订阅_ID
成功
建议目的地
建议酒店
教程_ID
UTM活动
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)