Enabling The Module
You can enable it as described here.
In-App Messages
In order to show your user an in-app message, you need to create a targeting action on RMC panel and fill the related field first. Then, you can trigger the targeting action you created as show below and show the user it via your mobile application.
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "In-App Message", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "In-App Message", parameters, activity );
The parent parameters above cannot be null. If you do not enter an Activity value for parent parameters, the message is not going to be shown.
If you use a rule in your targeting action on RMC, you should enter it via properties map. Example,
parameters["OM.inapptype"] = "full_screen_image"
parameters.put("OM.inapptype", "full_screen_image");
Click Action Callback
When the user click on the item that includes a link to navigate to another page, you can define what is going to happen next by setting a callback method. You should set this callback via RelatedDigital.setInAppButtonInterface()
method.
Kotlin
val buttonCallback: InAppButtonInterface = object : InAppButtonInterface { override fun onPress(link: String?) { //Write the code that is going to be executed after the click } } RelatedDigital.setInAppButtonInterface(buttonCallback) val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "In-App Message", properties = parameters, parent = activity )
Java
InAppButtonInterface buttonCallback = new InAppButtonInterface() { @Override public void onPress(String link) { //Write the code that is going to be executed after the click } }; RelatedDigital.setInAppButtonInterface(buttonCallback); HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "In-App Message", parameters, activity );
After each click, the SDK calls the callback that was entered and removes it. Thus, you should set the callback via setInAppButtonInterface
for each targeting action that you want to use a callback for click action. Then, you can call customEvent()
method.
Custom Font Usage
First of all, you need to create a font folder (unless you have one) under res folder in your project.
You can add your font files into the folder (font) you created.
Lastly, you should enter the name of the font without extension in the user interface.
In-App Message Templates
Pop-up - Image, Title, Text & Button | Mini - Icon & Text | Full Screen Image |
---|---|---|
|
| |
Full Screen Image & Button | Pop-up - Image, Title, Text and Button | Pop-up Survey |
|
|
|
Pop-up - Text and Button NPS | Native Alert & Action Sheet | 1-10 Point NPS |
|
| |
Survey with Star & Second pop-up | Half Screen Image | Carousel |
|
|
|
Favori Attributes Action
You can use the favorite attributes that you define on RMC->targeting actions in your application as show below.
Kotlin
val callback: VisilabsCallback = object : VisilabsCallback { override fun success(response: VisilabsResponse?) { try { val favsResponse: FavsResponse = Gson().fromJson(response!!.rawResponse, FavsResponse::class.java) val favBrands: String = favsResponse.favoriteAttributeAction!![0].actiondata!!.favorites!!.brand!![0]!! Log.i("Favs 1.Brand", favBrands) } catch (e: Exception) { Log.e("Favorite Attribute", e.message) } } override fun fail(response: VisilabsResponse?) { Log.e("Favorite Attribute", response!!.error!!.message) } } RelatedDigital.getFavorites( context = context, actionId = null, actionType = Constants.FavoriteAttributeAction, visilabsCallback = callback)
Java
VisilabsCallback callback = new VisilabsCallback() { @Override public void success(VisilabsResponse response) { try { FavsResponse favsResponse = new Gson().fromJson(response.getRawResponse(), FavsResponse.class); String favBrands = favsResponse.getFavoriteAttributeAction().get(0).getActiondata().getFavorites().getBrand()[0]; Log.i("Favs 1.Brand", favBrands); } catch(Exception e) { Log.e("Favorite Attribute", e.getMessage()); } } @Override public void fail(VisilabsResponse response) { Log.e("Favorite Attribute", response.getError().getMessage); } }; RelatedDigital.getFavorites( context, null, Constants.FavoriteAttributeAction, callback);
Story Manager
Please, put StoryRecyclerView
into wherever you want in your layout.
<com.relateddigital.relateddigital_android.inapp.story.StoryRecyclerView android:id="@+id/story_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
Plase, define a StoryItemClickListener
and determine what action is going to be taken after a story is clicked.
Then, you should call setStoryAction
or setStoryActionId
methods with then StoryItemClickListener
object you defined.
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Take the action here by using storyLink variable } } binding.storyRecyclerView.setStoryAction( context = context, storyItemClickListener = storyItemClickListener)
Java
StoryItemClickListener storyItemClickListener = new StoryItemClickListener() { @Override public void storyItemClicked(String storyLink) { //Take the action here by using storyLink variable } }; binding.storyRecyclerView.setStoryAction( context, storyItemClickListener);
veya
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Take the action here by using storyLink variable } } binding.storyRecyclerView.setStoryActionId( context = context, storyId = storyId, storyItemClickListener = storyItemClickListener)
Java
StoryItemClickListener storyItemClickListener = new StoryItemClickListener() { @Override public void storyItemClicked(String storyLink) { //Take the action here by using storyLink variable } }; binding.storyRecyclerView.setStoryActionId( context, storyId, storyItemClickListener);
You can use setStoryActionWithRequestCallback
or setStoryActionIdWithRequestCallback
methods instead if you want to enter a StoryRequestListener
object. This parameter is for you to take a precaution in case of something goes wrong and the request fails. In this case, you should make the visibility of StoryRecyclerView
View.GONE so that there will not be an empty area in your layout.
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Take the action here by using storyLink variable } } val storyRequestListener = object : StoryRequestListener { override fun onRequestResult(isAvailable: Boolean) { if (!isAvailable) { //Make the StoryRecyclerView's visibility View.GONE here binding.storyRecyclerView.visibility = View.GONE } } } binding.storyRecyclerView.setStoryActionWithRequestCallback( context = context, storyItemClickListener = storyItemClickListener, storyRequestListener = storyRequestListener)
Java
StoryItemClickListener storyItemClickListener = new StoryItemClickListener() { @Override public void storyItemClicked(String storyLink) { //Take the action here by using storyLink variable } }; StoryRequestListener storyRequestListener = new StoryRequestListener() { @Override public void onRequestResult(boolean isAvailable) { if (!isAvailable) { //Make the StoryRecyclerView's visibility View.GONE here binding.storyRecyclerView.visibility = View.GONE } } }; binding.storyRecyclerView.setStoryActionWithRequestCallback( context, storyItemClickListener, storyRequestListener);
setStoryActionIdWithRequestCallback
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Take the action here by using storyLink variable } } val storyRequestListener = object : StoryRequestListener { override fun onRequestResult(isAvailable: Boolean) { if (!isAvailable) { //Make the StoryRecyclerView's visibility View.GONE here binding.storyRecyclerView.visibility = View.GONE } } } binding.storyRecyclerView.setStoryActionIdWithRequestCallback( context = context, storyId = storyId, storyItemClickListener = storyItemClickListener, storyRequestListener = storyRequestListener)
Java
StoryItemClickListener storyItemClickListener = new StoryItemClickListener() { @Override public void storyItemClicked(String storyLink) { //Take the action here by using storyLink variable } }; StoryRequestListener storyRequestListener = new StoryRequestListener() { @Override public void onRequestResult(boolean isAvailable) { if (!isAvailable) { //Make the StoryRecyclerView's visibility View.GONE here binding.storyRecyclerView.visibility = View.GONE } } }; binding.storyRecyclerView.setStoryActionIdWithRequestCallback( context, storyId, storyItemClickListener, storyRequestListener);
Recommendations Action
You can trigger recommendations action in your application as shown below:
Kotlin
val callback: VisilabsCallback = object : VisilabsCallback { override fun success(response: VisilabsResponse?) { try { //You can take the action here with the recommendations' response. Example, val jsonObject = response!!.json val groupTitle = jsonObject!!.getString("title") val jsonArray = jsonObject.getJSONArray("recommendations") for (i in 0 until jsonArray.length()) { val currentProductObject = jsonArray.getJSONObject(i) val currentProductTitle = currentProductObject.getString("title") val currentProductPrice = currentProductObject.getDouble("price") val currentProductFreeShipping = currentProductObject.getBoolean("freeshipping") val qs = currentProductObject.getString("qs") //Continues like this... } } catch (e: Exception) { Log.e("Recommendations", e.message) } } override fun fail(response: VisilabsResponse?) { Log.e("Recommendations", response!!.error!!.message) } } RelatedDigital.getRecommendations( context = context, zoneId = "zoneIdValue", productCode = "productCodeValue", visilabsCallback = callback)
Java
VisilabsCallback callback = new VisilabsCallback() { @Override public void success(VisilabsResponse response) { try { //You can take the action here with the recommendations' response. Example, JSONObject jsonObject = response.getJson(); String groupTitle = jsonObject.getString("title"); JSONArray jsonArray = jsonObject.getJSONArray("recommendations"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject currentProductObject = jsonArray.getJSONObject(i); String currentProductTitle = currentProductObject.getString("title"); Double currentProductPrice = currentProductObject.getDouble("price"); Boolean currentProductFreeShipping = currentProductObject.getBoolean("freeshipping"); String qs = currentProductObject.getString("qs"); //Continues like this... } } catch(Exception e) { Log.e("Recommendations", e.getMessage()); } } @Override public void fail(VisilabsResponse response) { Log.e("Recommendations", response.getError().getMessage()); } }; RelatedDigital.getRecommendations( context, "zoneIdValue", "productCodeValue", callback);
Also, you can input some filters and extra parameters to getRecommendations
method.
Kotlin
val callback: VisilabsCallback = object : VisilabsCallback { override fun success(response: VisilabsResponse?) { try { //You can take the action here with the recommendations' response. Example, val jsonObject = response!!.json val groupTitle = jsonObject!!.getString("title") val jsonArray = jsonObject.getJSONArray("recommendations") for (i in 0 until jsonArray.length()) { val currentProductObject = jsonArray.getJSONObject(i) val currentProductTitle = currentProductObject.getString("title") val currentProductPrice = currentProductObject.getDouble("price") val currentProductFreeShipping = currentProductObject.getBoolean("freeshipping") val qs = currentProductObject.getString("qs") //Continues like this... } } catch (e: Exception) { Log.e("Recommendations", e.message) } } override fun fail(response: VisilabsResponse?) { Log.e("Recommendations", response!!.error!!.message) } } val filters = ArrayList<VisilabsTargetFilter>() val parameters = HashMap<String, String>() parameters["OM.extra"] = "Extra Value" val f1 = VisilabsTargetFilter("attr1", "0", "value1") filters.add(f1) val f2 = VisilabsTargetFilter("attr2", "1", "value2") filters.add(f2) RelatedDigital.getRecommendations( context = context, zoneId = "zoneIdValue", productCode = "productCodeValue", visilabsCallback = callback, properties = parameters, filters = filters)
Java
VisilabsCallback callback = new VisilabsCallback() { @Override public void success(VisilabsResponse response) { try { //You can take the action here with the recommendations' response. Example, JSONObject jsonObject = response.getJson(); String groupTitle = jsonObject.getString("title"); JSONArray jsonArray = jsonObject.getJSONArray("recommendations"); for (int i = 0; i < jsonArray.length(); i++) { JSONObject currentProductObject = jsonArray.getJSONObject(i); String currentProductTitle = currentProductObject.getString("title"); Double currentProductPrice = currentProductObject.getDouble("price"); Boolean currentProductFreeShipping = currentProductObject.getBoolean("freeshipping"); String qs = currentProductObject.getString("qs"); //Continues like this... } } catch(Exception e) { Log.e("Recommendations", e.getMessage()); } } @Override public void fail(VisilabsResponse response) { Log.e("Recommendations", response.getError().getMessage()); } }; ArrayList<VisilabsTargetFilter> filters = new ArrayList<VisilabsTargetFilter>(); HashMap<String, String> parameters = new HashMap<String, String>(); parameters.put("OM.extra", "Extra Value"); VisilabsTargetFilter f1 = new VisilabsTargetFilter("attr1", "0", "value1"); filters.add(f1); VisilabsTargetFilter f2 = new VisilabsTargetFilter("attr2", "1", "value2"); filters.add(f2); RelatedDigital.getRecommendations( context, "zoneIdValue", "productCodeValue", callback, parameters, filters = filters);
In order the clicks of the recommendations to be reflected on the panel, you should send the “qs” value of the recommendation that is clicked by the user to the server via trackRecommendationClick
method.
You can see how to get “qs” value for each recommendation in the example callback method above.
Kotlin
RelatedDigital.trackRecommendationClick( context = context, qs = qs)
Java
RelatedDigital.trackRecommendationClick( context, qs);
Mail Subscription Form
You can trigger the mail subscription form that you defined on RMC panel as shown below:
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Mail Subscription", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Mail Subscription", parameters, activity );
Please make sure that you input an Activity with the parameter of parent.
If you define a rule for your targeting action on RMC panel, please make sure that you add this rule to the map before calling customEvent()
method. Example,
parameters["type"] = "mail_subs_form"
parameters.put("type", "mail_subs_form");
SpinToWin
You can trigger the spin-to-win action that you defined on RMC panel as shown below:
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "SpinToWin", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "SpinToWin", parameters, activity );
Çarkıfelek Yarım Görünüm | Çarkıfelek Tam Görünüm |
---|---|
|
|
Please make sure that you input an Activity with the parameter of parent.
If you define a rule for your targeting action on RMC panel, please make sure that you add this rule to the map before calling customEvent()
method. Example,
parameters["type"] = "spin_to_win"
parameters.put("type", "spin_to_win");
ScratchToWin
You can trigger the scratch-to-win action that you defined on RMC panel as shown below:
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "ScratchToWin", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "ScratchToWin", parameters, activity );
Please make sure that you input an Activity with the parameter of parent.
If you define a rule for your targeting action on RMC panel, please make sure that you add this rule to the map before calling customEvent()
method. Example,
parameters["type"] = "scratch_to_win"
parameters.put("type", "scratch_to_win");
Product Stat Notifier
You can trigger the product stat notifier action that you defined on RMC panel as shown below:
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Product Stat Notifier", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Product Stat Notifier", parameters, activity );
Please make sure that you input an Activity with the parameter of parent.
If you define a rule for your targeting action on RMC panel, please make sure that you add this rule to the map before calling customEvent()
method. Example,
parameters["type"] = "product_stat_notifier"
parameters.put("type", "product_stat_notifier");