AffiseModule 1.6.39

AffiseModule 1.6.39

Sergey Korney 管理。



  • Affise

Affise Attribution iOS 库

Pod 版本
AffiseAttributionLib 1.6.9
AffiseSKAdNetwork 1.6.9
AffiseModule/Status 1.6.9

描述

Affise SDK 是一种软件,您可以使用它来收集应用程序使用统计信息、设备标识符、deeplink 使用情况以及跟踪安装推荐者。

快速开始

集成

作为CocoaPods进行集成

使用CocoaPods添加SDK时,请在Podfile中指定要使用的版本。

# Affise SDK library
pod 'AffiseAttributionLib', '~> 1.6.9'
# Affise module
pod 'AffiseModule/Status', '~> 1.6.9'

直接从GitHub获取源代码

# Affise SDK library
pod 'AffiseAttributionLib', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.9'
# Affise module
pod 'AffiseModule/Status', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.9'

初始化

将库作为依赖项添加后,与gradle文件同步项目并初始化。

用于Swift

演示应用 AppDelegate.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

演示应用 AppDelegate.m

#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

检查库是否已初始化

Affise.shared.isInitialized()

StoreKit广告网络

使用CocoaPods添加SDK时,请在Podfile中指定要使用的版本。

# Wrapper for StoreKit Ad Network 
pod 'AffiseSKAdNetwork', '~> 1.6.9'

直接从GitHub获取源代码

# Wrapper for StoreKit Ad Network 
pod 'AffiseSKAdNetwork', :git => 'https://github.com/affise/sdk-ios.git', :tag => '1.6.9'

使用范围

针对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

将键 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
  • APP_VERSION
  • APP_VERSION_RAW
  • STORE
  • 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
  • 标签
  • AFFISE_SDK_SECRET_ID
  • UUID
  • AFFISE_APP_OPENED
  • PUSHTOKEN
  • 事件
  • AFFISE事件计数

事件跟踪

例如,我们想跟踪用户通常添加到购物车中的商品。要发送事件,首先要使用以下代码创建它

class Presenter {
    func onUserAddsItemsToCart(items: String) {
        let items = [
            ("items", "cookies, potato, milk")
        ]
        Affise.shared.sendEvent(event: AddToCartEvent("groceries")
            .addPredefinedParameter(PredefinedString.DESCRIPTION, string: "best before 2029")
            .addPredefinedParameter(PredefinedObject.CONTENT, object: items)
        )
    }
}

用于Objective-C

- (void)onUserAddsItemsToCart:(NSString *)itemsToCart {
    NSArray *items = @[
        @{"items", itemsToCart}
    ];

    Event *event = [[AddToCartEvent alloc] init:@"groceries"];
    [event addPredefinedParameter:PredefinedStringADREV_AD_TYPE value:@"best before 2029"];
    [event addPredefinedParameter:PredefinedObjectCONTENT object:items];

    [Affise.shared sendEventWithEvent: event];
}

使用上述示例,您可以实现其他事件

  • 达到等级
  • 添加支付信息
  • 添加到购物车
  • 添加到心愿单
  • 点击广告
  • 完成注册
  • 完成流媒体播放
  • 完成试用
  • 完成教程
  • 联系
  • 观看内容条目
  • 定制产品
  • DeepLinked
  • 捐款
  • 查找位置
  • 启动结账
  • 启动购买
  • 启动流
  • 邀请
  • 最后归因触摸
  • 潜在客户
  • 列表视图
  • 登录
  • 来自推送通知打开
  • 订单
  • 订单取消
  • 订单退货请求
  • 订单退货请求取消
  • 购买
  • 评分
  • 重新参与
  • 预订
  • 销售
  • 安排
  • 搜索
  • 分享
  • 消费积分
  • 开始注册
  • 开始试用
  • 开始教程
  • 提交申请
  • 订阅
  • 旅行预订
  • 解锁成就
  • 退订
  • 更新
  • 查看广告
  • 查看购物车
  • 查看内容
  • 查看商品
  • 查看商品列表
  • 初始订阅
  • 初始试用
  • 初始优惠
  • 已转换试用
  • 已转换优惠
  • 重试试用
  • 重试优惠
  • 重试订阅
  • 续订订阅
  • 重试失败订阅
  • 重试失败优惠
  • 重试失败试用
  • 失败订阅
  • 失败优惠
  • 失败试用
  • 重新激活订阅
  • 重试续订订阅
  • 重试已转换优惠
  • 重试已转换试用
  • 退订

自定义事件跟踪

使用任何自定义事件,如果默认事件不符合您的场景

  • 自定义ID01
  • 自定义ID02
  • 自定义ID03
  • 自定义ID04
  • 自定义ID05
  • 自定义ID06
  • 自定义ID07
  • 自定义ID08
  • 自定义ID09
  • 自定义ID10

预定义事件参数

为了丰富您的事件并增加另一个维度,您可以使用预定义参数处理大多数常见情况。将其添加到任何事件中。

class Presenter {
    func onUserAddsItemsToCart(items: String) {
        let items = [
            ("items", "cookies, potato, milk")
        ]

        let addToCart = AddToCartEvent("groceries")
            .addPredefinedParameter(PredefinedString.DESCRIPTION, string: "best before 2029")
            .addPredefinedParameter(PredefinedObject.CONTENT, object: items)

        Affise.shared.sendEvent(event: addToCart)
    }
}

用于Objective-C

- (void)onUserAddsItemsToCart:(NSString *)itemsToCart {
    NSArray *items = @[
        @{"items", itemsToCart}
    ];

    Event *event = [[AddToCartEvent alloc] init:@"groceries"];
    [event addPredefinedParameter:PredefinedStringADREV_AD_TYPE value:@"best before 2029"];
    [event addPredefinedParameter:PredefinedObjectCONTENT object:items];

    [Affise.shared sendEventWithEvent: event];
}

