Affise Attribution iOS Library(Affise 推广跟踪 iOS 库)
Pod(库) | 版本 |
---|---|
AffiseAttributionLib | 1.6.1 |
AffiseSKAdNetwork | 1.6.1 |
- Affise Attribution iOS Library(Affise 推广跟踪 iOS 库)
- Description(描述)
- Features(特性)
- Device identifiers collection(设备标识收集)
- Events tracking(事件追踪)
- Custom events tracking(自定义事件追踪)
- Predefined event parameters(预定义事件参数)
- Events buffering(事件缓冲)
- Push token tracking(推送令牌追踪)
- Reinstall Uninstall tracking(重新安装/卸载追踪)
- Deeplinks(深链接)
- Get random user Id(获取随机用户 ID)
- Get random device Id(获取随机设备 ID)
- WebView tracking(WebView 追踪)
描述
Affise SDK 是一款可以用于收集应用程序使用统计信息、设备标识、deeplink 使用情况以及追踪安装推荐者的软件。
快速入门
集成
作为 Cocoapods 集成
要通过 Cocoapods 添加 SDK,请在您的 Podfile 中指定要使用的版本
// Get pod from repository
pod 'AffiseAttributionLib', '~> 1.6.1'
// Get source directly from GitHub
pod 'AffiseAttributionLib', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.1'
初始化
将库添加为依赖项后,与 gradle 文件同步项目并初始化。
示例应用 AppDelegate.swift
对于 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 使用
#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
StoreKit 广告网络
要通过 Cocoapods 添加 SDK,请在您的 Podfile 中指定要使用的版本
// Get pod from repository
pod 'AffiseSKAdNetwork', '~> 1.6.1'
// Get source directly from GitHub
pod 'AffiseSKAdNetwork', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.1'
用于
对于 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 发送 postback 复制
将键 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
AFFISE_APP_NAME_DASHBOARD
APP_VERSION
APP_VERSION_RAW
STORE
TRACKER_TOKEN
TRACKER_NAME
FIRST_TRACKER_TOKEN
FIRST_TRACKER_NAME
LAST_TRACKER_TOKEN
LAST_TRACKER_NAME
OUTDATED_TRACKER_TOKEN
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
LABEL
AFFISE_SDK_SECRET_ID
UUID
AFFISE_APP_OPENED
PUSHTOKEN
EVENTS
AFFISE_EVENTS_COUNT
事件跟踪
例如,我们想跟踪用户通常添加到购物车的哪些项目。首先使用以下代码创建事件
class Presenter {
func onUserAddsItemsToCart(items: String) {
let items = [
("items", "cookies, potato, milk")
]
Affise.shared.sendEvent(event: AddToCartEvent("groceries").apply {
$0.addPredefinedParameter(PredefinedString.DESCRIPTION, string: "best before 2029")
$0.addPredefinedParameter(PredefinedObject.CONTENT, object: items)
})
}
}
对于 Objective-C 使用
- (void)onUserAddsItemsToCart:(NSString *)itemsToCart {
NSArray *items = @[
@{"items", itemsToCart}
];
Event *event = [[AddToCartEvent alloc] initWithAddToCartObject:@"groceries"];
[event addPredefinedParameterWithParameter:PredefinedString.ADREV_AD_TYPE value:@"best before 2029"];
[event addPredefinedParameterWithParameter:PredefinedObject.CONTENT object:items];
[Affise.shared sendEventWithEvent: event];
}
使用以上示例,您可以实现其他事件
达到等级
添加支付信息
添加到购物车
添加到心愿单
点击广告
完成注册
完成流媒体
完成试用
完成教程
联系
内容项目视图
定制产品
深层链接
捐赠
查找位置
启动结账
启动购买
启动流媒体
邀请
最后分配的触摸
潜在客户
列表视图
登录
来自推送通知的打开
购买
评分
重新参与
预订
销售
安排
搜索
分享
消耗积分
开始注册
开始试用
开始教程
提交申请
订阅
旅行预订
解锁成就
退订
更新
查看广告
查看购物车
查看内容
查看项目
查看项目列表
初始订阅
初始试用
初始优惠
已转换试用
已转换优惠
重试试用
重试优惠
重试订阅
续订订阅
重试失败的订阅
重试失败的优惠
重试失败的试用
失败的订阅
失败的优惠
失败的试用
重新激活订阅
重试续订订阅
重试转换优惠
重试转换试用
退订
自定义事件跟踪
如果默认事件不符合您的场景,请使用任何自定义事件
自定义ID01
自定义ID02
自定义ID03
自定义ID04
自定义ID05
自定义ID06
自定义ID07
自定义ID08
自定义ID09
自定义ID10
预定义事件参数
为了丰富您的活动,您可以使用预定义参数来处理大多数常见情况。将其添加到任何事件中
class Presenter {
func onUserAddsItemsToCart(items: String) {
let items = [
("items", "cookies, potato, milk")
]
Affise.shared.sendEvent(event: AddToCartEvent("groceries", timeStampMillis: Int64(Date().timeIntervalSince1970 * 1000)).apply {
$0.addPredefinedParameter(PredefinedString.DESCRIPTION, string: "best before 2029")
$0.addPredefinedParameter(PredefinedObject.CONTENT, object: items)
})
}
}
对于 Objective-C 使用
- (void)onUserAddsItemsToCart:(NSString *)itemsToCart {
NSArray *items = @[
@{"items", itemsToCart}
];
Event *event = [[AddToCartEvent alloc] initWithAddToCartObject:@"groceries"
timeStampMillis:NSDate.date.timeIntervalSince1970];
[event addPredefinedParameterWithParameter:PredefinedString.ADREV_AD_TYPE value:@"best before 2029"];
[event addPredefinedParameterWithParameter:PredefinedObject.CONTENT object:items];
[Affise.shared sendEventWithEvent: event];
}
在上面的例子中,使用了 PredefinedParameters.DESCRIPTION
和 PredefinedObject.CONTENT
,但还有许多其他参数可供选择
预定义参数 | 类型 |
---|---|
PredefinedString(预定义字符串) | 字符串 |
PredefinedLong(预定义长整型) | Int64 |
PredefinedFloat(预定义浮点型) | 浮点数 |
PredefinedObject(预定义对象) | [(字符串,任何)] |
PredefinedListObject(预定义列表对象) | [[(字符串,任何)]] |
PredefinedListString(预定义字符串列表) | [字符串] |
预定义字符串
ADREV_AD_TYPE
城市
COUNTRY
REGION
类别
内容ID
内容类型
货币
客户用户ID
描述
目的地A
目的地B
目的地列表
订单ID
可用的支付信息
首选邻域
购买货币
收据ID
注册方法
搜索字符串
订阅ID
成功
建议目的地
建议酒店
验证
成就ID
优惠券代码
客户细分市场
深度链接
新版本
旧版本
PARAM_01
PARAM_02
PARAM_03
PARAM_04
PARAM_05
PARAM_06
PARAM_07
PARAM_08
PARAM_09
PARAM_10
评论文本
教程ID
虚拟货币名称
状态
预定义长整型
日期A
日期B
出发到达日期
出发日期
酒店评分
级别
最大评分值
成人数量
儿童数量
婴儿数量
首选停靠次数
首选星级评分
数量
评分值
返回到达日期
返回日期
得分
旅行开始
旅行结束
用户评分
事件开始
事件结束
预定义浮点型
首选价格区间
价格
收入
纬度
经度
预定义对象
内容
预定义列表对象
内容列表
预定义列表字符串
内容ID列表
事件缓冲
Affise库会在首次机会将任何挂起的事件发送出去,如果没有网络连接或设备被禁用,事件将保留在本地7天,然后删除。
推送令牌跟踪
要让Affise追踪推送令牌,您需要从您的推送服务提供商处获取它,并将其传递给Affise库。首先通过完成以下步骤将Firebase集成到您的应用程序中:Firebase文档
完成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(fcmToken)
}
重新安装卸载跟踪
Affise通过使用静默推送技术自动跟踪重新安装事件,为了使此功能正常工作,用户重置推送令牌时和在您应用程序启动时传递推送令牌。
Affise.share.addPushToken(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
,如app/app/AppDelegate.swift
所示。
func application(
_ app: UIApplication,
open url: URL,
options: [UIApplication.OpenURLOptionsKey : Any] = [:]
) -> Bool {
Affise.shared.handleDeeplink(url: url)
return true
}
将键CFBundleURLTypes
添加到Info.plist
中。
示例:app/app/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)
其他JavaScript环境功能描述如下。
事件跟踪JS
示例应用 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事件
自定义产品事件
深度链接事件
捐赠事件
查找位置事件
开始结账事件
开始购买事件
开始流媒体播放事件
邀请事件
最后的触碰事件
引荐事件
查看列表视图事件
登录事件
源自推送通知的事件
购买事件
评分事件
再营销事件
预订事件
销售事件
安排事件
搜索事件
分享事件
消耗积分事件
开始注册事件
开始试用期事件
开始教程事件
提交申请事件
订阅事件
旅行预订事件
解锁成就事件
取消订阅事件
更新事件
查看广告事件
查看购物车事件
查看内容事件
查看商品事件
查看商品列表事件
初始订阅事件
初始试用期事件
初始优惠事件
转换的试用期事件
转换的优惠事件
退回的试用事件
退回的优惠事件
退回的订阅事件
续订的订阅事件
从重试失败的订阅事件
从重试事件中失败的商品报价
从重试事件中失败的商品试用
失败的订阅事件
失败的报价事件
失败的商品试用事件
重新激活的订阅事件
从重试事件中续订的订阅
从重试事件中转换的商品报价
从重试事件中转换的商品试用
退订事件
预定义事件参数 JS
每个事件都可以通过自定义事件参数进行扩展。通过调用 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);
自定义事件 JS
如果以上事件功能仍然不能满足您的需求,您可以通过扩展 Event
类来覆盖缺失的字段
class MyCustomEvent extends Event {
constructor(args) {
super('MyCustom', args)
}
}