AffiseAttributionLib 1.6.39

AffiseAttributionLib 1.6.39

维护者:Sergey Korney.



  • 作者
  • Affise

Affise Attribution iOS Library(Affise 推广跟踪 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
})

配置您的应用以向 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.DESCRIPTIONPredefinedObject.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)
    }
}