Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

12 farklı In-App Message tasarımı mevcut:

Pop-up - Görsel, Başlık, Yazı & Buton

Mini - İkon & Yazı

Tam Ekran Görsel

Image ModifiedImage Modified

Image Modified

Tam Ekran Görsel ve Buton

Pop-up - Görsel, Başlık, Yazı ve Buton

Pop-up Anket

Image Modified

Image Modified

Image Modified

Pop-up - Yazı ve Butonlu NPS

Native Alert & Action Sheet

1-10 Puanlama NPS

Image Modified

Image Modified

Image Modified

Yıldızlı Anket & İkinci Popup

Yarım Ekran Görsel

Carousel

Image Modified

Image Modified

Image Modified

Video In-App

Image Modified

Eğer inappler için eklediğiniz linkleri kendiniz yönetmek isterseniz aşağıdaki adımı uygulayabilirsiniz.

...

Code Block
<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.

...

languageswift

...

1-10 Puanlama NPS - Inline

1-10 Puanlama NPS - Inline özelliğini kullanmak için, [String: String] özelliğinde npsItemClicked yöntemini içeren bir delegate parametresi ve isteğe bağlı bir VisilabsNpsWithNumbersContainerView nesnesi alan completionHandler
getNpsWithNumbersView yöntemini çağırabilirsiniz.

delegate parametresi, buton tıklamalarını işlemek için kullanılır ve kullanıcı butona tıkladığında tetiklenen npsItemClicked adlı bir yöntem içerir.

completionHandler ise yalnızca belirli ölçütlerle eşleşen bir eylem varsa döndürülen isteğe bağlı olarak VisilabsNpsWithNumbersContainerView nesnesini içerir. Eşleşen bir eylem yoksa, completionHandler sıfır döner.

Code Block
Visilabs.callAPI().getNpsWithNumbersView(properties: props, delegate: self){ npsView in
    DispatchQueue.main.async {
        print(error)if let npsView =  } elsenpsView {
        if let favoriteBrands = response.favorites[.brand] {
self.npsView = npsView
           for brandself.npsView in= favoriteBrandsnpsView
{                 print(brandself.view.addSubview(npsView)
            }npsView.translatesAutoresizingMaskIntoConstraints = false
      }         if let favoriteCategories = response.favorites[.category] {
  npsView.topAnchor.constraint(equalTo: self.npsWithNumbersButton.bottomAnchor, constant: -50).isActive = true
         for category in favoriteCategories {
  npsView.widthAnchor.constraint(equalTo: self.view.saferAreaLayoutGuide.widthAnchor).isActive = true
            npsView.heightAnchor.constraint(equalToConstant:  print(category)550).isActive = true
        } else {
            print("There is no nps action matching your }criteria.")
        }
    }
}

Target Aksiyonun ID’sini belirterekte favori özellik aksiyonunun özelliklerine erişebilirsiniz.

...

languageswift

...

Code Block
extension NpsViewController: VisilabsNpsWithNumbersDelegate {
    func npsItemClicked(npsLink: String?) {
        print(

...

npsLink)
    }

...

}

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.

Code Block
languageswift
Visilabs.callAPI().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)
            }
        }
    }
}

Favori Özellikler Aksiyonu enum olarak aşağıdaki değerleri döner.Target Aksiyonun ID’sini belirterekte favori özellik aksiyonunun özelliklerine erişebilirsiniz.

...

Code Block
languageswift

...

Visilabs.callAPI().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 

...

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
languageswift
let storyView = Visilabs.callAPI().getStoryView()
view.addSubview(storyView)

Ayrıca Target Aksiyonu ID’sine göre de istediğiniz bir Hikaye Aksiyonunu çağırabilirsiniz.

Code Block
languageswift
let storyView = Visilabs.callAPI().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.

...

favoriteCategories = response.favorites[.category] {
            for category in favoriteCategories {
    

...

 

...

 

...

 

...

 

...

        

...

print(category)
      

...

      }

...

Bu eklenti sonrasında urlDelegate self ayarlaması yapın


        }
    }
}

Favori Özellikler Aksiyonu enum olarak aşağıdaki değerleri döner.

let
Code Block
language
swift
public storyViewenum = 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

...

...

...

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
}

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 kazı kazan çarkıfelek oluşturduktan sonra her customEvent çağırdığınız zaman kazı kazan çarkıfelek olup olmadığı kontrol edilir ardından kazı kazan çarkıfelek gösterilir.

...

Inline Nps With Numbers

Inline Nps With Numbers görüntülemek için, [String: String] türünde bir properties parametresi, npsItemClicked yöntemini içeren bir delegate parametresi ve isteğe bağlı bir VisilabsNpsWithNumbersContainerView nesnesi alan bir completionHandler
getNpsWithNumbersView yöntemini çağırabilirsiniz.

delegate parametresi, buton tıklama olayını işlemek için kullanılır ve kullanıcı bir butona dokunduğunda tetiklenen npsItemClicked adlı bir yöntem içerir.

completionHandler, yalnızca belirli ölçütlerle eşleşen bir eylem varsa döndürülen isteğe bağlı bir VisilabsNpsWithNumbersContainerView nesnesi alır. Eşleşen bir eylem yoksa, completionHandler sıfır döndürür.

...

Çarkıfelek Yarım Görünüm

Çarkıfelek Tam Görünüm

Image Added

Image Added

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
languageswift
let bannerView = UIView()
        bannerView.translatesAutoresizingMaskIntoConstraints = false
        self.npsView = npsView.view.addSubview(bannerView)
              self.npsView = npsViewNSLayoutConstraint.activate([bannerView.topAnchor.constraint(equalTo: self.view.topAnchor,constant:  80),
            self.view.addSubview(npsView)
            npsView.translatesAutoresizingMaskIntoConstraints = false             npsViewbannerView.topAnchorheightAnchor.constraint(equalToequalToConstant: self.npsWithNumbersButton.bottomAnchor80),
constant: -50).isActive = true                     npsView.widthAnchor.constraint(equalTo: self.view.saferAreaLayoutGuide.widthAnchor).isActive = true             npsViewbannerView.heightAnchorleadingAnchor.constraint(equalToConstantequalTo: 550).isActive = trueself.view.leadingAnchor),
          } else {             print("There is no nps action matching your criteria.")     bannerView.trailingAnchor.constraint(equalTo: self.view.trailingAnchor)])
  }     }
}
Code Block
extension NpsViewController: VisilabsNpsWithNumbersDelegate { bannerView.backgroundColor = .black
     func npsItemClicked(npsLink: String?) {
        print(npsLink)
    }
}

Ü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
languageswift
<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
languageswift
<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
languageswift
import VisilabsIOS

func application(_ application: UIApplication, didFinishLaunchingWithOptions 
        launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        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
languageswift
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
languageswift
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
languageswift
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
languageswift
Visilabs.callAPI().trackRecommendationClick(qs: product.qs)
    var props = [String:String]()
        props["OM.inapptype"] = "banner_carousel"
        
        Visilabs.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.

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.

...