Affise Attribution iOS 库
Pod | 版本 |
---|---|
AffiseAttributionLib | 1.6.2 |
AffiseSKAdNetwork | 1.6.2 |
描述
Affise SDK 是一款可以用于收集应用使用统计、设备标识、深度链接使用情况以及跟踪安装推荐者的软件。
快速开始
集成
作为 Cocoapods 集成
使用 Cocoapods 添加 SDK 时,在 Podfile 中指定你想要使用的版本
// Get pod from repository
pod 'AffiseAttributionLib', '~> 1.6.2'
// Get source directly from GitHub
pod 'AffiseAttributionLib', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.2'
初始化
将库添加为依赖项后,与 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.2'
// Get source directly from GitHub
pod 'AffiseSKAdNetwork', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.2'
用于
对于 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
,但还有许多其他参数可供选择
预定义参数 | 类型 |
---|---|
预定义字符串 | 字符串 |
预定义长整型 | Int64 |
预定义浮点型 | 浮点数 |
预定义对象 | [(字符串,任何内容)] |
预定义列表对象 | [[(字符串,任何内容)]] |
预定义字符串列表 | [字符串] |
预定义字符串
ADREV_AD_TYPE
城市
COUNTRY
REGION
类别
内容ID
内容类型
货币
客户用户ID
描述
目的地A
目的地B
目的地列表
订单ID
可用支付信息
首选社区
购买货币
收据ID
注册方法
搜索字符串
订阅ID
成功
建议目的地
建议酒店
已验证
成就ID
优惠券代码
客户细分
深层链接
新版本
旧版本
参数01
参数02
参数03
参数04
参数05
参数06
参数07
参数08
参数09
参数10
评论文本
教程ID
虚拟货币名称
状态
预定义长整数
日期A
日期B
出发到达日期
出发日期和离开日期
酒店评分
等级
最高评分值
成人数量
儿童数量
婴儿数量
首选停留次数
首选星级评级
数量
评分值
返回到达日期
返回出发日期
得分
旅行开始
旅行结束
用户得分
事件开始
事件结束
预定义浮点数
首选价格范围
价格
收入
纬度
经度
预定义对象
内容
预定义列表对象
内容列表
预定义列表字符串
内容标识符
事件缓冲
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)
}
}