In App Notifications Modülü
In-App Message
In-App Messages, doğrudan mobil uygulamanızda etkin olduklarında kullanıcılarınıza gösterilen bildirimlerdir. In-App Message özelliğini etkinleştirmek için RelatedDigital.initialize metodundan hemen sonra aşağıdaki kodu ekleyin.
RelatedDigital.inAppNotificationsEnabled = true
Her customEvent çağrısından sonra In-App Message olup olmadığı kontrol edilir. RMC yönetim panelinin https://intelligence.relateddigital.com/#Target/TargetingAction/TAList sayfasında In-App Message oluşturabilir ve özelleştirebilirsiniz.
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 & İkinci Popup | Yarım Ekran Görsel | Carousel |
|
|
|
Video | Kulakçık |
|
|
|
|
Eğer inappler için eklediğiniz linkleri kendiniz yönetmek isterseniz aşağıdaki adımı uygulayabilirsiniz.
Öncelikle delegate metodunu çağırmalısınız.
RelatedDigital.inappButtonDelegate = self
Ardından extension bloğunu ekleyip aşağıdaki kodu kendinize göre düzenleyebilirsiniz.
extension YOUR_VIEW_CONTROLLER: RDInappButtonDelegate {
func didTapButton(_ notification: RDInAppNotification) {
print("notification did tapped...")
print(notification)
}
}
In-App Custom Font Kullanımı
Öncelikle In-App’te kullanmak istediğiniz fontu projenizin root dizinine atın.
Ardından root dizine attığınız fontu Info.plist’te uzantısı (.ttf veya .otf) ile beraber tanımlamanız gerekmektedir. Örn: Sydney.ttf
<key>UIAppFonts</key>
<array>
<string>FONT_NAME</string>
</array>
Favori Özellikler Aksiyonu
RMC panelindeki https://intelligence.relateddigital.com/#Target/TargetingAction/TAList/ bölümünden tanımladığınız Favori Özellik Aksiyonu türündeki Target Aksiyonu favori özelliklerine aşağıdaki gibi mobil uygulama üzerinden erişebilirsiniz.
RelatedDigital.getFavoriteAttributeActions { (response) in
if let error = response.error {
print(error)
} else {
if let favoriteBrands = response.favorites[.brand] {
for brand in favoriteBrands {
print(brand)
}
}
if let favoriteCategories = response.favorites[.category] {
for category in favoriteCategories {
print(category)
}
}
}
}
İsterseniz Target Aksiyonun ID’sini belirterek favori özellik aksiyonunun özelliklerine erişebilirsiniz.
RelatedDigital.getFavoriteAttributeActions(actionId: 188) { (response) in
if let error = response.error {
print(error)
} else {
if let favoriteBrands = response.favorites[.brand] {
for brand in favoriteBrands {
print(brand)
}
}
if let favoriteCategories = response.favorites[.category] {
for category in favoriteCategories {
print(category)
}
}
}
}
Favori Özellikler Aksiyonu enum olarak aşağıdaki değerleri döner.
public enum VisilabsFavoriteAttribute: String {
case ageGroup
case attr1
case attr2
case attr3
case attr4
case attr5
case attr6
case attr7
case attr8
case attr9
case attr10
case brand
case category
case color
case gender
case material
case title
}
Story Manager
Story Banner ve Story Aksiyonu
Hikaye Aksiyonu, uygulamanız içerisinde iOS cihazlarda görüntülenebilecek “Story” widgetları eklemenize olanak sağlar. getStoryView metodu, UIView altsınıfı olan RDStoryHomeView örneğini döndürür.
let storyView = RelatedDigital.getStoryView()
view.addSubview(storyView)
Ayrıca Target Aksiyonu ID’sine göre de istediğiniz bir Hikaye Aksiyonunu çağırabilirsiniz.
let storyView = RelatedDigital.getStoryView(actionId: 67)
view.addSubview(storyView)
Tıklanabilir bir URL eklerseniz, bunu tarayıcıda açmak için framework veya direkt deeplink ile yönetebilirsiniz. Ancak kendi tarafınızda yönetebilmek için RDStoryURLDelegate’e uyan classlara aşağıdaki kodu eklemeniz gereklidir.
extension YOUR_VIEW_CONTROLLER: RDStoryURLDelegate {
func urlClicked(_ url: URL) {
print("You can handle url as you like!")
}
}
Bu eklenti sonrasında urlDelegate self ayarlaması yapın.
let storyView = RelatedDigital.getStoryView(actionId: 67, urlDelegate: self)
view.addSubview(storyHomeView)
RDStoryURLDelegate eklenmesi sonrasında tıklanabilir URL SDK tarafından işlenmez!
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.
Çarkıfelek (Spin To Win)
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.
Çarkıfelek Yarım Görünüm | Çarkıfelek Tam Görünüm |
---|---|
Çarkıfelek’te slice’dan gelen linki almak için aşağıdaki adımı izleyebilirsiniz ve kullanıcılarınız istediğiniz sayfaya yönlendirebilirsiniz.
func sliceListener() {
NotificationCenter.default.addObserver(forName: Notification.Name("InAppLink"), object: nil, queue: .main) { notification in
if let userInfo = notification.userInfo, let link = userInfo["link"] as? String {
print("Received InAppLink: \(link)")
}
}
}
Kazı Kazan (Scratch To Win)
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.
Hediye Yağmuru (Gift Rain)
RMC panel üzerinden oluşturduğunuz kazı-kazan aksiyonunu aşağıdaki gibi tetikleyebilirsiniz.
App Banner
App Banner aksiyonunu kullanmak için öncelikle uygulamanızda istediğiniz bir alanda UIView oluşturup eklemeniz gerekmektedir. Ardından getBannerView metodunu çağırarak bannerları bu UIView içerisinde gösterebilirsiniz. Aşağıda örnek olarak bir UIView oluşturma ve bu UIView içerisinde bannerları göstermeyi bulabilirsiniz.
let bannerView = UIView()
bannerView.translatesAutoresizingMaskIntoConstraints = false
self.view.addSubview(bannerView)
NSLayoutConstraint.activate([bannerView.topAnchor.constraint(equalTo: self.view.topAnchor,constant: 80),
bannerView.heightAnchor.constraint(equalToConstant: 80),
bannerView.leadingAnchor.constraint(equalTo: self.view.leadingAnchor),
bannerView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)])
bannerView.backgroundColor = .black
var props = [String:String]()
props["OM.inapptype"] = "banner_carousel"
RelatedDigital.getBannerView(properties: props) { banner in
if let banner = banner {
banner.delegate = self
banner.translatesAutoresizingMaskIntoConstraints = false
bannerView.addSubview(banner)
NSLayoutConstraint.activate([banner.topAnchor.constraint(equalTo: bannerView.topAnchor),
banner.bottomAnchor.constraint(equalTo: bannerView.bottomAnchor),
banner.leadingAnchor.constraint(equalTo: bannerView.leadingAnchor),
banner.trailingAnchor.constraint(equalTo: bannerView.trailingAnchor)])
}
}
Dilerseniz properties parametresi ile ekstra query parametreleri gönderebilirsiniz. Eğer kullanmak istemezseniz properties parametresini properties: [String:String] olarak değiştirebilirsiniz.
Kullanıcılarınız bannera click işlemini gerçekleştirdiğinde deeplinklerin sizin tarafınızdan handle edilip yönlendirme yapılması gerekmektedir. Bunun için ilgili class’a BannerDelegate’i eklemelisiniz.
class ViewController: UIViewController, BannerDelegate
Ardından aşağıdaki fonksiyonu ekleyerek kendinize göre düzenleyebilirsiniz.
func bannerItemClickListener(url: String) {
print(url)
}
Ü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.
Recommendation
Ürün önerileri, SDK’nın recommend metoduyla elde edilir. Ürün önerilerini almak için zoneId, productCode olan 2 zorunlu argümanı iletmelisiniz.
RDProduct
sınıfı aşağıdaki özelliklere bakar:
Property | Type |
---|---|
code | String |
title | String |
img | String |
dest_url | String |
brand | String |
price | Double |
dprice | Double |
cur | String |
dcur | String |
freeshipping | Bool |
samedayshipping | Bool |
rating | Int |
comment | Int |
discount | Double |
attr1 | String |
attr2 | String |
attr3 | String |
attr4 | String |
attr5 | String |
Completion yönteminde verilen argümanlar için önerilen ürünler mevcutsa, ürün dizisini işlemeniz gerekir.
RelatedDigital.recommend(zoneID: "6", productCode: "pc", filters: []){ response in
if let error = response.error {
print(error)
}else{
print("Recommended Products")
for product in response.products{
print("product code: \(product.code) title: \(product.title)")
}
}
}
Recommend metodu için bir dizi filtre de iletebilirsiniz. Örneğin, aşağıdaki uygulama yalnızca başlıkta laptop içeren ürünleri döndürür.
var filters = [RDRecommendationFilter]()
let filter = RDRecommendationFilter(attribute: .PRODUCTNAME, filterType: .like, value: "laptop")
filters.append(filter)
var properties = [String: String]()
properties["key"] = "value"
RelatedDigital.recommend(zoneID: "6", productCode: "pc", filters: filters, properties: properties){ response in
if let error = response.error{
print(error)
}else{
print("Widget Title: \(response.widgetTitle)")
print("Recommended Products")
for product in response.products{
print("product code: \(product.code) title: \(product.title)")
}
}
}
Recommendation Click Raporları
Widgetta bulunan ürünlere tıklama sonrası panelde raporları görüntüleyebilmek için aşağıdaki kodu recommend metodu içerisinde çağırmanız gerekmektedir.
RelatedDigital.trackRecommendationClick(qs: product.qs)
Related content
Copyright 2020 Related Digital