Skip to content

Events

All events extend @objc open class Event (AffiseAttributionLib/Classes/events/base/Event.swift:8). Predefined events additionally extend @objc open class NativeEvent : Event with init init(_ userData: String? = nil, timeStampMillis: Int64 = timestamp()) (AffiseAttributionLib/Classes/events/base/NativeEvent.swift:5-18).

Two @objc public methods on Event control delivery:

  • send()AffiseAttributionLib/Classes/events/base/Event.swift:129-132 — caches the event for scheduled batch send.
  • sendNow(_ success:, _ failed:)AffiseAttributionLib/Classes/events/base/Event.swift:137-140 — sends immediately.

Callback typealiases:

  • public typealias OnSendSuccessCallback = () -> VoidAffiseAttributionLib/Classes/events/OnSendSuccessCallback.swift:1
  • public typealias OnSendFailedCallback = (_ status: HttpResponse) -> VoidAffiseAttributionLib/Classes/events/OnSendFailedCallback.swift:1

Verbatim:

AddToCartEvent()
.send()
AddToCartEvent()
.sendNow({
// handle event send success
}) { errorResponse in
// handle event send failed
// 🟥Warning🟥: event is NOT cached for later send
}

Instantiate a predefined event class, attach parameters, and call .send().

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

All @objc public class ...Event : NativeEvent, located in AffiseAttributionLib/Classes/events/predefined/:

AchieveLevelEvent, AddPaymentInfoEvent, AddToCartEvent, AddToWishlistEvent, AdRevenueEvent, ClickAdvEvent, CompleteRegistrationEvent, CompleteStreamEvent, CompleteTrialEvent, CompleteTutorialEvent, ContactEvent, ContentItemsViewEvent, CustomizeProductEvent, DeepLinkedEvent, DonateEvent, FailedPurchaseEvent, FindLocationEvent, GDPREvent, InitiateCheckoutEvent, InitiatePurchaseEvent, InitiateStreamEvent, InviteEvent, LastAttributedTouchEvent, LeadEvent, ListViewEvent, LoginEvent, OpenedFromPushNotificationEvent, OrderCancelEvent, OrderEvent, OrderItemAddedEvent, OrderItemRemoveEvent, OrderReturnRequestCancelEvent, OrderReturnRequestEvent, PurchaseEvent, RateEvent, ReEngageEvent, ReserveEvent, SalesEvent, ScheduleEvent, SearchEvent, ShareEvent, SpendCreditsEvent, StartRegistrationEvent, StartTrialEvent, StartTutorialEvent, SubmitApplicationEvent, SubscribeEvent, TravelBookingEvent, UnlockAchievementEvent, UnsubscribeEvent, UpdateEvent, ViewAdvEvent, ViewCartEvent, ViewContentEvent, ViewItemEvent, ViewItemsEvent.

Subscription events (under AffiseAttributionLib/Classes/events/subscription/, all extending @objc open class BaseSubscriptionEvent : NativeEvent at BaseSubscriptionEvent.swift:7): InitialSubscriptionEvent, InitialTrialEvent, InitialOfferEvent, ConvertedTrialEvent, ConvertedOfferEvent, TrialInRetryEvent, OfferInRetryEvent, SubscriptionInRetryEvent, RenewedSubscriptionEvent, ConvertedTrialFromRetryEvent, ConvertedOfferFromRetryEvent, RenewedSubscriptionFromRetryEvent, FailedTrialEvent, FailedOfferiseEvent, FailedSubscriptionEvent, FailedTrialFromRetryEvent, FailedOfferFromRetryEvent, FailedSubscriptionFromRetryEvent, ReactivatedSubscriptionEvent, UnsubscriptionEvent.

Custom-ID helpers: CustomId01EventCustomId10Event (AffiseAttributionLib/Classes/events/predefined/CustomId01Event.swiftCustomId10Event.swift).

Use @objc open class UserCustomEvent : NativeEvent (AffiseAttributionLib/Classes/events/custom/UserCustomEvent.swift:11) with the init:

@objc public init(
eventName: String,
userData: String? = nil,
timeStampMillis: Int64 = timestamp(),
category: String? = nil
)

AffiseAttributionLib/Classes/events/custom/UserCustomEvent.swift:16-26.

There is also open class UserCustomSubscriptionEvent : BaseSubscriptionEvent (AffiseAttributionLib/Classes/events/custom/UserCustomSubscriptionEvent.swift:12) for subscription-style custom events.

Verbatim:

UserCustomEvent(eventName: "MyCustomEvent")
.addPredefinedParameter(PredefinedString.DESCRIPTION, string: "best before 2029")
.addPredefinedParameter(PredefinedObject.CONTENT, object: [
("collection", "Greatest Hits")
])
.send() // Send event

