Android SDK
- 1. SDK Stats
- 2. Integration Steps:
- 3. Installation
- 4. Usage
- 5. Wunderkind SDK Reference
- 6. Upgrade the Wunderkind-SDK
- 7. Change Log
- 8. License
1. SDK Stats
Minimum Android Studio Version: 3.3.2+
Minimum Android Version: 5.0+ (API 21+)
SDK Current Version: 1.4.0
2. Integration Steps
- Follow the steps in the Installation section to include the Wunderkind MSDK in your project.
- Initialize the Wunderkind MSDK in your project with the steps defined under the Usage section.
- Replace
WEBSITE_ID
with your website ID in the main SDK'sinitialize
function and make sure to setisDebugMode
flag to true both in development and testing environments.
3. Installation
⚠️Before proceeding further please ensure that you have a corresponding permission for “Google Advertising Id” (AdId) if your Android application project targets latest Android SDK 33.
Such a permission should be set in app’s AndroidManifest.xml
file:<uses-permission android:name="com.google.android.gms.permission.AD_ID"/>
If you decide to opt-out of Ad Id tracking, please refer to corresponding section below.
The Wunderkind SDK supports multiple methods for installing into a project. Two have been listed here (Direct adding AAR and using Maven)
3.1 Direct adding AAR
- Navigate to project's
app
module and createlibs
directory. - Place your
.aar
(e.g.wunderkindsdk.aar
.) file in this directory. - In order to define a new repository which points to the
app
module'slibs
folder, please include the code below to theandroid
block of app level'sbuild.gradle
file:
repositories {
flatDir {
dirs 'libs'
}
}
- Include the code below to
dependencies
block or thebuild.gradle
file:
compile(name:' wunderkindsdk' , ext:'aar')
3.2 Using Maven
You’ll find below the steps required to install the Wunderkind SDK into your Android Studio project, using Maven repository, which are hosted in Google Platform's Artifact registry
- Navigate to
build.gradle
in application's module (by default it's inapp
folder) and add these lines:
android {
repositories {
maven {
url "https://us-central1-maven.pkg.dev/bx-production-coreapi/wunderkind-sdk-android"
}
}
}
- Add dependencies in the same app's
build.gradle
file
implementation "co.wunderkind.sdk:wunderkindsdk:1.4.0"
4. Usage
In order to allow your app to track events, please follow the steps highlighted in this section.
4.1 Import the Wunderkind SDK to your project.
import co.wunderkind.sdk.Wunderkind
4.2 SDK Initialization
Initialize SDK with your WEBSITE_ID (If you don't know your WEBSITE_ID , please contact our support team), and set a corresponding environment configuration isDebugMode (details below).
The initialization is mandatory. Failure to do so will result in the SDK being unable to track events properly. In most cases, this should be done in MainActivity / Application
💬
By default, debug mode is disabled and setting isDebugMode
to true
will allow you to verify events tracking functionality in a debug environment. Please make sure to set it to false
before deploying to production.
⚠️isDebugMode
must be set to false
before promoting to production.
public class MainActivity extends AppCompatActivity {
@Override
public void onCreate(@Nullable Bundle savedInstanceState, @Nullable PersistableBundle persistentState) {
super.onCreate(savedInstanceState, persistentState);
..
Wunderkind.getInstance().initialize(context: this, websiteId: WEBSITE_ID, isDebugMode: isDebugMode)
}
}
4.3 Opting Users Out of Tracking
Client-side tracking of user data may be enabled/disabled by controlling a userʼs opt-in/out state. The opt-in/out state of a user is controlled by an opt-out flag that affects on the user's device information.
💬 User information is tracked by default - A user must therefore explicitly opt-out to disable tracking.
4.3.1 Context Information Tracking
The Wunderkind SDK collects device/context specific information, which include
- Device Information:
- operating system name
- operating system version
- device model
- screen resolution
- device type
- App Information:
- installation date
- bundle identifier
- version number
- build number
Users may opt-in/out of context tracking and this may be set through the isContextInfoTrackingEnabled
property, which is enabled by default.
💬 Device/Context tracking is enabled by default.
Wunderkind.getInstance().setIsContextInfoTrackingEnabled(false)
4.4 Track Events
⚠️It’s imperative that SDK functions be only called once for a single application event. Duplicate calls may occur when using inheritance patterns and accidental calls to the same SDK functions from parent and child objects simultaneously.
💬 Please refer to the Wunderkind SDK Reference section to get more information on classes and types that are used in SDK's API.
💬 Underlying data points gathered by the Wunderkind SDK may be reviewed by using proxy applications such as Charles or Proxyman and through the use of request interceptions. This will help to validate that events are sent with the expected arguments provided via the API functions. Also note that events are sent to the backend every 1 minute.
Please also refer to the Logging section below to customize your project's debug logs section to review Wunderkind SDK's expected results (initialization result, events saving and sending response).
The following is a list of public functions in Wunderkind class that can be used for tracking events.
4.4.1 Screen view event
Overview
This event should be triggered when a user navigates to a new screen, within the app.
Wunderkind.getInstance().trackScreenView(@NotNull String url, @NotNull ScreenType type)
💬 url
property is required to be non-null otherwise this event will not be tracked. If you cannot provide corresponding screen's URL, please use your default home webpage URL.
💬 type
is a required Enum. There is no need to call trackScreenView if the page does not fall into one of the Enum's types.
⚠️This event should only be called once per page navigation. We recommend calling trackScreenView
API when the page is presented to the user (onResume
), and not when page is initialized (onCreate
, etc.).
Example Implementation:
public class HomeActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
URL url = null;
try {
// Pass here screen's URL or your default home webpage URL.
url = new URL("https://www.your-webpage.com/search");
} catch (MalformedURLException e) {
e.printStackTrace();
return;
}
wunderkind.getInstance().trackScreenView(url, ScreenType.SEARCH);
}
}
4.4.2 Empty cart event
Overview
This event should be triggered when a user empties a cart.
⚠️This event should only be triggered when a user has items in their cart and empties it. Not every time a user opens their empty cart.
Wunderkind.getInstance().trackEmptyCart()
Example Implementation:
public class CartActivity extends AppCompatActivity {
protected void cartBecameEmpty() {
// This event should only be triggered when a user has items in their cart and empties it.
// Not every time a user opens their empty cart.
wunderkind.getInstance().trackEmptyCart();
}
}
4.4.3 View item event
Overview
This event should be triggered when a user views an item.
Wunderkind.getInstance().trackViewItem(@NotNull String itemId, @NotNull String groupId)
💬 itemId
and groupId
properties are required to be non-empty otherwise this event will not be tracked.groupId
represents a group of similar items. For example, a shirt will have the same groupId
for all variations of that shirt (different sizes/colors, etc). I.e. each size/color combo will have a different itemId
but the same groupId
.
💬 We recommend calling the trackViewItem
API when the product screen is presented to the user (onResume
), and not when screen is initialized (onCreate
, etc.).
Example Implementation:
public class ProductDetailsActivity extends AppCompatActivity {
@Override
protected void onResume() {
super.onResume();
// In the screenshot above the item id is equaled to 17727082
String itemId = "17727082";
// In the screenshot above the group id is equaled to "pin-dot-quilters-showcase-cotton-fabric"
String groupId = "pin-dot-quilters-showcase-cotton-fabric";
wunderkind.getInstance().trackViewItem(itemId, groupId);
}
}
4.4.4 Select SKU event
Overview
This event is triggered when a user selects specific product attributes (e.g. color, size, etc…) and contains SKU details that were selected.
Wunderkind.getInstance().trackSelectSku(@NotNull String groupId, @NotNull String feedId)
💬 groupId
, feedId
properties are required to be non-empty otherwise this event will not be tracked.groupId
represents a group of similar items. For example, a shirt will have the same groupId
for all variations of that shirt (different sizes/colors, etc). I.e. each size/color combo will have a different feedId
but the same groupId
.
Example Implementation:
public class ProductDetailsActivity extends AppCompatActivity {
protected void userSelectedProductSize(ProductSize size) {
// In the screenshot above the group id is equaled to 2000469213
String groupId = "2000469213";
// In the screenshot above the feed id is equaled to 20004692130203
// In this example feedId = 2000469213 (groupId) + 02 (color) + 03 (size)
String feedId = "20004692130203";
wunderkind.getInstance().trackSelectSku(groupId, feedId);
}
}
4.4.5 Add to cart event
Overview
This event is triggered when a user adds an item to their cart.
Wunderkind.getInstance().trackAddToCart(@NotNull String itemId)
💬 itemId
property is required to be non-empty otherwise this event will not be tracked.
Example Implementation:
public class ProductDetailsActivity extends AppCompatActivity {
protected void onAddToCartTap() {
// In the screenshot above the item id is equaled to 17727082
String itemId = "17727082";
wunderkind.getInstance().trackAddToCart(itemId);
}
}
4.4.6 View category event
Overview
This event is triggered when a user views the category screen.
Wunderkind.getInstance().trackViewCategory(@NotNull ProductCategory category)
💬 category
property is required to be non-null otherwise this event will not be tracked. If you cannot provide corresponding category’s URL, please pass your default home webpage URL.
Please refer to Product Category section to learn more about expected types and values to be sent.
Example Implementation:
public class ProductsListFromCategoryActivity extends AppCompatActivity {
protected void productsLoaded(List<Product> items) {
// In the screenshot above leaf category name is "Fine"
String categoryTitle = "17727082";
// Getting category URL
URL categoryUrl = null;
try {
// Pass here category's URL or your default home webpage URL.
categoryUrl = new URL("https://www.your-webpage.com/top-level-category/leaf-category");
} catch (MalformedURLException e) {
e.printStackTrace();
return;
}
// Pass here a list of item ids that are part of selected category
List<String> itemIds = items.forEach(..); // retrieve products' ids
ProductCategory wunderkindCategory = new ProductCategory(categoryTitle, categoryUrl, itemIds);
wunderkind.getInstance().trackViewCategory(wunderkindCategory);
}
}
4.4.7 View search event
Overview
This event is triggered when a user views a search results screen.
Wunderkind.getInstance().trackViewSearch(@NotNull ProductCategory category)
💬 category
property is required to be non-null otherwise this event will not be tracked. If you cannot provide corresponding category’s URL, please pass your default home webpage URL.
Please refer to Product Category section to learn more about expected types and values to be sent.
Example Implementation:
public class ProductsListFromSearchActivity extends AppCompatActivity {
protected void productsLoaded(List<Product> items) {
// In the screenshot above leaf category name is "Fine"
String searchInput = "coconut";
// Getting search URL
URL searchUrl = null;
try {
// Pass here search results URL or your default home webpage URL.
searchUrl = new URL("https://www.your-webpage.com/search?input=coconut");
} catch (MalformedURLException e) {
e.printStackTrace();
return;
}
// Pass here a list of item ids in the search result
List<String> itemIds = items.forEach(..); // retrieve products' ids
ProductCategory wunderkindCategory = new ProductCategory(searchInput, searchUrl, itemIds);
wunderkind.getInstance().trackViewCategory(wunderkindCategory);
}
}
4.4.8 Logged in event
Overview
This event is triggered when a user explicitly successfully signed in to their app. This event is also triggered when a user signed up to their app.
Wunderkind.getInstance().trackLoggedIn(@NotNull String email, @NotNull Long phone)
💬 email
property is required to be non-empty otherwise this event will not be tracked.
💬Please pass phone
in the following format (country code)(phone number)
Example: 13305851212
Example Implementation:
public class LogInActivity extends AppCompatActivity {
protected void onSuccessfulLogin() {
wunderkind.getInstance().trackLoggedIn(email, phone);
}
}
4.4.9 LoggedOut Event
Overview
This event is called when a user logs out of the application.
Wunderkind.getInstance().trackLoggedOut()
Example Implementation:
public class LogoutActivity extends AppCompatActivity {
protected void onSuccessfulLogout() {
wunderkind.getInstance().trackLoggedOut();
}
}
4.4.10 Text Opt In Event
Overview
This event is triggered when a user opts in to text messaging.
💬 Pass null for launguageCode, unless the desired language is French then pass a String with value "fr"
💬Please pass phone
in the following format (country code)(phone number)
Example: 13305851212
Wunderkind.getInstance().trackTextOptIn(phoneNumber: Long, languageCode: String?);
Example Implementation:
public class CheckoutActivity extends AppCompatActivity {
protected void onTextMessageOptedIn(givenPhoneNumber: Long, selectedLanguage: String?) {
if (selectedLanguage == "french"){
Wunderkind.getInstance().trackTextOptIn(phoneNumber: givenPhoneNumber, languageCode: "fr")
}
else {
Wunderkind.getInstance().trackTextOptIn(phoneNumber: givenPhoneNumber, languageCode: null)
}
}
4.4.11 Purchase event
Overview
This event is triggered when a user purchases an item and completes their order.
Wunderkind.getInstance().trackPurchase(@NotNull Order order)
💬 order
property is required to be non-null otherwise this event will not be tracked.
⚠️Please note that due to the importance of the Purchase event, it’s imperative that all of its attributes (Invoice, Customer, Product, Order) be correctly set.
⚠️Should purchase event attributes not be entered correctly, the following error may be generated in your project’s logs:Unfortunately, event "Purchase" hasn't been tracked since you have provided a nullable parameter or a not valid one.
Unfortunately, event "Purchase" hasn't been tracked since you have provided a nullable parameter or a not valid one.
Example Implementation:
public class CheckoutActivity extends AppCompatActivity {
protected void onSuccessfulPurchase() {
List<String> couponList = new ArrayList<>();
couponList.add("TestCoupon");
List<Product> products = new ArrayList<>();
Double price = 10.0;
Long quantity = 1L;
products.add(new Product("PRODUCT-ID" , "SKU-ID" , price, quantity));
Double amount = 100.0;
Double tax = 10.0;
Double shipping = 10.0;
Double totalDiscount = 10.0;
String paymentMethod = "Visa Card";
String customerEmail = "test@java.com";
String customerPhone = 12223334445;
String goal = "purchase";
Order order = new Order("TestOrderId" ,
new Invoice(amount, tax, shipping, totalDiscount, Currency.USD),
paymentMethod,
products,
Customer.createCustomer(customerEmail, customerPhone),
couponList,
goal
);
Wunderkind.getInstance().trackPurchase(order);
}
}
4.5 Logging
The Wunderkind SDK provides logging capabilities in order to report on events collected and are useful to validate user data.
Setting logLevel
property to debug
will allow you to trace data going through the Wunderkind SDK.
Wunderkind.getInstance().setLogLevel(LogLevel.DEBUG);
Setting logLevel
property to none
will allow you to disable logging.
Wunderkind.getInstance().setLogLevel(LogLevel.NONE);
💬 logLevel
default value is info
, which notifies you about events deemed to be important (Activation, Validation Errors, etc.)
5. Wunderkind SDK Reference
5.1 Classes
Product Category
ProductCategory(
val title: String,
val url: URL,
val itemIds: List<String>
)
💬 title
, url
, itemIds
properties are required to be non-empty, non-null and non-null, respectively. Failure to do so will prevent Wunderkind from tracking this event.
Note: If you cannot provide corresponding product category's URL, please pass your default home webpage URL.
Invoice
Invoice(
val amount: Double,
val tax: Double,
val shipping: Double,
val totalDiscount: Double?,
val currency: Currency,
)
💬amount
, tax
, shipping
properties are required to be greater than or equal to 0.0 otherwise this event will not be tracked. Also, iftotalDiscount
property is not null, it must be greater than or equal to 0.0.
Customer
Customer.createCustomer(
val email: String,
val phone: Long
)
💬 email
is required to be non-empty otherwise this event will not be tracked. phone
is optional, email
is required.
💬 Please pass phone
in the following format (country code)(phone number)
Example: 13305851212
Product
Product(
val productId: String,
val skuId: String,
val price: Double,
val quantity: Long
)
💬 productId
, skuId
properties are required to be non-empty and price
, quantity
properties are required to be greater than or equal to 0 otherwise this event will not be tracked.
Order
Order(
val orderId: String,
val invoice: Invoice,
val paymentMethod: String?,
val products: List<Product>,
val customer: Customer,
val coupons: List<String>?,
val goal: String
)
💬 orderId
, goal
, products
properties are required to be non-empty otherwise this event will not be tracked. Also, if paymentMethod
or coupons
properties are not null, they must be non-empty.
5.2 Enums
Screen Type
enum class ScreenType {
HOME,
PRODUCT,
CATEGORY,
SEARCH,
CART,
ARTICLE,
GALLERY,
CHECKOUT
}
Currency
enum Currency: Int {
case USD
case KRW
case AED
case LTL
case ARS
case MAD
case AUD
case MXN
case BGN
case MYR
case BOB
case NOK
case BRL
case NZD
case CAD
case PEN
case CHF
case PHP
case CLP
case PKR
case CNY
case PLN
case COP
case RON
case CZK
case RSD
case DKK
case RUB
case EGP
case SAR
case EUR
case SEK
case GBP
case SGD
case HKD
case THB
case HRK
case TRY
case HUF
case TWD
case IDR
case UAH
case ILS
case VEF
case INR
case VND
case JPY
case ZAR
}
LogLevel
enum LogLevel: Int {
case none
case debug
case info
}
6. Upgrade the Wunderkind-SDK
💬 To upgrade the Wunderkind-SDK please follow the steps in Installation Modifications, as well as incorporating any necessary Code Modifications that have been released since the currently implemented version in your app. Latest Wunderkind-SDK version: 1.4.0
Podfile Modification
Maven Installation
If the Wunderkind SDK was installed using Maven, please navigate to the app's build.gradle
file and change the version to 1.4.0.
implementation "co.wunderkind.sdk:wunderkindsdk:1.4.0"
AAR Installation
If the Wunderkind SDK was installed manually using AAR, please follow the steps again to get the latest wunderkindsdk.aar
file added.
Code Modifications
⚡️1.4.0
Modifiable Variables removed
Any code referenced below should be omitted.
Wunderkind.visitSessionInterval
Wunderkind.setMetricsInterval
Phone now Long
phone
should be passed as an Long to ensure proper handling in all methods.
⚠️ Ifphone
is deemed not valid they will not be tracked
and the below warning log will be emitted-
Unfortunately, eventName hasn't been tracked since you
have provided a nullable parameter or a not valid one.
Please update all methods including Login, Conversion, and TextOptIn Events.
Customer changes
This parameter can be removed, if sending hashed data use refer to our hashed guide.
Customer
must now be created using Customer.createCustomer()
.
Existing LoggedIn and LoginMethod removed
Any LoggedIn functions involving Existing and LoginMethod have been removed, please remove these functions and replace with the corresponding function. Some of these include
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackAffiliateHashedLoggedIn(email:affiliateNumber
public void trackAffiliateHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull String
trackLoggedInEvent(email,true, false, phone, null, affiliateNumber);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackAffiliateHashedLoggedIn(email:affiliateNumber:
public void trackAffiliateHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull String
trackLoggedInEvent(email,true, false, null, null, affiliateNumber);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackHashedLoggedIn(email:accountType:) instead"
public void trackHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull AccountType acc
trackLoggedInEvent(email,true, false, null, accountType, null);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackHashedLoggedIn(email:) instead" , replaceWit
public void trackHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method) {
trackLoggedInEvent(email, true, false, null, null, null);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackAffiliateLoggedIn(email:affiliateNumber:acc
public void trackAffiliateLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull String affil
trackLoggedInEvent(email, false, false, null, accountType, affiliateNumber);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackLoggedIn(email:) instead" , replaceWith = @
public void trackLoggedIn(@NotNull String email, @NotNull LoginMethod method) {
trackLoggedInEvent(email, false, false, null, null, null);
}
Example:
Wunderkind.trackLoggedIn("testemail@gmail.com" , LoginMethod.Twitter)
->
Wunderkind.trackLoggedIn("testemail@gmail.com")
⚡️ 1.3.4
Location Tracking
Location Tracking has been removed, any code referenced below can be omitted.
Wunderkind.setIsLocationTrackingEnabled(Boolean)
AAID Tracking
AAID Tracking has been removed, any code referenced below can be omitted.
Wunderkind.setIsAAIDTrackingEnabled(Boolean)
⚡️ 1.2.5
Any LoggedIn functions involving Existing and LoginMethod have been marked for deprecation, please remove these functions and replace with the corresponding function. Some of these include
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackAffiliateHashedLoggedIn(email:affiliateNumber
public void trackAffiliateHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull String
trackLoggedInEvent(email,true, false, phone, null, affiliateNumber);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackAffiliateHashedLoggedIn(email:affiliateNumber:
public void trackAffiliateHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull String
trackLoggedInEvent(email,true, false, null, null, affiliateNumber);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackHashedLoggedIn(email:accountType:) instead"
public void trackHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull AccountType acc
trackLoggedInEvent(email,true, false, null, accountType, null);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackHashedLoggedIn(email:) instead" , replaceWit
public void trackHashedLoggedIn(@NotNull String email, @NotNull LoginMethod method) {
trackLoggedInEvent(email, true, false, null, null, null);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackAffiliateLoggedIn(email:affiliateNumber:acc
public void trackAffiliateLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull String affil
trackLoggedInEvent(email, false, false, null, accountType, affiliateNumber);
}
---------
@Deprecated(level = DeprecationLevel.WARNING, message = "Use trackLoggedIn(email:) instead" , replaceWith = @
public void trackLoggedIn(@NotNull String email, @NotNull LoginMethod method) {
trackLoggedInEvent(email, false, false, null, null, null);
}
Example:
Wunderkind.trackLoggedIn("testemail@gmail.com" , LoginMethod.Twitter)
->
Wunderkind.trackLoggedIn("testemail@gmail.com")
⚡️ 1.2.0
- Please ensure the trigger of a TextOptIn Event when a user opts into text messaging.
- Please input the phone parameter to LoggedIn Event.
Text Opt In Event
Overview
This event is triggered when a user opts in to text messaging.
💬 Pass null for launguageCode, unless the desired language is French then pass a String with value fr
Wunderkind.getInstance().trackTextOptIn(phoneNumber: String, languageCode: String?);
Example Implementation:
public class CheckoutActivity extends AppCompatActivity {
protected void onTextMessageOptedIn(givenPhoneNumber: String, selectedLanguage: String?) {
if (selectedLanguage == "french"){
Wunderkind.getInstance().trackTextOptIn(phoneNumber: givenPhoneNumber, languageCode: "fr")
}
else {
Wunderkind.getInstance().trackTextOptIn(phoneNumber: givenPhoneNumber, languageCode: null)
}
}
LoggedIn/ExistingLoggedIn Event- Phone Parameter
Overview
Please include the new phone parameter on trackLoggedIn events.
Wunderkind.getInstance().trackLoggedIn(@NotNull String email, @NotNull LoginMethod method, @NotNull String phone)
Example Implementation:
public class LogInActivity extends AppCompatActivity {
protected void onSuccessfulLogin() {
Wunder.getInstance().trackLoggedIn(email, LoginMethod.GOOGL
}
}
7. Change Log
Version | Release Date | Details |
---|---|---|
1.4.0 | 08.12.2024 |
|
1.3.4 | 05.20.2024 | • Location/AAID tracking Removed |
1.3.3 | 05.01.2024 | • Internal SDK's fixes and improvements. |
1.2.5 | 02.27.2024 | • Remove LoginMethod Parameter, ExistingLoggedIn Methods |
1.2.0 | 01.10.2024 | • New events: TextOptIn, Loggedin- Phone Parameter. |
1.1.0 | 10.10.2023 | • New event: LoggedOut. |
1.0.8 | 04.19.2023 | • Internal SDK's fixes and improvements. |
1.0.7 | 01.10.2023 | • Internal SDK's fixes and improvements. |
1.0.6 | 10.05.2022 | • Internal SDK's fixes and improvements. |
1.0.5 | 09.12.2022 | • Internal SDK's fixes and improvements. |
1.0.4 | 08.23.2022 | • ScreenType is required for ScreenView Event. • trackExistingLoggedIn event endpoint created. • Checkout ScreenType added. |
1.0.3 | 03.31.2022 | • Internal SDK's fixes and improvements. |
1.0.2 | 01.26.2022 | • Fixes bug related to public property Wunderkind.sdkVersion. • Slightly updates events payload and dispatch functionality. • Fixes minimum deployment target warning message. • Updates framework's name from Wunderkind to WunderkindKit. |
1.0.1 | 08.27.2021 | • Decreases minimum deployment target to 11.0. • Increases test coverage. |
1.0.0 | 07.07.2021 | • Initial Wunderkind SDK release. |
8. License
Distributed under the MIT License. To view the full license, visit http://www.wunderkind.co/legal/sdklicense-agreement