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).
Event send control
Section titled “Event send control”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 = () -> Void—AffiseAttributionLib/Classes/events/OnSendSuccessCallback.swift:1public typealias OnSendFailedCallback = (_ status: HttpResponse) -> Void—AffiseAttributionLib/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 }Events tracking
Section titled “Events tracking”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 }}- (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]; // Send event [event send];}Predefined event classes
Section titled “Predefined event classes”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: CustomId01Event … CustomId10Event (AffiseAttributionLib/Classes/events/predefined/CustomId01Event.swift … CustomId10Event.swift).
Custom events
Section titled “Custom events”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 eventCustom IDs
Section titled “Custom IDs”The SDK also ships with ten canned custom-id events: CustomId01 … CustomId10.
Predefined event parameters
Section titled “Predefined event parameters”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 |
PredefinedString
Section titled “PredefinedString”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_01…PARAM_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.
PredefinedLong
Section titled “PredefinedLong”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.
PredefinedFloat
Section titled “PredefinedFloat”From AffiseAttributionLib/Classes/events/parameters/PredefinedFloat.swift:5-9:
PREFERRED_PRICE_RANGE, PRICE, REVENUE, LAT, LONG.
PredefinedObject
Section titled “PredefinedObject”CONTENT — AffiseAttributionLib/Classes/events/parameters/PredefinedObject.swift:5.
PredefinedListObject
Section titled “PredefinedListObject”CONTENT_LIST — AffiseAttributionLib/Classes/events/parameters/PredefinedListObject.swift:5.
PredefinedListString
Section titled “PredefinedListString”CONTENT_IDS — AffiseAttributionLib/Classes/events/parameters/PredefinedListString.swift:5.
Custom conversion id
Section titled “Custom conversion id”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()Events buffering
Section titled “Events buffering”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.