Affise Attribution iOS 库
Pod | 版本 |
---|---|
AffiseAttributionLib | 1.6.1 |
AffiseSKAdNetwork | 1.6.1 |
描述
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
})
配置您的应用程序以将postback副本发送到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
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
LIFETIMESESSION_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];
}
使用以上示例,您可以实现其他事件
达到级别
添加支付信息
添加到购物车
添加到愿望单
点击广告
完成注册
完成流媒体
完成试用
完成教程
联系
内容项查看
定制产品
深度链接
捐赠
查找位置
开始结账
开始购买
开始流媒体
邀请
最后归因触摸
潜在客户
查看列表
登录
从推送通知打开
购买
评分
重新参与
预订
销售
日程
搜索
分享
花费积分
开始注册
开始试用
开始教程
提交申请
订阅
预订旅行
解锁成就
取消订阅
更新
查看广告
查看购物车
查看内容
查看商品
查看商品列表
初始订阅
初始试用
初始优惠
转化试用
转化优惠
重试试用
重试优惠
重试订阅
续订订阅
重试失败的订阅
重试失败的优惠
重试失败的试用
失败的订阅
失败的优惠
失败的试用
重新激活订阅
重试续订订阅
重试转化优惠
重试转化试用
取消订阅
自定义事件跟踪
如果默认事件不适用于您的场景,请使用任何自定义事件
CustomId01
CustomId02
CustomId03
CustomId04
CustomId05
CustomId06
CustomId07
CustomId08
CustomId09
CustomId10
预定义事件参数
为了丰富事件,您可以使用预定义参数处理大多数常见情况。将其添加到任何事件
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
,但还有许多其他选项可用
预定义参数 | 类型 |
---|---|
预定义String | 字符串 |
预定义Long | Int64 |
预定义Float | Float |
预定义Object | [(String, Any)] |
预定义ListObject | [[(String, Any)]] |
预定义ListString | [String] |
预定义字符串
ADREV_AD_TYPE
CITY
COUNTRY
REGION
CLASS
CONTENT_ID
CONTENT_TYPE
CURRENCY
CUSTOMER_USER_ID
DESCRIPTION
DESTINATION_A
DESTINATION_B
DESTINATION_LIST
ORDER_ID
PAYMENT_INFO_AVAILABLE
PREFERRED_NEIGHBORHOODS
PURCHASE_CURRENCY
RECEIPT_ID
REGISTRATION_METHOD
SEARCH_STRING
SUBSCRIPTION_ID
SUCCESS
SUGGESTED_DESTINATIONS
SUGGESTED_HOTELS
VALIDATED
ACHIEVEMENT_ID
COUPON_CODE
CUSTOMER_SEGMENT
DEEP_LINK
NEW_VERSION
旧版本
参数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
}
在Info.plist
中添加键CFBundleURLTypes
。
示例: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传递的默认事件
AchieveLevelEvent
AddPaymentInfoEvent
AddToCartEvent
AddToWishlistEvent
ClickAdvEvent
CompleteRegistrationEvent
CompleteStreamEvent
CompleteTrialEvent
CompleteTutorialEvent
ContactEvent
ContentItemsViewEvent
CustomId01Event
CustomId02Event
CustomId03Event
CustomId04Event
CustomId05Event
CustomId06Event
CustomId07Event
CustomId08Event
CustomId09Event
CustomId10Event
CustomizeProductEvent
DeepLinkedEvent
DonateEvent
FindLocationEvent
InitiateCheckoutEvent
InitiatePurchaseEvent
InitiateStreamEvent
InviteEvent
LastAttributedTouchEvent
LeadEvent
ListViewEvent
LoginEvent
OpenedFromPushNotificationEvent
PurchaseEvent
RateEvent
ReEngageEvent
ReserveEvent
SalesEvent
ScheduleEvent
SearchEvent
ShareEvent
SpendCreditsEvent
StartRegistrationEvent
StartTrialEvent
StartTutorialEvent
SubmitApplicationEvent
SubscribeEvent
TravelBookingEvent
UnlockAchievementEvent
UnsubscribeEvent
UpdateEvent
ViewAdvEvent
ViewCartEvent
ViewContentEvent
ViewItemEvent
ViewItemsEvent
InitialSubscriptionEvent
InitialTrialEvent
InitialOfferEvent
ConvertedTrialEvent
ConvertedOfferEvent
TrialInRetryEvent
OfferInRetryEvent
SubscriptionInRetryEvent
RenewedSubscriptionEvent
FailedSubscriptionFromRetryEvent
FailedOfferFromRetryEvent
FailedTrialFromRetryEvent
FailedSubscriptionEvent
FailedOfferiseEvent
FailedTrialEvent
ReactivatedSubscriptionEvent
RenewedSubscriptionFromRetryEvent
ConvertedOfferFromRetryEvent
ConvertedTrialFromRetryEvent
UnsubscriptionEvent
预定义事件参数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)
}
}