Modülün Etkinleştirilmesi
Burada açıklandığı gibi etkinleştirilmelidir.
Uygulama-İçi Mesajlar
Kullanıcınıza uygulama-içi bir mesaj göstermek için öncelikle RMC panelinden bir target aksiyon tanımlamanız ve gerekli alanları doldurmanız gerekmektedir. Ardından aşağıdaki gibi bu target aksiyonu tetikleyebilir ve kullanıcınıza oluşturduğunuz formu uygulamanız aracılığıyla gösterebilirsiniz.
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Uygulama-İçi Mesaj", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Uygulama-İçi Mesaj", parameters, activity );
Uygulama-içi mesaj göstermek için yukarıdaki gibi customEvent metodunu çağırırken parent parametresi null olmamalıdır. parent parametresine bir Activity değeri verilmezse mesaj görünmeyecektir.
Eğer RMC panelde oluşturduğunuz forma bir kural tanımladıysanız bu kuralın da customEvent metodu içerisindeki properties parametresi aracılığıyla girilmesi gerekmektedir. Örnek:
parameters["OM.inapptype"] = "full_screen_image"
parameters.put("OM.inapptype", "full_screen_image");
Tıklanmanın Yakalanması
Kullanıcınıza gösterilen uygulama-içi mesaj ekranında kullanıcı, yönlendirmenin olduğu öğeye tıkladığında, alınacak aksiyonu kendiniz yönetmek isterseniz aşağıdaki gibi bir callback tanımlaması yapmanız ve bu callback i setInAppButtonInterface metoduna iletmeniz gerekmektedir.
Kotlin
val buttonCallback: InAppButtonInterface = object : InAppButtonInterface { override fun onPress(link: String?) { //Tıklama sonrası çalıştırılacak kodu buraya yazınız. } } RelatedDigital.setInAppButtonInterface(buttonCallback) val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Uygulama-İçi Mesaj", properties = parameters, parent = activity )
Java
InAppButtonInterface buttonCallback = new InAppButtonInterface() { @Override public void onPress(String link) { //Tıklama sonrası çalıştırılacak kodu buraya yazınız. } }; RelatedDigital.setInAppButtonInterface(buttonCallback); HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Uygulama-İçi Mesaj", parameters, activity );
Her tıklama sonrası, SDK girilen callback i çağırır ve tanımlanan callback i kaldırır. Bu yüzden callback kullanmak isteğiniz her aksiyondan önce yeni bir callback tanımlaması yapıp setInAppButtonInterface
metodu aracılığıyla SDK ya iletmeniz gerekmektedir. Daha sonra customEvent metoduyla ilgili aksiyonu tetikleyebilirsiniz.
Özel Font Kullanımı
Uygulama-içi mesajlarda özel font kullanımı için ilk olarak projenizin res klasörü altında font dosyası oluşturunuz(yoksa).
Oluşturduğunuz klasörün içerisine istediğiniz fontları ekleyebilirsiniz.
Son olarak arayüzden uzantısız bir şekilde kullanmak istediğiniz fontun adını giriniz.
Uygulama-İçi Mesaj Tasarımları
Pop-up - Görsel, Başlık, Yazı & Buton | Mini - İkon & Yazı | Tam Ekran Görsel |
---|---|---|
|
| |
Tam Ekran Görsel ve Buton | Pop-up - Görsel, Başlık, Yazı ve Buton | Pop-up Anket |
|
|
|
Pop-up - Yazı ve Butonlu NPS | Native Alert & Action Sheet | 1-10 Puanlama NPS |
|
| |
Yıldızlı anket & ikinci pop-up | Yarım Ekran Görsel | Carousel |
|
|
|
Favori Özellik Aksiyonu
RMC panel üzerindeki target aksiyonlarından tanımladığınız favori değişkenlerinizi aşağıdaki gibi mobil uygulama üzerinden alıp kullanabilirsiniz.
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("Favori Özellik", e.message) } } override fun fail(response: VisilabsResponse?) { Log.e("Favori Özellik", 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("Favori Özellik", e.getMessage()); } } @Override public void fail(VisilabsResponse response) { Log.e("Favori Özellik", response.getError().getMessage); } }; RelatedDigital.getFavorites( context, null, Constants.FavoriteAttributeAction, callback);
Story Manager
Uygulamanızın layout unda dilediğiniz bir alana StoryRecyclerView
ı yerleştiriniz.
<com.relateddigital.relateddigital_android.inapp.story.StoryRecyclerView android:id="@+id/story_recycler_view" android:layout_width="match_parent" android:layout_height="wrap_content" />
StoryItemClickListener
tanımlayarak her bir story’e tıklandığında yapmak istediğiniz yönlendirme veya alınacak aksiyonu tanımlayınız.
Ardından StoryRecyclerView
ın setStoryAction
veya setStoryActionId
methodunu çağırarak storyItemClickListener
objesini methoda ekleyiniz.
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } } binding.storyRecyclerView.setStoryAction( context = context, storyItemClickListener = storyItemClickListener)
Java
StoryItemClickListener storyItemClickListener = new StoryItemClickListener() { @Override public void storyItemClicked(String storyLink) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } }; binding.storyRecyclerView.setStoryAction( context, storyItemClickListener);
veya
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } } binding.storyRecyclerView.setStoryActionId( context = context, storyId = storyId, storyItemClickListener = storyItemClickListener)
Java
StoryItemClickListener storyItemClickListener = new StoryItemClickListener() { @Override public void storyItemClicked(String storyLink) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } }; binding.storyRecyclerView.setStoryActionId( context, storyId, storyItemClickListener);
Eğer bir şeylerin ters gitmesi ve story aksiyonun gösterilememesi durumunda layout dosyanıza eklediğiniz StoryRecyclerView
dan dolayı ekranda ilgili alanın boş kalmasına karşı önlem almak isterseniz story aksiyonunu aşağıdaki gibi setStoryActionWithRequestCallback
veya setStoryActionIdWithRequestCallback
metotlarını kullanarak tetikleyebilirsiniz.
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } } val storyRequestListener = object : StoryRequestListener { override fun onRequestResult(isAvailable: Boolean) { if (!isAvailable) { //Burada StoryRecyclerView ı kaldırmalısınız 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) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } }; StoryRequestListener storyRequestListener = new StoryRequestListener() { @Override public void onRequestResult(boolean isAvailable) { if (!isAvailable) { //Burada StoryRecyclerView ı kaldırmalısınız binding.storyRecyclerView.visibility = View.GONE } } }; binding.storyRecyclerView.setStoryActionWithRequestCallback( context, storyItemClickListener storyRequestListener);
setStoryActionIdWithRequestCallback
Kotlin
val storyItemClickListener = object : StoryItemClickListener { override fun storyItemClicked(storyLink: String?) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } } val storyRequestListener = object : StoryRequestListener { override fun onRequestResult(isAvailable: Boolean) { if (!isAvailable) { //Burada StoryRecyclerView ı kaldırmalısınız 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) { //Burada storyLink değişkenini kullanarak gerekli yönlendirmeyi yapabilirsiniz } }; StoryRequestListener storyRequestListener = new StoryRequestListener() { @Override public void onRequestResult(boolean isAvailable) { if (!isAvailable) { //Burada StoryRecyclerView ı kaldırmalısınız binding.storyRecyclerView.visibility = View.GONE } } }; binding.storyRecyclerView.setStoryActionIdWithRequestCallback( context, storyId, storyItemClickListener storyRequestListener);
Öneriler Aksiyonu
Öneriler aksiyonunu uygulamanızda aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
val callback: VisilabsCallback = object : VisilabsCallback { override fun success(response: VisilabsResponse?) { try { // Burada gelen öneriler listesiyle ilgili aksiyonu alabilirsiniz.Örnek: 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("Öneriler", e.message) } } override fun fail(response: VisilabsResponse?) { Log.e("Öneriler", response!!.error!!.message) } } RelatedDigital.getRecommendations( context = context, zoneId = "zoneIdDeğeri", productCode = "ÜrünKoduDeğeri", visilabsCallback = callback)
Java
VisilabsCallback callback = new VisilabsCallback() { @Override public void success(VisilabsResponse response) { try { // Burada gelen öneriler listesiyle ilgili aksiyonu alabilirsiniz.Örnek: 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"); //Bu şekilde devam eder... } } catch(Exception e) { Log.e("Öneriler", e.getMessage()); } } @Override public void fail(VisilabsResponse response) { Log.e("Öneriler", response.getError().getMessage()); } }; RelatedDigital.getRecommendations( context, "zoneIdDeğeri", "ÜrünKoduDeğeri", callback);
Ayrıca, filtreleri ve ek parametreleri de getRecommendations
metodu aracılığıyla kullanabilirsiniz.
Kotlin
val callback: VisilabsCallback = object : VisilabsCallback { override fun success(response: VisilabsResponse?) { try { // Burada gelen öneriler listesiyle ilgili aksiyonu alabilirsiniz.Örnek: 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("Öneriler", e.message) } } override fun fail(response: VisilabsResponse?) { Log.e("Öneriler", 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 = "zoneIdDeğeri", productCode = "ÜrünKoduDeğeri", visilabsCallback = callback, properties = parameters, filters = filters)
Java
VisilabsCallback callback = new VisilabsCallback() { @Override public void success(VisilabsResponse response) { try { // Burada gelen öneriler listesiyle ilgili aksiyonu alabilirsiniz.Örnek: 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"); //Bu şekilde devam eder... } } catch(Exception e) { Log.e("Öneriler", e.getMessage()); } } @Override public void fail(VisilabsResponse response) { Log.e("Öneriler", 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, "zoneIdDeğeri", "ÜrünKoduDeğeri", callback, parameters, filters = filters);
Öneriler özelliğinin tıklamalarının panele yansıması için, aşağıdaki metot, tıklanan ürünün "qs" değeri ile çağırılmalıdır.
örnek callback metodunda herbir ürün için "qs" parametresinin nasıl elde edilebileceğini görebilirsiniz.
Kotlin
RelatedDigital.trackRecommendationClick( context = context, qs = qs)
Java
RelatedDigital.trackRecommendationClick( context, qs);
Mail Üyelik Formu
RMC panel üzerinden oluşturduğunuz mail üyelik formu aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Mail Üyelik", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Mail Üyelik", parameters, activity );
parent parametresi ile ilgili Activity değerini geçtiğinizden emin olunuz.
RMC panelden oluşturduğunuz aksiyonda bir kural tanımladıysanız bu kuralı da parameters ile geçmeniz gerekmektedir. Örnek:
parameters[“type”] = “mail_subs_form”
Çarkıfelek
RMC panel üzerinden oluşturduğunuz çarkıfelek aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Çarkıfelek", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Çarkıfelek", parameters, activity );
Çarkıfelek Yarım Görünüm | Çarkıfelek Tam Görünüm |
---|---|
|
|
parent parametresi ile ilgili Activity değerini geçtiğinizden emin olunuz.
RMC panelden oluşturduğunuz aksiyonda bir kural tanımladıysanız bu kuralı da parameters ile geçmeniz gerekmektedir. Örnek:
parameters[“type”] = “spin_to_win”
Kazı Kazan
RMC panel üzerinden oluşturduğunuz kazı-kazan aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Kazı Kazan", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Kazı Kazan", parameters, activity );
parent parametresi ile ilgili Activity değerini geçtiğinizden emin olunuz.
RMC panelden oluşturduğunuz aksiyonda bir kural tanımladıysanız bu kuralı da parameters ile geçmeniz gerekmektedir. Örnek:
parameters[“type”] = “scratch_to_win”
Ürün Durum Bilgisi
RMC panel üzerinden oluşturduğunuz ürüm durum bilgisi aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
val parameters = HashMap<String, String>() RelatedDigital.customEvent( context = context, pageName = "Ürün Durum Bilgisi", properties = parameters, parent = activity )
Java
HashMap<String, String> parameters = new HashMap<String, String>(); RelatedDigital.customEvent( context, "Ürün Durum Bilgisi", parameters, activity );
parent parametresi ile ilgili Activity değerini geçtiğinizden emin olunuz.
RMC panelden oluşturduğunuz aksiyonda bir kural tanımladıysanız bu kuralı da parameters ile geçmeniz gerekmektedir. Örnek:
parameters[“type”] = “product_stat_notifier”