...
Ardından customEvent() metodunu çağırabilirsiniz.
InApp’lerde Custom Font kullanımı
InApp’lerde custom font kullanımı için ilk olarak res klasörü altında font folder'ı oluşturun.
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ı girin.
12 farklı In-App Message tasarımı mevcut:
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 |
Video In-App | ||
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.
...
language | java |
---|
...
1-10 Puanlama NPS - Inline
InlineNpsWithNumbersView
'ı projenizde tercih ettiğiniz bir layout dosyasına eklemelisiniz.
Örnek kullanım:
Code Block |
---|
?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <com.visilabs.inApp.inlineNpsWithNumber.InlineNpsWithNumbersView VisilabsActionRequest visilabsActionRequest = Visilabs.CallAPI().requestAction(VisilabsConstant.FavoriteAttributeAction); android:id="@+id/inlineNps" android:layout_width="match_parent" visilabsActionRequest.executeAsyncAction(getVisilabsCallback()); } catch (Exception e) {android:layout_height="wrap_content" /> </ e.printStackTrace(); } } |
Not: getVisilabsCallback() metodu için aşağıdaki iki kod bloğundan birisini kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
private VisilabsActionsCallback getVisilabsCallback() { return new VisilabsActionsCallback() { @Override public void success(VisilabsActionsResponse message, String url)LinearLayout > |
InlineNpsWithNumbersView
'i ekledikten sonra ilgili koddaki (Java veya Kotlin) nesneye erişmeli ve bu nesne üzerinde setNpsWithNumberAction()
yöntemini çağırmalısınız. Bu yöntem 1 zorunlu (Bağlam bağlamı) ve 3 isteğe bağlı parametreye (HashMap<String, String> özellikleri, NpsItemClickListener npsItemClickListener, Activity) sahiptir.
Özellikler, isteğe bağlı olan parametreler, istediğiniz sorgu parametrelerini eklemeniz içindir.
nps ItemClickListener, kullanıcı bir banner’a tıkladığında kontrolü elde etmek içindir. Sdk'nın kullanıcıyı otomatik olarak bağlantıya yönlendirmesini istemiyorsanız, bu arayüzü kullanabilirsiniz.
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.
Code Block | ||
---|---|---|
| ||
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); //requestAction() or requestActionId() try { VisilabsActionRequest List<FavoriteAttributeAction> favoriteAttributeActionsvisilabsActionRequest = message.getFavoriteAttributeAction(Visilabs.CallAPI().requestAction(VisilabsConstant.FavoriteAttributeAction); visilabsActionRequest.executeAsyncAction(getVisilabsCallback()); String[] brands = favoriteAttributeActions.get(0).getActiondata().getFavorites().getBrand(); } catch (Exception e) { //Continues like this... e.printStackTrace(); } @Override } |
Not: getVisilabsCallback() metodu için aşağıdaki iki kod bloğundan birisini kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
private VisilabsActionsCallback getVisilabsCallback() { publicreturn voidnew fail(Throwable t, String urlVisilabsActionsCallback() { @Override Log.e("Error", t.getMessage()); public void success(VisilabsActionsResponse message, }String url) { }; } |
veya
Code Block | ||
---|---|---|
| ||
private VisilabsFavsRequestCallback getVisilabsCallback() { List<FavoriteAttributeAction> returnfavoriteAttributeActions new= VisilabsFavsRequestCallbackmessage.getFavoriteAttributeAction(); { @Override String[] brands = favoriteAttributeActions.get(0).getActiondata().getFavorites().getBrand(); public void success(FavsResponse message, String url) {//Continues like this... } Log.i(LOG_TAG, "Success Request : " + url); @Override public //Do your work here by using message, e.g.void fail(Throwable t, String url) { /*Log.e("Error", t.getMessage()); } List<FavoriteAttributeAction> favsActions = message.getFavoriteAttributeAction(); }; } |
veya
Code Block | ||
---|---|---|
| ||
private VisilabsFavsRequestCallback getVisilabsCallback() { return new VisilabsFavsRequestCallback() { for (int i = 0; i@Override < favsActions.size() ; i++) { public void String actionType = favsActions.get(i).getActiontype(); success(FavsResponse message, String url) { Log.i(LOG_TAG, "action type " + i+1 + " Success Request : " + actionTypeurl); //Do your work here Actiondataby using actionData = favsActions.get(i).getActiondata();message, e.g. /* for (int j = 0; j <List<FavoriteAttributeAction> favsActions = message.sizegetFavoriteAttributeAction() ; j++) { for (int i = 0; i String[] attributes = actionData.getAttributes(); < favsActions.size() ; i++) { String FavoritesactionType favorites = actionData.getFavoritesfavsActions.get(i).getActiontype(); Log.i(LOG_TAG, "action type " //goes on... + i+1 + " : " + actionType); } Actiondata actionData = favsActions.get(i).getActiondata(); } */ for (int j = 0; j < favsActions.size() ; }j++) { @Override public void fail(Throwable t, String[] url)attributes { = actionData.getAttributes(); Log.e(LOG_TAG, "Fail Request : " + url); Favorites favorites = actionData.getFavorites(); Log.e(LOG_TAG, "Fail Request Message : " + t.getMessage()); //goes on... } }; } |
Story Manager
Story Banner ve Story Aksiyonu
Her iki aksiyon içinde implementasyonu için aşağıdaki VisilabsRecyclerView
‘i layout’ta istediğiniz bölüme yerleştirin.
Code Block | ||
---|---|---|
| ||
} <com.visilabs.story.VisilabsRecyclerView } android:id="@+id/vrv_story" */ } @Override android:layout_width="match_parent" public android:layout_height="wrap_content"/> |
VisilabsRecyclerView
'i classınızda tanımladıktan sonra StoryItemClickListener
tanımlayarak her bir story’e tıklandığında yapmak istediğiniz yönlendirme ve ya aksiyonu tanımlayınız. Burada örnek olması için Toast Mesajı gösterilmiştir.
Ardından VisilabsRecyclerView
'in setStoryAction
methodunu çağrarak storyItemClickListener
objesini methoda ekleyiniz.
Code Block | ||
---|---|---|
| ||
VisilabsRecyclerView visilabsRecyclerView = findViewById(R.id.vrv_story);void fail(Throwable t, String url) { StoryItemClickListener storyItemClickListener = new StoryItemClickListener() {Log.e(LOG_TAG, "Fail Request : " + url); @Override Log.e(LOG_TAG, "Fail Request Message : " + t.getMessage()); public void storyItemClicked(String storyLink) { } Toast.makeText(getApplicationContext(), storyLink, Toast.LENGTH_LONG).show(); } }; visilabsRecyclerView.setStoryAction(getApplicationContext(), storyItemClickListener); |
İsterseniz Story Aksiyon Id ile de setleyebilirsiniz.
Code Block | ||
---|---|---|
| ||
visilabsRecyclerView.setStoryActionId(getApplicationContext(), "250", storyItemClickListener);
|
Panelde aktif story looking banner veya story olduğu sürece uygulamanızda gözükecektir.
Recommendation
Recommendation Widget'larının Mobil Uygulamaya Yerleştirilmesi
Android mobil uygulamanızda, kişiye özel ürün önerileri göstermeniz için gerekli dokümanları bu bölümde bulabilirsiniz.
Bir VisilabsTargetRequest nesnesi oluşturun ve VisilabsTargetRequest nesnesinin executeAsync yöntemini çağırın.
ZoneID her uygulama için farklıdır, bu nedenle destek için RMC ekibi ile iletişime geçiniz. "Alternatif Ürünler" gibi öneri widgetları, ürün kodunun bir parametre olarak görülmesini gerektirir.
Talep tamamlandıktan sonra, talebin başarı ya da başarısızlık durumuna bağlı olarak callback fonksiyonu çağrılır, bu nedenle ihtiyaçlarınıza göre callback fonksiyonlarını aşağıda gösterildiği gibi kodlamanız gerekir:
Code Block | ||
---|---|---|
| ||
VisilabsCallback callback = new VisilabsCallback() { @Override public void success(VisilabsResponse response) { try{ 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... }}; } |
Mail Üyelik Formu
RMC panelden in-app message’da olduğu gibi mail üyelik formunu oluşturduktan sonra her customEvent çağırdığınız zaman mail üyelik formu olup olmadığı kontrol edilir ardından mail üyelik formu gösterilir. customEvent parametresinde Activity’i alan overloadı çağırmanız gerekmektedir. Örnek kod ve görsel;
Code Block | ||
---|---|---|
| ||
customEvent(String pageName, HashMap<String, String> properties, Activity parent) |
...
Çarkıfelek
RMC panelden in-app message’da olduğu gibi çarkıfelek oluşturduktan sonra her customEvent çağırdığınız zaman çarkıfelek olup olmadığı kontrol edilir ardından çarkıfelek gösterilir. customEvent parametresinde Activity’i alan overloadı çağırmanız gerekmektedir. Örnek kod ve görsel;
Code Block | ||
---|---|---|
| ||
customEvent(String pageName, HashMap<String, String> properties, Activity parent) |
Çarkıfelek Yarım Görünüm | Çarkıfelek Tam Görünüm |
---|---|
Kazı Kazan
RMC panelden in-app message’da olduğu gibi Kazı Kazan oluşturduktan sonra her customEvent çağırdığınız zaman Kazı Kazan olup olmadığı kontrol edilir ardından Kazı Kazan gösterilir. customEvent parametresinde Activity’i alan overloadı çağırmanız gerekmektedir. Örnek kod ve görsel;
Code Block | ||
---|---|---|
| ||
customEvent(String pageName, HashMap<String, String> properties, Activity parent) |
...
App Banner
Uygulamanızın istediğiniz bir layout dosyasında istediğiniz bir yere BannerRecyclerView
ı yerleştiriniz. Örnek xml :
Code Block | ||
---|---|---|
| ||
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/container"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<com.visilabs.inApp.bannercarousel.BannerRecyclerView
android:id="@+id/bannerListView"
android:layout_width="match_parent"
android:layout_height="150dp"/>
<Button
android:id="@+id/btn_show_banner"
android:layout_gravity="center"
android:layout_width="150dp"
android:layout_height="50dp"
android:layout_marginTop="20dp"
android:background="@drawable/rounded_corners_background"
android:text="@string/show_banner" />
</LinearLayout> |
Daha sonra ilgili program dosyasında (Java veya Kotlin) BannerRecyclerView
objesine erişip requestBannerCarouselAction
() methodunun çağırılması gereklidir. Bu method bir zorunlu (context: Context
), 3 opsiyonel parametre(properties: HashMap<String, String>?, bannerRequestListener: BannerRequestListener?, bannerItemClickListener: BannerItemClickListener?
) almaktadır.
properties
parametresi sorguya eklemek istediğiniz ekstra query parametreleri içindir.
bannerRequestListener
parametresi eğer sorgu sonucunda bir şeyler ters gider ve sunuculardan bilgi alınamazsa bunun size bildirimlesi içindir. Böylece layoutunuza eklediğiniz BannerRecyclerView
in visibility sini View.GONE veya View.INVISIBLE yaparak ilgili alanın boş görünmesini engelleyebilirsiniz.
bannerItemClickListener
parametresi kullanıcının herhangi bir banner a tıklaması sonucu SDK’nın otomatik yönlendirmesi yerine kendiniz yönlendirme yapmak istiyorsanız kullanabileceğiniz bir parametredir.
Tüm parametreleri içeren örnek bir kullanım aşağıdaki gibidir.
Code Block | ||
---|---|---|
| ||
bannerItemClickListener = new BannerItemClickListener() { } catch@Override (Exception e){ public void Log.e(LOG_TAG, e.getMessage(), e);bannerItemClicked(String bannerLink) { } } Toast.makeText(getApplicationContext(), @OverridebannerLink, Toast.LENGTH_SHORT).show(); public void fail(VisilabsResponse response) { Log.e(LOG_TAG, response.getErrorMessage());i("link banner", bannerLink); } }; |
Yukarıdaki gibi callback fonksiyonunu oluşturulduktan sonra istek aşağıdaki şekilde gibi atılır:
Code Block | ||
---|---|---|
| ||
VisilabsTargetRequest targetRequest = Visilabs.CallAPI().buildTargetRequest(zoneID, "productCode"); targetRequest.executeAsync(callback); |
...
Code Block | ||
---|---|---|
| ||
List<VisilabsTargetFilter> filters = new ArrayList<VisilabsTargetFilter>(); HashMap<String,String> properties = new HashMap<String, String>(); properties.put("OM.extra", "Extra Value"); VisilabsTargetFilter f = new VisilabsTargetFilter("attr1", "0", "value"); filters.add(f); f.setAttribute("attr2"); f.setFilterType("1"); // There are 2 filter types: Include and Exclude. For Include pass "0", for Exclude pass "1". f.setValue("value"); filters.add(f); try { VisilabsTargetRequest targetRequest = Visilabs.CallAPI().buildTargetRequest(zoneID, "productCode", properties, filters); targetRequest.executeAsync(callback); try { Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(bannerLink)); startActivity(viewIntent); } catch (Exception e) { e.printStackTrace(); |
Attribute
...
Fonksiyon
...
Açıklama
...
PRODUCTCODE
...
Ürün koduna göre filtreleme yapar
...
PRODUCTNAME
...
Ürün ismine göre filtreleme yapar
...
COLOR
...
Ürün rengine göre filtreleme yapar
...
AGEGROUP
...
Ürün yaş grubuna göre filtreleme yapar
...
BRAND
...
Ürün markasına göre filtreleme yapar
...
CATEGORY
...
Ürün kategorisine göre filtreleme yapar
...
GENDER
...
Ürün cinsiyetine göre filtreleme yapar
...
MATERIAL
...
Ürün material kolonuna göre filtreleme yapar
...
ATTRIBUTE1
...
Ürün attribute1 kolonuna göre filtreleme yapar
...
ATTRIBUTE2
...
Ürün attribute2 kolonuna göre filtreleme yapar
...
ATTRIBUTE3
...
Ürün attribute3 kolonuna göre filtreleme yapar
...
ATTRIBUTE4
...
Ürün attribute4 kolonuna göre filtreleme yapar
...
ATTRIBUTE5
...
Ürün attribute5 kolonuna göre filtreleme yapar
...
SHIPPINGONSAMEDAY
...
Ürünün aynı gün kargo kolonuna göre filtreler
...
FREESHIPPING
...
Ürünün ücretsiz kargo durumuna göre filtreler
...
ISDISCOUNTED
...
Ürün indirim durumuna göre filtreleme yapar
Filter Type
...
Fonksiyon
...
Açıklama
...
like
...
Verilen değer, seçilen kolonun içerisinde geçiyor mu kontrolü yapar.
...
notLike
...
Verilen değer, seçilen kolonun içerisinde geçmiyor mu kontrolü yapar.
...
equals
...
Verilen değer, seçilen kolondaki değere tam eşit mi kontrolü yapar.
...
notEquals
...
Verilen değer, seçilen kolondaki değere tam eşit değil mi kontrolü yapar.
...
greaterThan
...
Verilen değer, seçilen kolondaki değerden daha büyük mü kontrolü yapar.
...
lessThan
...
Verilen değer, seçilen kolondaki değerden daha küçük mü kontrolü yapar.
...
greaterOrEquals
...
Verilen değer, seçilen kolondaki değerden daha büyük veya eşit mi kontrolü yapar.
...
lessOrEquals
...
Verilen değer, seçilen kolondaki değerden daha küçük veya eşit mi kontrolü yapar.
...
Code Block | ||
---|---|---|
| ||
// örnek callback fonsiyonunda her bir ürün için "qs" parametresinin nasıl elde edilebileceğini görebilirsiniz.
Visilabs.CallAPI().trackRecommendationClick(qs); |
Mail Üyelik Formu
RMC panelden in-app message’da olduğu gibi mail üyelik formunu oluşturduktan sonra her customEvent çağırdığınız zaman mail üyelik formu olup olmadığı kontrol edilir ardından mail üyelik formu gösterilir. customEvent parametresinde Activity’i alan overloadı çağırmanız gerekmektedir. Örnek kod ve görsel;
Code Block | ||
---|---|---|
| ||
customEvent(String pageName, HashMap<String, String> properties, Activity parent) |
...
Çarkıfelek
RMC panelden in-app message’da olduğu gibi çarkıfelek oluşturduktan sonra her customEvent çağırdığınız zaman çarkıfelek olup olmadığı kontrol edilir ardından çarkıfelek gösterilir. customEvent parametresinde Activity’i alan overloadı çağırmanız gerekmektedir. Örnek kod ve görsel;
Code Block | ||
---|---|---|
| ||
customEvent(String pageName, HashMap<String, String> properties, Activity parent) |
...
Çarkıfelek Yarım Görünüm
...
Çarkıfelek Tam Görünüm
...
...
Kazı Kazan
RMC panelden in-app message’da olduğu gibi Kazı Kazan oluşturduktan sonra her customEvent çağırdığınız zaman Kazı Kazan olup olmadığı kontrol edilir ardından Kazı Kazan gösterilir. customEvent parametresinde Activity’i alan overloadı çağırmanız gerekmektedir. Örnek kod ve görsel;
Code Block | ||
---|---|---|
| ||
customEvent(String pageName, HashMap<String, String> properties, Activity parent) |
...
Inline Nps With Numbers
InlineNpsWithNumbersView
'ı projenizde tercih ettiğiniz bir layout dosyasına koymalısınız. Örneknkullanım:
Code Block |
---|
?xml version="1.0" encoding="utf-8"?> < LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" xmlns:app="http://schemas.android.com/apk/res-auto"> <com.visilabs.inApp.inlineNpsWithNumber.InlineNpsWithNumbersView android:id="@+id/inlineNps" android:layout_width="match_parent" android:layout_height="wrap_content" Log.e(LOG_TAG, "The link is not formatted properly!"); } } }; BannerRequestListener bannerRequestListener = new BannerRequestListener() { @Override public void onRequestResult(boolean isAvailable) { if (!isAvailable) { binding.bannerListView.setVisibility(View.GONE); } } }; HashMap<String, String> properties = new HashMap<>(); properties.put("OM.inapptype", "banner_carousel"); binding.bannerListView.requestBannerCarouselAction( /> </ LinearLayout > |
InlineNpsWithNumbersView
'i koyduktan sonra ilgili program kodundaki (Java veya Kotlin) nesneye erişmeli ve bu nesne üzerinde setNpsWithNumberAction()
yöntemini çağırmalısınız. Bu yöntem 1 zorunlu (Bağlam bağlamı) ve 3 isteğe bağlı parametre (HashMap<String, String> özellikleri, NpsItemClickListener npsItemClickListener, Activity üst) alır.
...
getApplicationContext(),
properties,
bannerRequestListener,
bannerItemClickListener); |
Ürün Durum Bilgisi
RMC Panelde tanımladığınız Ürün Durum Bilgisi aksiyonu Ürün Görüntüleme, Sepete Ekleme ve Favoriye Ekleme/Çıkarma eventlerinde çalışmaktadır. Bu eventlerde ürün idnin gönderildiğinden emin olmalısınız. Bu eventlerde çağırdığınız customEvent metodunun Activity overloadını alması gerekmektedir.
...