You need to set Insider callbacks after the SDK initializes.
Method Signature
public void registerInsiderCallback(InsiderCallback callback)
// Callback Types
NOTIFICATION_OPEN
TEMP_STORE_CUSTOM_ACTION
INAPP_SEEN
INAPP_BUTTON_CLICK
TEMP_STORE_PURCHASE
TEMP_STORE_ADDED_TO_CART
INAPP_SEEN
fun registerInsiderCallback(callback: InsiderCallback)
// Callback Types
NOTIFICATION_OPEN
TEMP_STORE_CUSTOM_ACTION
INAPP_SEEN
INAPP_BUTTON_CLICK
TEMP_STORE_PURCHASE
TEMP_STORE_ADDED_TO_CART
INAPP_SEENMethod Example
Insider.Instance.registerInsiderCallback(new InsiderCallback() {
@Override
public void doAction(JSONObject data, InsiderCallbackType callbackType) {
switch (callbackType) {
case NOTIFICATION_OPEN:
Log.d("[INSIDER]", "[NOTIFICATION_OPEN]: " + data);
break;
case INAPP_SEEN:
Log.d("[INSIDER]", "[INAPP_SEEN]: " + data);
break;
case TEMP_STORE_CUSTOM_ACTION:
Log.d("[INSIDER]", "[TEMP_STORE_CUSTOM_ACTION]: " + data);
break;
case INAPP_BUTTON_CLICK:
Log.d("[INSIDER]", "[INAPP_BUTTON_CLICK]: " + data);
break;
case TEMP_STORE_PURCHASE:
Log.d("[INSIDER]", "[TEMP_STORE_PURCHASE]: " + data);
break;
case TEMP_STORE_ADDED_TO_CART:
Log.d("[INSIDER]", "[TEMP_STORE_ADDED_TO_CART]: " + data);
break;
case SESSION_STARTED:
Log.d("[INSIDER]", "[SESSION_STARTED]: " + data);
break;
}
}
});
Insider.Instance.registerInsiderCallback { data, callbackType ->
when (callbackType) {
InsiderCallbackType.NOTIFICATION_OPEN ->
Timber.tag("[INSIDER]").d("[NOTIFICATION_OPEN]: $data")
InsiderCallbackType.INAPP_SEEN ->
Timber.tag("[INSIDER]").d("[INAPP_BUTTON_CLICK]: $data")
InsiderCallbackType.TEMP_STORE_CUSTOM_ACTION ->
Timber.tag("[INSIDER]").d("[TEMP_STORE_CUSTOM_ACTION]: $data")
InsiderCallbackType.INAPP_BUTTON_CLICK -> Timber.tag("[INSIDER]")
.d("[INAPP_BUTTON_CLICK]: $data")
InsiderCallbackType.TEMP_STORE_PURCHASE -> Timber.tag("[INSIDER]")
.d("[TEMP_STORE_PURCHASE]: $data")
InsiderCallbackType.TEMP_STORE_ADDED_TO_CART -> Timber.tag("[INSIDER]")
.d("[TEMP_STORE_ADDED_TO_CART]: $data")
InsiderCallbackType.SESSION_STARTED -> Timber.tag("[INSIDER]")
.d("[SESSION_STARTED]: $data")
}
}
Insider callbacks, also known as "call-after" functions, help you retrieve useful data when necessary.
For example, let's take a look at the NotificationOpen callback. Say you have a push notification without a deep link. In this case, no callback will be fired. If you have a push notification with a key-value pair deep link, the NotificationOpen callback will be fired once you open the push notification.
The following are sample logs for different deep link types in app pushes and templates:
Key-Value Pair (Push)
[INSIDER][insiderCallbackTriggered] I Callback Type: NOTIFICATION_OPEN, Data:{
"type": 0,
"data": {
"received_at": "1748433708",
"collapse_id": "0_70815_1748433707",
"source": "Insider",
"camp_type": "0",
"key": "value",
"sound": "Default",
"camp_id": "70815",
"isSetPush": true,
"variant_id": "89159",
"sent_at": "1748433707"
}
}
Key-Value Pair (Message Action Button)
[INSIDER][insiderCallbackTriggered] Callback Type: NOTIFICATION_OPEN
{"type": 0,
"data": {
"buttonId": 0,
"source": "Insider",
"key": "value",
"buttonText": "key value pair button1"
}
}
Internal URL (Push)
[INSIDER][insiderCallbackTriggered] I Callback Type: NOTIFICATION_OPEN, Data:{
"type": 0,
"data": {
"received_at": "1748433708",
"collapse_id": "0_70815_1748433707",
"source": "Insider",
"camp_type": "0",
"ins_dl_internal": "https://www.test.com",
"sound": "Default",
"camp_id": "70815",
"isSetPush": true,
"variant_id": "89159",
"sent_at": "1748433707"
}
}
Internal URL (Message Action Button)
[INSIDER][insiderCallbackTriggered] Callback Type: NOTIFICATION_OPEN
{
"type": 0,
"data": {
"buttonId": 0,
"source": "Insider",
"buttonText": "test internal",
"ins_dl_internal": "https://www.test.com"
}
}
External URL (Push)
[INSIDER][insiderCallbackTriggered] I Callback Type: NOTIFICATION_OPEN, Data:{
"type": 0,
"data": {
"received_at": "1748433708",
"collapse_id": "0_70815_1748433707",
"source": "Insider",
"camp_type": "0",
"ins_dl_external": "https://www.test.com",
"sound": "Default",
"camp_id": "70815",
"isSetPush": true,
"variant_id": "89159",
"sent_at": "1748433707"
}
}
External URL (Message Action Button)
[INSIDER][insiderCallbackTriggered] Callback Type: NOTIFICATION_OPEN
{
"type": 0,
"data": {
"ins_dl_external": "https://www.test.com",
"buttonId": 0,
"source": "Insider",
"buttonText": "test external"
}
}
JSON (Push)
[INSIDER][insiderCallbackTriggered] I Callback Type: NOTIFICATION_OPEN, Data:{
"type": 0,
"data": {
"received_at": "1748433708",
"collapse_id": "0_70815_1748433707",
"source": "Insider",
"camp_type": "0",
"ins_dl_json": '{"test":"test2"}',
"sound": "Default",
"camp_id": "70815",
"isSetPush": true,
"variant_id": "89159",
"sent_at": "1748433707"
}
}
JSON (Message Action Button)
[INSIDER][insiderCallbackTriggered] Callback Type: NOTIFICATION_OPEN
{
"type": 0,
"data": {
"buttonId": 0,
"source": "Insider",
"buttonText": "test json",
"ins_dl_json": '{"test":"test2"}'
}
}
URL Scheme (Push)
[INSIDER][insiderCallbackTriggered] I Callback Type: NOTIFICATION_OPEN, Data:{
"type": 0,
"data": {
"received_at": "1748433708",
"collapse_id": "0_70815_1748433707",
"source": "Insider",
"camp_type": "0",
"ins_dl_url_scheme": "test",
"sound": "Default",
"camp_id": "70815",
"isSetPush": true,
"variant_id": "89159",
"sent_at": "1748433707"
}
}
URL Scheme (Message Action Button)
[INSIDER][insiderCallbackTriggered] Callback Type: NOTIFICATION_OPEN
{
"type": 0,
"data": {
"buttonId": 0,
"source": "Insider",
"buttonText": "test url scheme",
"ins_dl_url_scheme": 'test'
}
}
Key-Value Pair (App template)
[INSIDER][CALLBACK][InsiderCallbackTypeTempStoreCustomAction]: {
data = {
InsiderDeepLinkKey = InsiderDeepLinkValue;
};
type = 4;
}
URL Scheme (App template)
[INSIDER][DEBUG][processTemplateStoreURL]: {
action = deepLink;
dismiss = 12;
redirection = "https://academy.useinsider.com";
}
JSON (App template)
[INSIDER][DEBUG][processTemplateStoreURL]: {
action = deepLink;
custom = {
json = "{\"insider_key\": \"insider_value\"}";
};
dismiss = 12;
}