AffiseInternal 1.6.39

AffiseInternal 1.6.39

Sergey Korney 维护。



 
依赖
AffiseAttributionLib= 1.6.39
AffiseSKAdNetwork= 1.6.39
 

  • Affise

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.DESCRIPTIONPredefinedObject.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)
    }
}