在上面的示例中,《预定义参数.DESCRIPTION》和《预定义对象.CONTENT》已使用,但许多其他参数也可用。

预定义参数 类型
预定义字符串 字符串
预定义长整数 Int64
预定义浮点数 浮点数
预定义对象 [(字符串,任何)]
预定义列表对象 [[(字符串,任何)]]
预定义字符串列表 [字符串]

预定义字符串

  • 成就_ID
  • 广告类型
  • 品牌
  • 建筑
  • 目录_ID
  • 渠道类型
  • 城市
  • 类别
  • 内容_ID
  • 内容名称
  • 内容类型
  • 转换_ID
  • COUNTRY
  • 优惠券代码
  • 货币
  • 客户细分市场
  • 客户类型
  • 客户用户_ID
  • 深度链接
  • 描述
  • 目的地_A
  • 目的地_B
  • 目的地列表
  • 新版本
  • 旧版本
  • 订单_ID
  • 参数_01
  • 参数_02
  • 参数_03
  • 参数_04
  • 参数_05
  • 参数_06
  • 参数_07
  • 参数_08
  • 参数_09
  • 参数_10
  • 支付信息可用
  • 首选邻域
  • 产品_ID
  • 产品名称
  • 购买货币
  • 收据_ID
  • REGION
  • 注册方法
  • 评论文本
  • 搜索字符串
  • 细分市场
  • 状态
  • 订阅_ID
  • 成功
  • 建议目的地
  • 建议酒店
  • 教程_ID
  • UTM活动
  • UTM媒介
  • UTM来源
  • 验证
  • 垂直
  • 虚拟货币名称
  • 优惠券代码

预定义长数

  • 金额
  • 日期_A
  • 日期_B
  • 出发到达日期
  • 出发出发日期
  • 酒店评分
  • 等级
  • 最高评分值
  • 成人数量
  • 儿童数量
  • 婴儿数量
  • 偏好停靠次数
  • 偏好星级评分
  • 数量
  • 评分值
  • 返回到达日期
  • 返回出发日期
  • 评分
  • 旅游开始
  • 旅游结束
  • 用户评分
  • 事件开始
  • 事件结束

预定义浮点数

  • 首选价格范围
  • 价格
  • 收入
  • 纬度
  • 经度

预定义对象

  • 内容

预定义列表对象

  • 内容列表

预定义列表字符串

  • 内容ID

事件缓冲

Affise库将会在首次机会发送任何挂起的事件,但如果没有网络连接或设备被禁用,则事件将在本地保存7天后删除。

推送令牌跟踪

为了让Affise跟踪推送令牌,您需要从推送服务提供商接收它,并将其传递给Affise库。首先将Firebase集成到您的应用程序中,完成以下步骤:[Firebase文档](https://firebase.google.com/docs/cloud-messaging/ios/client)

完成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(pushToken: fcmToken)
}

重装/卸载跟踪

Affise通过使用静默推送技术自动跟踪重装事件,要使此功能生效,需在用户重置推送标记时及应用程序启动时传递推送标记。

Affise.share.addPushToken(pushToken: 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

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: webView)

下面描述了其他JavaScript环境功能。

事件跟踪JS

演示应用 app/app/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事件
  • 定制产品事件
  • 深度链接事件
  • 捐赠事件
  • 查找位置事件
  • 开始结账事件
  • 开始购买事件
  • 开始流媒体事件
  • 邀请事件
  • 最后 attributedtouchevent
  • 引荐事件
  • 列表视图事件
  • 登录事件
  • 从推送通知打开事件
  • 订单事件
  • 订单取消事件
  • 订单退货请求事件
  • 订单退货请求取消事件
  • 购买事件
  • 评分事件
  • 重新参与事件
  • 预订事件
  • 销售事件
  • 安排事件
  • 搜索事件
  • 分享事件
  • 消费点数事件
  • 开始注册事件
  • 开始试用事件
  • 开始教程事件
  • 提交申请事件
  • 订阅事件
  • 旅行预订事件
  • 解锁成就事件
  • 退订事件
  • 更新事件
  • 观看广告事件
  • 查看购物车事件
  • 查看内容事件
  • 查看商品事件
  • 查看商品列表事件
  • 初始订阅事件
  • 初始试用事件
  • 初始出价事件
  • 转换试用事件
  • 转换出价事件
  • 重试试用事件
  • 重试出价事件
  • 重试订阅事件
  • 续订订阅事件
  • 重试失败订阅事件
  • 重试失败出价事件
  • 重试失败试用事件
  • 失败订阅事件
  • 失败出价事件
  • 失败试用事件
  • 重新激活订阅事件
  • 重试续订订阅事件
  • 重试转换出价事件
  • 重试转换试用事件
  • 取消订阅事件

JavaScript内置事件参数

每个事件都可以通过自定义事件参数进行扩展。通过调用 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);

JavaScript自定义事件

如果上述事件功能仍然无法满足您的需求,您总是可以扩展 Event 类来覆盖您缺失的字段

class MyCustomEvent extends Event {
    constructor(args) {
        super('MyCustom', args)
    }
}

自定义

ConversionId

添加3个内置字符串值:PredefinedString.CONVERSION_IDPredefinedString.ORDER_IDPredefinedString.PRODUCT_ID

CONVERSION_ID = ORDER_ID_PRODUCT_ID

let event = AddToCartEvent()

let conversionId = event.customPredefined().conversionId("ORDER_ID", "PRODUCT_ID")

Affise.shared.sendEvent(event: event)