The SDK also ships with ten canned custom-id events: CustomId01CustomId10.

Every Predefined* enum implements public protocol Predefined { func value() -> String } (AffiseAttributionLib/Classes/events/parameters/Predefined.swift:1-3). Raw parameter keys use the prefix affise_p_ (Predefined.swift:6).

Event.addPredefinedParameter overloads — AffiseAttributionLib/Classes/events/base/Event.swift:63, 72, 81, 90, 98, 106, 113, 122.

| Enum | Value type | Source | |---|---|---| | PredefinedString | String | PredefinedString.swift:4 | | PredefinedLong | Int64 | PredefinedLong.swift:4 | | PredefinedFloat | Float | PredefinedFloat.swift:4 | | PredefinedObject | [(String, Any)] | PredefinedObject.swift:4 | | PredefinedListObject | [[(String, Any)]] | PredefinedListObject.swift:4 | | PredefinedListString | [String] | PredefinedListString.swift:4 |

From AffiseAttributionLib/Classes/events/parameters/PredefinedString.swift:5-75 (71 cases):

ACHIEVEMENT_ID, ADREV_AD_TYPE, BRAND, BRICK, CATALOGUE_ID, CHANNEL_TYPE, CITY, CLASS, CONTENT_ID, CONTENT_NAME, CONTENT_TYPE, CONVERSION_ID, COUNTRY, COUPON_CODE, CURRENCY, CUSTOMER_SEGMENT, CUSTOMER_TYPE, CUSTOMER_USER_ID, DEEP_LINK, DESCRIPTION, DESTINATION_A, DESTINATION_B, DESTINATION_LIST, EVENT_NAME, NETWORK, NEW_VERSION, OLD_VERSION, ORDER_ID, ORIGINAL_ORDER_ID, PARAM_01PARAM_10, PAYMENT_INFO_AVAILABLE, PID, PLACEMENT, PREFERRED_NEIGHBORHOODS, PRODUCT_ID, PRODUCT_NAME, PRODUCT_TYPE, PURCHASE_CURRENCY, RECEIPT_ID, REGION, REGISTRATION_METHOD, REVIEW_TEXT, SEARCH_STRING, SEGMENT, SOURCE, STATUS, SUBSCRIPTION_ID, SUBSCRIPTION_TYPE, SUCCESS, SUGGESTED_DESTINATIONS, SUGGESTED_HOTELS, TUTORIAL_ID, UNIT, UTM_CAMPAIGN, UTM_MEDIUM, UTM_SOURCE, VALIDATED, VERTICAL, VIRTUAL_CURRENCY_NAME, VOUCHER_CODE.

From AffiseAttributionLib/Classes/events/parameters/PredefinedLong.swift:5-27:

AMOUNT, DATE_A, DATE_B, DEPARTING_ARRIVAL_DATE, DEPARTING_DEPARTURE_DATE, HOTEL_SCORE, LEVEL, MAX_RATING_VALUE, NUM_ADULTS, NUM_CHILDREN, NUM_INFANTS, PREFERRED_NUM_STOPS, PREFERRED_STAR_RATINGS, QUANTITY, RATING_VALUE, RETURNING_ARRIVAL_DATE, RETURNING_DEPARTURE_DATE, SCORE, TRAVEL_START, TRAVEL_END, USER_SCORE, EVENT_START, EVENT_END.

From AffiseAttributionLib/Classes/events/parameters/PredefinedFloat.swift:5-9:

PREFERRED_PRICE_RANGE, PRICE, REVENUE, LAT, LONG.

CONTENTAffiseAttributionLib/Classes/events/parameters/PredefinedObject.swift:5.

CONTENT_LISTAffiseAttributionLib/Classes/events/parameters/PredefinedListObject.swift:5.

CONTENT_IDSAffiseAttributionLib/Classes/events/parameters/PredefinedListString.swift:5.

Event.customPredefined() returns a @objc public class PredefinedCustom (AffiseAttributionLib/Classes/events/base/Event.swift:167-170; class at AffiseAttributionLib/Classes/events/parameters/PredefinedCustom.swift:4). Its single method sets ORDER_ID, PRODUCT_ID, and a CONVERSION_ID of the form "<orderId>_<productId>":

@objc public func conversionId(_ orderId: String, _ productId: String) -> String

PredefinedCustom.swift:7.

Verbatim:

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

Verbatim:

Affise library will send any pending events with first opportunity, but if there is no network connection or device is disabled, events are kept locally for 7 days before deletion.

The scheduler lives in EventsManager (AffiseAttributionLib/Classes/events/EventsManager.swift:9) with TIME_SEND_REPEAT = 15 and SCHEDULER_SEND_REPEAT = 15 (lines 11, 13). The 7-day retention window is stated in README only.