Table of Contents | ||||
---|---|---|---|---|
|
Modülün Etkinleştirilmesi
Burada açıklandığı gibi etkinleştirilmelidir.
Veri Gönderimi
RelatedDigital SDK’sı uygulamanızdan kullanıcının hareketlerine göre veri toplamaya olanak sağlamaktadır.
Aşağıda bu amaç için tasarlanmış metotları ve detaylarını bulabilirsiniz.
Info |
---|
Mobil kanaldan gelen verilerinizin RMC'ye yüklenebilmesi için, aktif RMC hesabınızda kullanmış olduğunuz referans değeriniz ne ise (KEY_ID* veya E-Mail) mobil kanaldan gelen verilerin de bu referans ile gelmesine dikkat ediniz." *KEY_ID: Uygulama sahibi tarafından müşterisinin tekilleştirilmesi için kullanılan id değerleridir. Bunlar CRM id, userId, customerId, accountId gibi farklı isimlerle ifade ediliyor olabilir. exVisitorId yapınıza göre keyID veya E-Posta olabilir. |
Kaydolma
Code Block | ||
---|---|---|
| ||
RelatedDigital.signUp(
context = context,
exVisitorId = "exVisitorIdDeğeri"
) |
Info |
---|
exVisitorId parametresi ile RMC panelinde kullanıcıyı tekilleştirmek için kullandığınız özellik gönderilmelidir. Örneğin, email |
Bu metod aracılığıyla ek bilgiler göndermek de mümkündür. Aşağıdaki örnek, OM.sys.TokenID ve OM.sys.AppID parametrelerini içeren özelliklerle signUp metodunun çağırılmasını gösterir. OM.sys.TokenID ve OM.sys.AppID push bildirimleri göndermek için gereklidir ve OM.sys.AppID parametresi RMC web panelinden alınabilir.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.sys.TokenID"] = "tokenDeğeri"
parameters["OM.sys.AppID"] = "appAliasDeğeri"
RelatedDigital.signUp(
context = context,
exVisitorId = "exVisitorIdDeğeri",
properties = parameters
) |
Oturum Açma
Kaydolma metodu gibi oturum açma metodu da isteğe bağlı parametre özellikleriyle veya bunlar olmadan çağrılabilir.
Code Block | ||
---|---|---|
| ||
RelatedDigital.login(
context = context,
exVisitorId = "exVisitorIdDeğeri"
) |
Info |
---|
exVisitorId parametresi ile RMC panelinde kullanıcıyı tekilleştirmek için kullandığınız özellik gönderilmelidir. Örneğin, email |
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.sys.TokenID"] = "tokenDeğeri"
parameters["OM.sys.AppID"] = "appAliasDeğeri"
RelatedDigital.login(
context = context,
exVisitorId = "exVisitorIdDeğeri",
properties = parameters
) |
Ayrıca, kullanıcıyı segmentlemenizi sağlayacak parametreleri de ekleyebilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.sys.TokenID"] = "tokenDeğeri"
parameters["OM.sys.AppID"] = "appAliasDeğeri"
parameters["OM.vseg1"] = "seg1Değeri"
parameters["OM.vseg2"] = "seg2Değeri"
parameters["OM.vseg3"] = "seg3Değeri"
parameters["OM.vseg4"] = "seg4Değeri"
parameters["OM.vseg5"] = "seg5Değeri"
parameters["OM.bd"] = "1995-09-02"
parameters["OM.gn"] = "m"
parameters["OM.loc"] = "istanbul"
RelatedDigital.login(
context = context,
exVisitorId = "exVisitorIdDeğeri",
properties = parameters
) |
Sayfa Görüntüleme
Kullanıcının o anda görüntülemekte olduğu sayfa adını göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz. properties’e fazladan parametreler ekleyebilir veya boş bırakabilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Sıkça Sorulan Sorular",
properties = parameters
) |
Ürün Görüntüleme
Kullanıcının uygulamanızda bir ürün görüntülediği bilgisini göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.pv"] = "Product Code" //Ürün Kodu
parameters["OM.pn"] = "Product Name" //Ürün İsmi
parameters["OM.ppr"] = "Product Price" //Ürün Fiyatı
parameters["OM.pv.1"] = "Product Brand" //Ürün markası
parameters["OM.inv"] = "Number of items in stock" //Stokta kaç tane kaldığı
RelatedDigital.customEvent(
context = context,
pageName = "Product View",
properties = parameters
) |
Sepete Ekleme
Kullanıcının sepete ürün eklemesi veya çıkarması bilgisini göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz.
Info |
---|
Sepette bulunan son üründe kullanıcı tarafından silindiğinde OM.pb, OM.pu ve OM.ppr parametrelerini boş string olarak göndermelisiniz. Örnek, |
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.pbid"] = "Basket ID" //Sepet ID si
parameters["OM.pb"] = "Product1Code;Product2Code" //Ürün1Kodu;Ürün2Kodu
parameters["OM.pu"] = "Product1Quantity;Product2Quantity" //Ürün1Miktarı;Ürün2Miktarı
parameters["OM.ppr"] = "Product1Price*Product1Quantity;Product2Price*Product2Quantity" //Ürün1Fiyatı*Ürün1Miktarı;Ürün2Fiyatı*Ürün2Miktarı
RelatedDigital.customEvent(
context = context,
pageName = "Cart",
properties = parameters
) |
Satın Alma
Kullanıcının bir ürün satın alması bilgisini göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.tid"] = "Transaction ID" //İşlem ID'si
parameters["OM.pp"] = "Product1Code;Product2Code" //Ürün1Kodu;Ürün2Kodu
parameters["OM.pu"] = "Product1Quantity;Product2Quantity" //Ürün1Miktarı;Ürün2Miktarı
parameters["OM.ppr"] = "Product1Price*Product1Quantity;Product2Price*Product2Quantity" //Ürün1Fiyatı*Ürün1Miktarı;Ürün2Fiyatı*Ürün2Miktarı
RelatedDigital.customEvent(
context = context,
pageName = "Product Purchase",
properties = parameters
) |
Kategori Görüntüleme
Kullanıcının bir kategori sayfasını görüntülemesi bilgisini göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.clist"] = "Category Code/Category ID" //Kategori Kodu/Kategori ID'si
RelatedDigital.customEvent(
context = context,
pageName = "Category View",
properties = parameters
) |
Arama
Kullanıcının uygulamanızda yaptığı arama bilgisini göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.OSS"] = "Text Searched" //Aranan Metin
parameters["OM.OSSR"] = "Number of Results" //Sonuç Sayısı
RelatedDigital.customEvent(
context = context,
pageName = "Search",
properties = parameters
) |
Banner Tıklaması
Kullanıcının uygulamanızdaki bir banner a tıklaması bilgisini göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.OSB"] = "Banner Name/Banner Code" //Banner İsmi/Banner Kodu
RelatedDigital.customEvent(
context = context,
pageName = "Banner Click",
properties = parameters
) |
Favorilere Ekleme
Kullanıcının favorilerine ürün eklemesi bilgisini göndermek için aşağıdaki customEvent metodunu kullanabilirsiniz.
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
parameters["OM.pf"] = "Product Code" //Ürün Kodu
parameters["OM.pfu"] = "1" //Banner İsmi/Banner Kodu
parameters["OM.pfr"] = "Product Price" //Ürün Fiyatı
RelatedDigital.customEvent(
context = context,
pageName = "/om_evt.gif",
properties = parameters
) |
...
Favorilerden Çıkarma
Kullanıcı favorilerinden bir ürün çıkardığında, aşağıdaki customEvent uygulamasını kullanın.
Code Block |
---|
HashMap<String, String> parameters= new HashMap<String, String>();
parameters.put("OM.pf","Product Code");
parameters.put("OM.pfu","-1");
parameters.put("OM.pfr","Product Price");
Visilabs.CallAPI().customEvent("/om_evt.gif", parameters, getActivity()); |
Kampanya Parametresi Yollama
Bir push mesajına tıklayarak uygulamayı başlattıktan sonra, aşağıdaki customEvent uygulamasını kullanın.
Code Block |
---|
HashMap<String, String> properties = new HashMap<>();
properties.put("utm_campaign","euromsg campaign");
properties.put("utm_source","euromsg");
properties.put("utm_medium","push");
Visilabs.CallAPI().sendCampaignParameters(properties, getActivity()); |
App Tracker
App tracker özelliğini kullanmak için uygulamanızın herhangi bir yerinden ve herhangi bir zaman aralığıyla (örneğin launcher activity içerisinden haftada bir) aşağıdaki metotu çağırmanız yeterlidir.
Code Block |
---|
Visilabs.CallAPI().sendTheListOfAppsInstalled(); |
NOT: Visilabs.CallAPI() dan bir Visilabs Instance'ı elde edebilmek için öncesinde Visilabs.CreateAPI() metoduyla Visilabs Instance'ının yaratılmış olması gerekir. Yukardaki metotu çağırırken buna dikkat ediniz.
Android, cihazda yüklü uygulamaların listesine erişmek için 2 seçenek sunmaktadır:
1-) Yüklü olup olmadığı bilgisi alınmak istenilen uygulamalar paket isimleriyle aşağıdaki gibi
AndroidManifest.xml dosyasına girilebilir.
Code Block |
---|
<manifest package="com.example.myApp">
<queries>
<package android:name="com.example.app1" />
<package android:name="com.example.app2" />
</queries>
...
</manifest> |
2-) Tüm yüklü uygulamaların listesini alabilmek için aşağıdaki izin AndroidManifest.xml
dosyasına girilmek zorunda.
Code Block |
---|
<uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"
tools:ignore="QueryAllPackagesPermission" /> |
yöntemde Google Play Store için bu izne neden ihtiyaç duyulduğunun açıklanması beklenebilir.
https://developer.android.com/training/basics/intents/package-visibility
yöntem herhangi bir izin gerektirmez. Bu yukarda belirtilen 2 yöntemden birisi uygulandıktan sonra Visilabs.CallAPI().sendTheListOfAppsInstalled() metotunun çağırılması yeterlidir
Lokasyon Durum Bilgisini Yollama
Kullanıcılarınızın lokasyon izin durumlarını aşağıdaki gibi sunucuya gönderebilir ve bu bilgiyi daha sonra panelde kullanabilirsiniz.
Code Block |
---|
Visilabs.CallAPI().sendLocationPermission(); |
Bu bilgi OM.locpermit parametresiyle beraber gönderilir ve aşağıdaki 3 değerden birini alabilir:
"always" : Lokasyon izni uygulama açıkken ve kapalıyken edinilmiş durumda.
"appopen" : Lokasyon izni yalnızca uygulama açıkken edinilmiş durumda.
"none" : Lokasyon izni edinilmemiş durumda.
Push Mesajı Token Kaydetme
Visilabs'ın kullanıcılara push mesajları göndermek için token alması gerekiyor. Firebase/Huawei tarafından oluşturulan belirteç değeri, OM.sys.TokenID anahtarının değeri olacaktır. OM.sys.AppID'nin değeri RMC yönetim paneli tarafından elde edilebilir. https://intelligence.relateddigital.com/a02/index#/Push/AppList bağlantısını takip edin ve ilgili push uygulamasını seçin. Uygulama App Alias değeri OM.sys.AppID'ye denk gelir. Sorun yaşarsanız lütfen RMC destek ekibiyle iletişime geçin.
Aşağıdaki parametreleri yukarıda verilen eventlerin içinde gönderebilirsiniz. Birer örnekleri Oturum Açma ve Kaydolma adımlarında gösterilmiştir.
Code Block |
---|
parameters.put("OM.sys.TokenID", token);
parameters.put("OM.sys.AppID", AppAlias); //RMC Panelden Alınacak |
...
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
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Uygulama-İçi Mesaj",
properties = parameters,
parent = activity
) |
Java
Code Block | ||
---|---|---|
| ||
HashMap<String, String> parameters = new HashMap<String, String>();
RelatedDigital.customEvent(
context,
"Uygulama-İçi Mesaj",
parameters,
activity
); |
Info |
---|
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. |
Info |
---|
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:
|
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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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
); |
Info |
---|
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 |
Ö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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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.
Code Block | ||
---|---|---|
| ||
<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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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); |
ID ile
Kotlin
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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); |
ID ile
Kotlin
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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); |
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.relateddigital.relateddigital_android.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.
Kotlin
Code Block | ||
---|---|---|
| ||
val bannerItemClickListener = object : BannerItemClickListener {
override fun bannerItemClicked(bannerLink: String?) {
if(bannerLink.isNullOrEmpty()) {
return
}
Toast.makeText(applicationContext, bannerLink, Toast.LENGTH_SHORT).show()
Log.i("link banner", bannerLink)
try {
val viewIntent = Intent(Intent.ACTION_VIEW, Uri.parse(bannerLink))
startActivity(viewIntent)
} catch (e: Exception) {
Log.e(LOG_TAG, "The link is not formatted properly!")
}
}
}
val bannerRequestListener = object : BannerRequestListener {
override fun onRequestResult(isAvailable: Boolean) {
if (!isAvailable) {
binding?.bannerListView.visibility = View.GONE
}
}
}
val properties = HashMap<String, String>()
properties["OM.inapptype"] = "banner_carousel"
binding?.bannerListView.requestBannerCarouselAction(
context = applicationContext,
properties = properties,
bannerRequestListener = bannerRequestListener,
bannerItemClickListener = bannerItemClickListener
) |
Java
Code Block | ||
---|---|---|
| ||
BannerItemClickListener bannerItemClickListener = new BannerItemClickListener() {
@Override
public void bannerItemClicked(String bannerLink) {
if(bannerLink == null || bannerLink.isEmpty()) {
return;
}
Toast.makeText(getApplicationContext(), bannerLink, Toast.LENGTH_SHORT).show();
Log.i("link banner", bannerLink);
try {
Intent viewIntent = new Intent(Intent.ACTION_VIEW, Uri.parse(bannerLink));
startActivity(viewIntent);
} catch (Exception e) {
Log.e(LOG_TAG, "The link is not formatted properly!");
}
}
};
BannerRequestListener bannerRequestListener = new BannerRequestListener() {
@Override
public void onRequestResult(boolean isAvailable) {
if (!isAvailable) {
binding.bannerListView.visibility = View.GONE;
}
}
};
HashMap<String, String> properties = new HashMap<String, String>();
properties.put("OM.inapptype", "banner_carousel");
binding.bannerListView.requestBannerCarouselAction(
applicationContext,
properties,
bannerRequestListener,
bannerItemClickListener
); |
Öneriler Aksiyonu
Öneriler aksiyonunu uygulamanızda aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
Code Block | ||
---|---|---|
| ||
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")
//Bu şekilde devam eder...
}
} 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
Code Block | ||
---|---|---|
| ||
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
Code Block | ||
---|---|---|
| ||
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")
//Bu şekilde devam eder...
}
} 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
Code Block | ||
---|---|---|
| ||
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.
Info |
---|
örnek callback metodunda herbir ürün için "qs" parametresinin nasıl elde edilebileceğini görebilirsiniz. |
Kotlin
Code Block | ||
---|---|---|
| ||
RelatedDigital.trackRecommendationClick(
context = context,
qs = qs) |
Java
Code Block | ||
---|---|---|
| ||
RelatedDigital.trackRecommendationClick(
context,
qs); |
Mail Üyelik Formu
RMC panel üzerinden oluşturduğunuz mail üyelik formu aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Mail Üyelik",
properties = parameters,
parent = activity
) |
Java
Code Block | ||
---|---|---|
| ||
HashMap<String, String> parameters = new HashMap<String, String>();
RelatedDigital.customEvent(
context,
"Mail Üyelik",
parameters,
activity
); |
...
Info |
---|
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:
|
Çarkıfelek (Spin To Win)
RMC panel üzerinden oluşturduğunuz çarkıfelek aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Çarkıfelek",
properties = parameters,
parent = activity
) |
Java
Code Block | ||
---|---|---|
| ||
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 |
---|---|
|
|
Info |
---|
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:
|
Aşağıdaki kodu kullanarak kazanılan çarkıfelek dilimindeki linki yakalayabilir ve kullanıcıyı istediğiniz sayfaya yönlendirebilirsiniz. Kodu istediğiniz bir activity içerisine eklemeniz yeterlidir.
NOT: Bu receiver sdkmızın ekli olduğu tüm uygulamalarda Çarkıfelek aksiyonunu dinler. Sorun yaşamamak adına lütfen gelen linkte önce kendi urlinizi doğrulayıp yönlendirme yapınç
Code Block |
---|
private val broad = object: BroadcastReceiver() {
override fun onReceive(context: Context ? , intent : Intent ? ) {
when(intent?.action) {
"InAppLink" -> {
val string = intent.getStringExtra("link")
Log.i("Deeplink", "Received deeplink: $string")
}
}
}
}
//OnCreate() fonskiyonu içinde
val intentFilter = IntentFilter("InAppLink")
registerReceiver(broad, intentFilter)
// onDestroy() fonksiyonu içinde
override fun onDestroy() {
super.onDestroy()
unregisterReceiver(broad)
} |
Kazı Kazan (Scratch To Win)
RMC panel üzerinden oluşturduğunuz kazı-kazan aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Kazı Kazan",
properties = parameters,
parent = activity
) |
Java
Code Block | ||
---|---|---|
| ||
HashMap<String, String> parameters = new HashMap<String, String>();
RelatedDigital.customEvent(
context,
"Kazı Kazan",
parameters,
activity
); |
...
Info |
---|
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:
|
Hediye Yağmuru (Gift Rain)
RMC panel üzerinden oluşturduğunuz kazı-kazan aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Hediye Yağmuru",
properties = parameters,
parent = activity
) |
Java
Code Block | ||
---|---|---|
| ||
HashMap<String, String> parameters = new HashMap<String, String>();
RelatedDigital.customEvent(
context,
"Hediye Yağmuru",
parameters,
activity
); |
Ürün Durum Bilgisi
RMC panel üzerinden oluşturduğunuz ürüm durum bilgisi aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Ürün Durum Bilgisi",
properties = parameters,
parent = activity
) |
Java
Code Block | ||
---|---|---|
| ||
HashMap<String, String> parameters = new HashMap<String, String>();
RelatedDigital.customEvent(
context,
"Ürün Durum Bilgisi",
parameters,
activity
); |
...
Info |
---|
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:
|
Kulakçık
RMC panel üzerinden oluşturduğunuz kulakçık aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
Kotlin
Code Block | ||
---|---|---|
| ||
val parameters = HashMap<String, String>()
RelatedDigital.customEvent(
context = context,
pageName = "Kulakçık",
properties = parameters,
parent = activity
) |
Java
Code Block | ||
---|---|---|
| ||
HashMap<String, String> parameters = new HashMap<String, String>();
RelatedDigital.customEvent(
context,
"Kulakçık",
parameters,
activity
); |
...
Info |
---|
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:
|