Skip to content

WebView tracking

The Affise SDK ships a JavaScript bridge (attribution/src/main/assets/affise.js) that mirrors the native events API. Register a WebView with the SDK and you can fire events directly from HTML/JS.

Native API:

  • Affise.registerWebView(webView: WebView) (attribution/src/main/java/com/affise/attribution/Affise.kt:55-58)
  • Affise.unregisterWebView() (Affise.kt:63-66)
// retrieve WebView from view hierarchy
val webView = findViewById<WebView>(R.Id.your_webview_id)
// make sure javascript is enabled
webView.javaScriptEnabled = true
// initialize WebView with Affise native library
Affise.registerWebView(webView)

Inside the registered WebView, Affise event classes are available in JavaScript. A demo lives at app/src/main/assets/index.html; the bridge is attribution/src/main/assets/affise.js.

let data = { card: 4138, type: 'phone' };
new AddPaymentInfoEvent({
userData: 'taxi',
})
.addPredefinedParameter(PredefinedString.PURCHASE_CURRENCY, 'USD')
.addPredefinedParameter(PredefinedObject.CONTENT, data)
.addPredefinedParameter(PredefinedFloat.PRICE, 2.19)
.send(); // Send event

The JS bridge exposes the same predefined event classes as the native SDK, including all CustomId01EventCustomId10Event and all subscription lifecycle events. Full list:. Examples:

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

Subscription lifecycle: InitialSubscriptionEvent, InitialTrialEvent, InitialOfferEvent, ConvertedTrialEvent, ConvertedOfferEvent, TrialInRetryEvent, OfferInRetryEvent, SubscriptionInRetryEvent, RenewedSubscriptionEvent, FailedSubscriptionFromRetryEvent, FailedOfferFromRetryEvent, FailedTrialFromRetryEvent, FailedSubscriptionEvent, FailedOfferiseEvent, FailedTrialEvent, ReactivatedSubscriptionEvent, RenewedSubscriptionFromRetryEvent, ConvertedOfferFromRetryEvent, ConvertedTrialFromRetryEvent, UnsubscriptionEvent.

let event = ...
event
.addPredefinedParameter(PredefinedString.PURCHASE_CURRENCY, 'USD')
.addPredefinedParameter(PredefinedFloat.PRICE, 2.19)
.addPredefinedParameter(PredefinedLong.QUANTITY, 1)
.addPredefinedParameter(PredefinedObject.CONTENT, { card: 4138, type: 'phone' })
.addPredefinedParameter(PredefinedListObject.CONTENT_LIST, [{content:'songs'}, {content:'videos'}])
.send(); // Send event

Source:. See Events tracking for the full list of PredefinedString / PredefinedLong / PredefinedFloat / PredefinedObject / PredefinedListObject / PredefinedListString values.

Extend the base Event class to add your own event name:

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