AffiseSKAdNetwork 1.6.39

AffiseSKAdNetwork 1.6.39

Sergey Korney 维护。



  • Affise

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