...
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 In-App | ||
Eğer inappler için eklediğiniz linkleri kendiniz yönetmek isterseniz aşağıdaki adımı uygulayabilirsiniz.
...
Code Block | ||
---|---|---|
| ||
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 VisilabsStoryHomeView örneğini döndürür.
Code Block | ||
---|---|---|
| ||
let storyView = Visilabs.callAPI().getStoryView()
view.addSubview(storyView) |
Ayrıca Target Aksiyonu ID’sine göre de istediğiniz bir Hikaye Aksiyonunu çağırabilirsiniz.
...
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
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 |
---|---|
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.
...
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.
Code Block | ||
---|---|---|
| ||
let storyViewbannerView = Visilabs.callAPIUIView().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 VisilabsStoryURLDelegate'e uyan classlara aşağıdaki kodu eklemeniz gereklidir.
Code Block |
---|
extension StoryViewController: VisilabsStoryURLDelegate { bannerView.translatesAutoresizingMaskIntoConstraints = false func urlClicked(_ url: URL self.view.addSubview(bannerView) { //TO DONSLayoutConstraint.activate([bannerView.topAnchor.constraint(equalTo: self.view.topAnchor,constant: 80), } } |
Bu eklenti sonrasında urlDelegate self ayarlaması yapın.
Code Block |
---|
let storyView = Visilabs.callAPI().getStoryView(actionId: 67, urlDelegate: self) view.addSubview(storyHomeView) |
VisilabsStoryURLDelegate 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
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
...
...
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.
...
Ü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.
...
Geofencing
Uygulamanızda konum hizmetlerini etkinleştirmek için öncelikle aşağıdaki anahtarları Info.plist dosyanıza eklemeniz gerekir.
NSLocationAlwaysAndWhenInUseUsageDescription
NSLocationWhenInUseUsageDescription
Bu izinlerin örnek uygulaması aşağıdaki gibidir:
Code Block | ||
---|---|---|
| ||
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>We need access to your location for better user experience.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>We need access to your location for better user experience.</string> |
Ayrıca bölgeleri izlemek, bölge listesini yenilemek ve push bildirimlerini almak için Info.plist dosyanızda UIBackgroundModes altına aşağıdaki anahtarları eklemeniz gerekir.
Code Block | ||
---|---|---|
| ||
<array>
<string>fetch</string>
<string>location</string>
<string>remote-notification</string>
</array> |
Visilabs SDK'yı başlatırken createAPI yönteminin geofenceEnabled parametresini true olarak ayarlamanız gerekir. Ayrıca maxGeofenceCount değerini 20'den daha düşük bir değerle değiştirebilirsiniz. Apple, herhangi bir uygulamanın aynı anda 20'den fazla bölgeyi izlemesini engeller. Visilabs tüm bu yuvaları kullanabilir.
Code Block | ||
---|---|---|
| ||
import VisilabsIOS func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 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" Visilabs.getBannerView(properties: props) { banner in if let banner = banner { Visilabs.createAPI(organizationId: "YOUR_ORGANIZATION_ID", profileId: "YOUR_PROFILE_ID" , dataSource: "YOUR_DATASOURCE", inAppNotificationsEnabled: false, channel: "IOS" , requestTimeoutInSeconds: 30, geofenceEnabled: true, maxGeofenceCount: 20) return true } |
Recommendation
Ürün önerileri, SDK’nın recommend metoduyla elde edilir. Ürün önerilerini almak için zoneId, productCode ve complete olan 3 zorunlu argümanı iletmelisiniz.
completion parametresi, bir VisilabsRecommendationResponse örneğini girdi olarak alan ve hiçbir şey döndürmeyen bir kapatma ifadesidir. VisilabsRecommendationResponse'un yapısı aşağıda gösterilmiştir:
Code Block | ||
---|---|---|
| ||
public class VisilabsRecommendationResponse {
public var products: [VisilabsProduct]
public var error: VisilabsError?
public var widgetTitle: String = ""
internal init(products: [VisilabsProduct], widgetTitle: String = "", error: VisilabsError? = nil) {
self.products = products
self.widgetTitle = widgetTitle
self.error = error
}
}
|
VisilabsProduct
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.
Code Block | ||
---|---|---|
| ||
Visilabs.callAPI().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.
Code Block | ||
---|---|---|
| ||
var filters = [VisilabsRecommendationFilter]()
let filter = VisilabsRecommendationFilter(attribute: .PRODUCTNAME, filterType: .like, value: "laptop")
filters.append(filter)
var properties = [String: String]()
properties["key"] = "value"
Visilabs.callAPI().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)")
}
}
}
|
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.
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.
Code Block | ||
---|---|---|
| ||
Visilabs.callAPI().trackRecommendationClick(qs: product.qs) |
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.
Code Block |
---|
class ViewController: UIViewController, BannerDelegate |
Ardından aşağıdaki fonksiyonu ekleyerek kendinize göre düzenleyebilirsiniz.
Code Block |
---|
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.
...