KURULUM

İçindekiler


Önsöz


WebInStats sisteminin uygulamalarınızda ve web sitenizde çalışması için bu sayfadaki adımları takip etmeniz gereklidir. Yapılacak işlemler Android, iOs ve Web için ayrı tablarda belirtilmiştir.

 

Admin panelde kayıt açılması


Eğer WebInStats hesabınız yok ise öncelikle Admin Panel üzerinden kayıt oluşturmalısınız. Bunun için lütfen buraya tıklayınız. Kayıt oluşturduktan sonra e-posta adresinize gelen aktivasyon linkini tıklamalısınız. Daha sonra Create New Company sayfasında New butonuna tıklayarak yeni firma oluşturmalısınız. Yeni firma oluştururken aşağıdaki bilgileri girmelisiniz.

 

  • Name : Bu alana firma adı girilmelidir. Örneğin www.example.com domaini sisteme girilecek ise bu alana “Example.com” ya da “Example” girebilirsiniz.
  • Sub Domain : WebInStats üzerinde clicklerinizin ve linkleriniz takibi için bir subdomain oluşturulmaktadır. Bu alana sadece ingilizce harf ya da rakam girilmelidir. Örneğin www.example.com domaini için kayıt oluşturulacak ise bu alana example girebilirsiniz.  Bu sayede domaininize ait istekler example.webinstats.com üzerinden toplanacaktır.
  • Web Site : Bu alana websitenizin URL bilgisi girilmelidir. Örneğin www.example.com için http://www.example.com girilmelidir.
  • Time Zone : Bulunduğunuz bölgenin Time Zone bilgisini buradan seçebilirsiniz. Örneğin Türkiye için Europe/Istanbul, Londra için Europe/London seçmelisiniz. Bu alan düzgün seçilmez ise raporlamalarda düzgün veri alamayabilirsiniz.
  • Character Set : Web Sitenizin karakter seti bu alana tanımlanmalıdır. Bu alanın değeri büyük ölçüde utf-8 dir. Ancak eski bir web siteniz var ise Web masterınızdan bu bilgiyi öğrenerek değeri girmelisiniz. Eğer siteniz ISO-8859-9 karakter setinde ise ve siz bu alandan UTF-8 tanımladıysanız Bannerlarda Türkçe lokal karakterlerde sıkıntı yaşabilirsiniz.

Bu alanları doldurduktan sonra Save (Kaydet) butonuna tıkladığınızda yeni kaydınız oluşacaktır.

WebInStats SDKnın indirilmesi ve siteye / uygulamaya eklenmesi


Firmanızı oluşturduktan sonra Sol menüde Select Application kısmında az önce tanımladığınız firmanın (example.com) seçili olduğundan emin olun.  Aynı bölümde firma isminizin hemen altında Admin Panel’i seçin.

 

SDK ve örnek kodların indirilmesi


WebInStats kurulumu için öncelikle ilgili SDK ya da script kodunun indirilmesi gerekmektedir. Aşağıda ilgili platform için kodların nasıl indirileceğini görebilirsiniz :

Web
Android
iOS
Web

Admin Panelde Sol Menü -> General Settings -> Generate Code ekranına gelin. Burada ilgili uygulama ya da web sitesi için gerekli kodu kopyalayın. Daha sonra aşağıdaki adımları uygulayın.

Android

Android SDK sı Android v4.1 (API 16) ve üstünde çalışır.

SDK’yı Maven ile ya da Manuel olarak projenize ekleyebilirsiniz.

1. Maven ile eklemek için :

App seviyesindeki build.gradle dosyanızı aşağıdaki script’i ekleyerek güncelleyin.


dependencies {
implementation 'webinstats.android_wis:android_wis:1.51.2'
implementation 'com.android.volley:volley:1.1.1'
}

2. Manuel olarak eklemek için :

Aşağıdaki linkten Android SDK dosyasını indirilebilirsiniz :

https://github.com/WebInStats/Android-SDK

Örnek demo uygulaması için :

https://github.com/WebInStats/Android-Demo

iOS

iOS SDK sı iOS v8.0 ve üstünde çalışır.

SDK’yı Cocoapods ile ya da Manuel olarak projenize ekleyebilirsiniz.

1. Cocoapods ile eklemek için :

a.Cocoapods’u yükleyin.


sudo gem install cocoapods

b.Eğer proje dosyanızın içinde PodFile dosyanız yok ise yeni bir tane oluşturun


pod init

c.PodFile dosyanıza aşağıdaki satırı ekleyin


pod 'iOS_wis'

d. Son olarak aşağıdaki satırı projenizin bulunduğu klasörde çalıştırarak Webinstats SDK’nızı projenize eklemeyi tamalayın.


pod install

2. Manuel olarak eklemek için :

Aşağıdaki linkten iOS SDK dosyasını indirilebilirsiniz :

https://github.com/WebInStats/iOS-SDK

Örnek demo uygulaması için :

https://github.com/WebInStats/iOS-Demo

 

Kodların Siteye / Uygulamaya eklenmesi


 

Web
Android
iOS / Swift
iOS / Objective-C
Web

Please copy this code to all of the pages on your website before the </body> tag. (Also you can add the code to the Tag Manager)


<script>
window.wiso = window.wiso || [];
window.wiso.push(
{s:"__YOUR_COMPANY_ID___"},
{_cburl:"//__YOUR_SUBDOMAIN__.webinstats.com/"},
{p:"__THE_PAGENAME_USER_CURRENTLY_VISIT__"},
{cuid:"__CUSTOMER_ID__"}, // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
{trid:"__UNIQUE_TRANSACTION_ID__"}, // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
{am:"__TRANSACTION_AMOUNT__"} // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
);
(function() {var _wis = document.createElement('script');_wis.type = 'text/javascript';_wis.async = true; 
_wis.src='//dbfukofby5ycr.cloudfront.net/a9/js/dlc1.46.js';var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(_wis, s); })();
</script>

Android

Add the line below to AndroidManifest.xml file :


<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Add the code below to each activities activity tag :


<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize">
</activity>

Complete the following steps in each activity of your application:


import webinstats.android_wis.Webinstats;
// define wiso object as a global object :
Webinstats wiso = new Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","__YOUR_COMPANY_ID___","0");
// If you use activity, you must call execute method on onCreate() method in each activity
// If you use fragment activity, you must call execute method on onCreateView() method in each fragment
Map<String,String> map=new HashMap<>();
map.put("p","__THE_PAGENAME_USER_CURRENTLY_VISIT__");
map.put("cuid","__CUSTOMER_ID__"); // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map.put("trid","__UNIQUE_TRANSACTION_ID__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map.put("am","__TRANSACTION_AMOUNT__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
// For each activity => call execute function on onCreate() method 
wiso.execute(this,map);
// For each fragment activity => call execute function on onCreateView() method F.I. :  
wiso.execute(getActivity(),map);

Add the code below to each activities onDestroy method or each Fragment onDestroyView method:


// For each activity => call execute function on onDestroy() method 
wiso.onChangeState(this);
// For each fragment activity => call execute function on onDestroyView() method F.I. :  
wiso.onChangeState(getActivity());

// Add this line to app modules dependencies


dependencies {
implementation 'com.android.volley:volley:1.1.1'
}
iOS / Swift

Paste the code below for each viewcontroller on your app

// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Swift file add the following line to the begining of the class.
import iOS_wis
// Add the code below for each viewDidLoad() method on viewcontroller
let wiso = Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0")
var map = [String:String]()
map["p"] = "__THE_PAGENAME_USER_CURRENTLY_VISIT__"
map["cuid"] = "__CUSTOMER_ID__" // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map["trid"] = "__UNIQUE_TRANSACTION_ID__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map["am"] = "__TRANSACTION_AMOUNT__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
wiso.execute(view: self, localmap: map)

 

iOS / Objective-C
// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Objective-C file add the following line to the begining of the class.
@import iOS_wis
// Add the code below for each -(void)viewDidLoad method on viewcontroller
Webinstats* wiso = [[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"];
NSMutableDictionary *map = [[NSMutableDictionary alloc] init];
[map setObject:@"__THE_PAGENAME_USER_CURRENTLY_VISIT__" forKey:@"p"];
[map setObject:@"__CUSTOMER_ID__" forKey:@"cuid"]; // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE
[map setObject:@"__UNIQUE_TRANSACTION_ID__" forKey:@"trid"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[map setObject:@"__TRANSACTION_AMOUNT__" forKey:@"am"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[wiso executeWithView:self localmap:map];

 

Push Notification Ürününün siteye / uygulamalara eklenmesi


WebInStats-PushStats ürününün uygulamalarınızda ve web sitenizde çalışması için bu sayfadaki adımları takip etmeniz gereklidir. Yapılacak işlemler Android, iOS ve Web için ayrı tablarda belirtilmiştir.

Web
Android
iOS / Swift
iOS / Objective-C
Web

Download manifest.json and sw.js files from webinstats panel.

Screen Shot 2018-12-31 at 12.52.37

Screen Shot 2018-12-31 at 12.52.48

Add those files under your domain-root folder.
e.g :

manifest : https://webinstats.com/manifest.json,
service worker : https://webinstats.com/sw.js

Android

Add your FCM application’s configuration file below the app section :

Application File Hierarchy

Add the line below to AndroidManifest.xml file between application tags :


<!-- Add your notification icon's source file to AndroidManifest.xml -->
<meta-data
android:name="push_notification_icon"
android:resource="@drawable/ntf"/>
<service
android:name="webinstats.android_wis.WebinstatsMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>

Complete the following steps in each activity of your application:


import webinstats.android_wis.Webinstats;
// define wiso object as a global object :
Webinstats wiso = new Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","__YOUR_COMPANY_ID___","0");
// If you use activity, you must call execute method on onCreate() method in each activity
// If you use fragment activity, you must call execute method on onCreateView() method in each fragment
Map<String,String> map=new HashMap<>();
map.put("p","__THE_PAGENAME_USER_CURRENTLY_VISIT__");
map.put("cuid","__CUSTOMER_ID__"); // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map.put("trid","__UNIQUE_TRANSACTION_ID__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map.put("am","__TRANSACTION_AMOUNT__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
// for app push enable add line below to map
map.put("_enable_push","1");
// For each activity => call execute function on onCreate() method 
wiso.execute(this,map);
// For each fragment activity => call execute function on onCreateView() method F.I. :  
wiso.execute(getActivity(),map);

Add the code below to each activities onDestroy method or each Fragment onDestroyView method:


// For each activity => call execute function on onDestroy() method 
wiso.onChangeState(this);
// For each fragment activity => call execute function on onDestroyView() method F.I. :  
wiso.onChangeState(getActivity());
iOS / Swift

Choose your Appname.target and enable Push Notifications in Capabilities tab


// To access methods from SDK in your AppDelegate.Swift file add the following line to the beginning of the class.
import iOS_wis

Add the codes below to the related methods. If you aren’t use the methods you should add methods to AppDelegate.Swift file

At the end of your didFinishLaunchingWithOptions method, add the following line


func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0").register(application, didFinishLaunchingWithOptions: launchOptions)
return true
}

Add the following methods, in your AppDelegate.Swift


func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {   
Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0").didReceiveNotification(application, didReceiveRemoteNotification: userInfo)
}
func application(_ application: UIApplication,
didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
let tokenParts = deviceToken.map { data -> String in
return String(format: "%02.2hhx", data)
}
let token = tokenParts.joined()
Webinstats.registerWithDeviceToken(deviceToken: token)
}

Paste the code below for each viewcontroller on your app

// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Swift file add the following line to the begining of the class.
import iOS_wis
// Add the code below for each viewDidLoad() method on viewcontroller
let wiso = Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0")
var map = [String:String]()
map["p"] = "__THE_PAGENAME_USER_CURRENTLY_VISIT__"
map["cuid"] = "__CUSTOMER_ID__" // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map["trid"] = "__UNIQUE_TRANSACTION_ID__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map["am"] = "__TRANSACTION_AMOUNT__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
// for app push enable add line below to map
map["_enable_push"] = "1"
wiso.execute(view: self, localmap: map)

 

iOS / Objective-C

Choose your Appname.target and enable Push Notifications in Capabilities tab


// To access methods from SDK in your AppDelegate.m file add the following line to the beginning of the class.
@import iOS_wis

Add the codes below to the related methods. If you aren’t use the methods you should add methods to AppDelegate.m file

At the end of your didFinishLaunchingWithOptions method, add the following line


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"] register:application didFinishLaunchingWithOptions:launchOptions];
return YES;
}

Add the following methods, in your AppDelegate.m


- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
[[[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"] didReceiveNotification:application didReceiveRemoteNotification:userInfo];
}
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
NSString * deviceTokenString = [[[[deviceToken description]
stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
NSLog(@"token : %@",deviceTokenString);
[Webinstats registerWithDeviceTokenWithDeviceToken:deviceTokenString];
}
- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
[[[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"] saveTestParametersWithUrl:url];
return YES;
}

Paste the code below for each viewcontroller on your app

// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Objective-C file add the following line to the begining of the class.
@import iOS_wis
// Add the code below for each -(void)viewDidLoad method on viewcontroller
Webinstats* wiso = [[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"];
NSMutableDictionary *map = [[NSMutableDictionary alloc] init];
[map setObject:@"__THE_PAGENAME_USER_CURRENTLY_VISIT__" forKey:@"p"];
[map setObject:@"__CUSTOMER_ID__" forKey:@"cuid"]; // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE
[map setObject:@"__UNIQUE_TRANSACTION_ID__" forKey:@"trid"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[map setObject:@"__TRANSACTION_AMOUNT__" forKey:@"am"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[map setObject:@"1" forKey:@"_enable_push"];
[wiso executeWithView:self localmap:map];

 

iOS 10 ve sonrası Büyük imajlı push gösterimi için yapılması gerekenler


Appte notification extension ekli değilse, ilk olarak notification extension eklemelisniz.

Adım 1 : File —> New —> Target kısmından Notification Extension seçiyoruz.

1

2

Notification extension’da bulunan didReceive metotunda Webinstats sdk’sında bulunan didReceiveNotification metodunu çağırıyoruz.

Swift
Objective-C
Swift

override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
self.contentHandler = contentHandler
bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
if let bestAttemptContent = bestAttemptContent { 
contentHandler(Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0").didReceiveNotificationExtension(request, bestAttemptContent))
}
}
Objective-C

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
if(_bestAttemptContent){
contentHandler([[[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"] didReceiveNotificationExtension:request :_bestAttemptContent]);
}
}

Embedded Libraries kısmında NotificationExtensionı ekliyoruz.
3

Varsayılan parametrelerin özelleştirilmesi


WebInStats kurulumunda bazı parametreler varsayılan olarak tanımlı gelir ancak bu parametreleri değiştirebilir ve site ihtiyacınıza göre özelleştirebilirsiniz. Aşağıdaki listede kullanılan sistem parametrelerini görebilirsiniz.

 

Param Name Default Value Açıklama Sample Usage
_isexec true Sayfada wiso objesini yüklemek istiyorsak ancak belli bir işlemden sonra banner sorgusunu atmak istiyorsak bu değişkeni kullanabiliriz. Eğer true ise Sayfaya script yüklendiği anda WebInStats kodu otomatik olarak çalışır. Eğer bu değer false ise kodda uygun alanda wiso._execute(); fonksiyonu elle çağırılmalıdır. Kurulum koduna
{_isexec:false},
eklenmeli gerekli işlemler yapıldıktan sonra
wiso._execute();
komutu çağırılmalıdır.
_ucisd false Local Stroage'ın kullanılamadığı durumlarda ilgili verinin cookieye yazılıp yazılamayacağını belirtir. Kurulum koduna
{_ucisd:true},
satırı eklenmelidir.
_cd '' Cookie domaini bu alana girilir. Eğer bilgi girilmez ise *.domainadi.com kullanılır. Cookie domainini my.webinstats.com olarak değiştirmek için Kurulum koduna
{_cd:'my.webinstats.com'},
satırı eklenmelidir.
_req_to 6000 Milisaniye cinsinden (6000=6saniye) server isteği zaman aşımını belirtir. Eğer kullanıcının yavaş bir bağlantısı var ise 6 saniye içinde WebInStats server'ından yanıt dönmez ise bağlantı otomatik olarak sonlandırılır. zaman aşım süresini 10 saniyeye uzatmak için kurulum koduna :
{_req_to:10000},
satırı eklenmelidir.
_fc false WebInStats'ın indirdiği dosyaların Local Strorage'da saklanıp saklanmayacağını belirtir. Örneğin her sayfada özel bir css kodu yükletiyorsanız bu özellik true ise kullanıcının cihazında css kodu bir kez yüklenir ve daha sonra Local Storage dan otomatik olarak çağırılır. (Bu parametre Local Storage kullanımının şişmesine neden olabilir. Dikkatli kullanılmalıdır.) Aktive etmek için kurulum koduna
{_fc:true},
satırı eklenmelidir.
_fct 1440 _fc=true ise dosyanın Local Storage da ne kadar süre saklanacağını dakika cinsinden belirtir. (60=1 Saat) Aktive etmek için kurulum koduna
{_fc:true},
{_fct:2880}, // 2 gün
satırı eklenmelidir.
_fcfs 40 _fc=true ise en fazla kaç Kilobayt verinin LocalStorage'da saklanabileceğini belirtir. Varsayılan değeri 40 KB dir. Kurulum koduna
{_fc:true},
{_fct:2880}, // 2 gün
{_fcfs:20}, // Max 20 KB
satırı eklenmelidir.
_cview true Viewability özelliğini açıp kapamayı sağlar. Varsayılan olarak açıktır. Bannerlarda Impression yanı sıra View verisini de gönderir. Kapatmak için kurulum koduna
{_cview:false},
eklenmelidir.
_cviewf false _cview özelliği açık ise ve bu özellik açık ise bannerın tamamı göründüğünde View olarak sayılmasını sağlar. Bu özellik kapalı ise banner'ın bir kısmı da görünse banner göründü olarak kabul edilir. Sadece bannerın tamamı göründüğünde sayması için kurulum koduna :
{_cviewf:true},
eklenmelidir
ps '/' Sayfa ayıracını belirtir. Örneğin sayfa isimlerinizde klasör yapısına benzer bir yapı kullanıyorsanız (Örn : Ürün Sayfası/Cep Telefonu/Kılıf Aksesuar) ps alanı klasör ayıracı olarak girilmelidir. Eğer Ürün Sayfası:Cep Telefonu:Kılıf Aksesuar şeklinde veri gönderiyorsanız ps ":" şeklinde girilmelidir. Bu sayede kampanyada Page kısmına Ürün Sayfası:@all yazdığınızda tüm ürün sayfalarında geçerli kampanya açabilirsiniz. Sayfa ayıracını ":" olarak değiştirmek için kurulum koduna
{ps:":"},
satırı eklenmelidir.
_cstto 1440 Klik cookiesinin varsayılan olarak ne kadar süre saklanacağını dakika cinsinden belirtir. Varsayılan 1 gündür. Kampanya bazlı özel klik cookie süresi girilmez ise bu alandaki değer geçerli olur. Varsayılan klik cookie süresini 1 saat yapmak için kurulum koduna
{_cstto:60},
eklenmelidir.
_csttoi 60 Impression cookiesinin varsayılan olarak ne kadar süre saklanacağını dakika cinsinden belirtir. Varsayılan 1 saattir. Kampanya bazlı özel Impression cookie süresi girilmez ise bu alandaki değer geçerli olur. Varsayılan impression cookie süresini 30 dakika yapmak için kurulum koduna
{_csttoi:30},
eklenmelidir.
_uto 2628000 Unique Visitor cookiesinin varsayılan olarak tutulacağı süreyi belirtir. Varsayılan olarak 5 yıldır. Kullanıcı 5 yıl içinde her yeni ziyaretinde bu süre 5 yıl daha uzar. varsayılan süreyi 1 seneye düşürmek için :
{_uto:525600},
eklenmelidir.
_vto 30 Dakika cinsinden ziyaret zaman aşımı süresidir. Kullanıcı ziyaretinde eğer 30 dakikadan fazla hareketsiz kalırsa 30 dakikadan sonra yeni bir visit olarak sayılır. Visit zaman aşımı süresini 60 dakika yapmak için kurulum koduna
{_vto:60},
satırı eklenmelidir.
_runi null Herhangi bir banner Impression'ı oluştuğunda (Kontrol Grupları da dahil) WIS banner objesi ile beraber bu fonksiyon çağırılır. Örnekte Tüm banner impressionlarını Google Analytics üzerinde saydırmak için Kurulum kodunda
{_runi:function(a){ga(ga.getAll()[0].get("name")+".send","event","WIS","impression",a.cn+"-"+a.n,!1)}},
satırı eklenmelidir.
_runv null Kullanıcı banner'ı gördüğünde WIS banner objesi ile beraber bu fonksiyon çağırılır. Tüm banner viewlarını Google Analytics üzerinde saydırmak için Kurulum kodunda
{_runv:function(a){ga(ga.getAll()[0].get("name")+".send","event","WIS","view",a.cn+"-"+a.n,!1)}},
satırı eklenmelidir.
_runc null Herhangi bir banner'a tıklandığında WIS banner objesi ile beraber bu fonksiyon çağırılır. Tüm banner kliklerini Google Analytics üzerinde saydırmak için Kurulum kodunda
{_runc:function(a){ga(ga.getAll()[0].get("name")+".send","event","WIS","click",a.cn+"-"+a.n,!1)}},
satırı eklenmelidir.
_runa null Herhangi bir action oluştuğunda Action objesi ile beraber bu fonksiyon çağırılır. Tüm Actionları Google Analytics üzerinde saydırmak için Kurulum kodunda
{_runa:function(a){ga(ga.getAll()[0].get("name")+".send","event","WIS","action",a.n,!1)}},
satırı eklenmelidir.
_runar null Herhangi bir action silindiğinde Action objesi ile beraber bu fonksiyon çağırılır. Tüm Actionlar silinmelerini Google Analytics üzerinde saydırmak için Kurulum kodunda
{_runar:function(a){ga(ga.getAll()[0].get("name")+".send","event","WIS","actionremove",a.n,!1)}},
satırı eklenmelidir.
_sck false Eğer siteniz tamamen https ise WebInStats'ın cookieleri güvenli olarak oluşturması için bu özellik aktif edilebilir. Bu özelliği sadece kurulumda 1 kez ayarlamalısınız. Sitede tüm cookieleri secure olarak ayarlamak için kurulum kodunda
{_sck:true},
satırı eklenmelidir.

 

Aşağıdaki örneklerde varsayılan _vto (Visit Timeout) parametresini 60 dakika, _req_to (Request Timeout) parametresini ise 10000 ms (10 sn) olarak değiştirmek için gerekli adımları bulabilirsiniz. :

 

Web
Android
iOS / Swift
iOS / Objective-C
Web

Please copy this code to all of the pages on your website before the </body> tag. (Also you can add the code to the Tag Manager)

<script>
window.wiso = window.wiso || [];
window.wiso.push(
{s:"__YOUR_COMPANY_ID___"},
{_cburl:"//__YOUR_SUBDOMAIN__.webinstats.com/"},
{p:"__THE_PAGENAME_USER_CURRENTLY_VISIT__"},
{cuid:"__CUSTOMER_ID__"}, // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
{trid:"__UNIQUE_TRANSACTION_ID__"}, // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
{am:"__TRANSACTION_AMOUNT__"}, // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
{_vto:"60"},
{_req_to:"10000"}
);
(function() {var _wis = document.createElement('script');_wis.type = 'text/javascript';_wis.async = true; 
_wis.src='//dbfukofby5ycr.cloudfront.net/a9/js/dlc1.46.js';var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(_wis, s); })();
</script>

Android

Add the line below to AndroidManifest.xml file :


<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Add the code below to each activities activity tag :


<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize">
</activity>

Complete the following steps in each activity of your application:

import webinstats.android_wis.Webinstats;
// define wiso object as a global object :
Webinstats wiso = new Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","__YOUR_COMPANY_ID___","0");
// If you use activity, you must call execute method on onCreate() method in each activity
// If you use fragment activity, you must call execute method on onCreateView() method in each fragment
Map<String,String> map=new HashMap<>();
map.put("p","__THE_PAGENAME_USER_CURRENTLY_VISIT__");
map.put("cuid","__CUSTOMER_ID__"); // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map.put("trid","__UNIQUE_TRANSACTION_ID__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map.put("am","__TRANSACTION_AMOUNT__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map.put("_vto","60");
map.put("_req_to","10000");
// For each activity => call execute function on onCreate() method 
wiso.execute(this,map);
// For each fragment activity => call execute function on onCreateView() method F.I. :  
wiso.execute(getActivity(),map);

Add the code below to each activities onDestroy method or each Fragment onDestroyView method:


// For each activity => call execute function on onDestroy() method 
wiso.onChangeState(this);
// For each fragment activity => call execute function on onDestroyView() method F.I. :  
wiso.onChangeState(getActivity());
iOS / Swift

Paste the code below for each viewcontroller on your app

// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Swift file add the following line to the begining of the class.
import iOS_wis
// Add the code below for each viewDidLoad() method on viewcontroller
let wiso = Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0")
var map = [String:String]()
map["p"] = "__THE_PAGENAME_USER_CURRENTLY_VISIT__"
map["cuid"] = "__CUSTOMER_ID__" // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map["trid"] = "__UNIQUE_TRANSACTION_ID__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map["am"] = "__TRANSACTION_AMOUNT__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map["_vto"] = "60"
map["_req_to"] = "10000"
wiso.execute(view: self, localmap: map)
iOS / Objective-C

Paste the code below for each viewcontroller on your app

// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Objective-C file add the following line to the begining of the class.
@import iOS_wis
// Add the code below for each -(void)viewDidLoad method on viewcontroller
Webinstats* wiso = [[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"];
NSMutableDictionary *map = [[NSMutableDictionary alloc] init];
[map setObject:@"__THE_PAGENAME_USER_CURRENTLY_VISIT__" forKey:@"p"];
[map setObject:@"__CUSTOMER_ID__" forKey:@"cuid"]; // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE
[map setObject:@"__UNIQUE_TRANSACTION_ID__" forKey:@"trid"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[map setObject:@"__TRANSACTION_AMOUNT__" forKey:@"am"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[map setObject:@"60" forKey:@"_vto"];
[map setObject:@"10000" forKey:@"_req_to"];
[wiso executeWithView:self localmap:map];

 

 

 

Sisteme ilave parametre gönderimi


O anda sitenizi gezen kullanıcı ya da gezilen sayfa ile ilgili özel bilgileri sisteme yollayarak bu bilgilere göre kampanya gösterim işlemi yapabilirsiniz. Sisteme ilave parametre göndermek için parametre isimleri düzgün belirlenmeli, mümkünse prefix kullanılarak takibi daha kolay yapılmalıdır. Örneğin firma ismimiz Example Company ise parametre isimlerini exa ile başlatabiliriz. Bu sayede kendi parametre tabikimizi daha kolay yapabiliriz. Parametre isimlerini belirlerken aşağıdaki kurallara dikkat edilmelidir :

  • Parametre ismi wis_ ile başlayamaz.
  • Parametre ismi _ ile başlayamaz.
  • Parametre ismi numerik değer ile başlayamaz.
  • Parametre isminde _ dışında noktalama, parantez vs.. gibi işaretler geçemez. _ ise en başta olamaz.
  • Parametre isimlerinde Türkçe karakter kullanılamaz.
  • Tercihen en az 5 harfli en fazla 20 harfli parametre adı kullanın.

 

Yanlış parametre isimleri

wis_cinsiyet : (Parametre adı wis_ ile başlamamalıdır.)

_cinsiyet : (Parametre adı _ ile başlamamalıdır.)

s : WebInStats özel parametresidir. bu linkten WebInStats sistem parametrelerini, bu linkten ise firmanıza özel tanımlanan parametreleri lütfen kontrol edin. Tercihen en az 5 harfli parametre adı kullanın.

segment.3 : Noktalama, virgül, parantez işaretleri kullanılmamalıdır.

segment[3] : Noktalama, virgül, parantez işaretleri kullanılmamalıdır.

segment(3) : Noktalama, virgül, parantez işaretleri kullanılmamalıdır.

segment-3 : Eksi ya da artı işareti kullanılmamalıdır.

eski_segment_3_degeri :Parametre adı 20 karakterden fazla olmamalıdır.

3segment :Parametre ismi rakam ile başlamamalıdır.

doğumtarihi : Türkçe karakter kullanılmamalıdır.

dogum tarihi : Boşluk kullanılmamalıdır.

Doğru parametre isimleri : 

cinsiyet

segment3

segment_3

dogumtarihi

dogum_tarihi

segment3value

 

Örneğin kullanıcının cinsiyetini ve toplam alışveriş adetini ilave parametre olarak göndermek istediğimizi düşünelim : Bu parametreler için exagender (cinsiyet) ve exatranscnt (alışveriş adeti) parametre isimlerini kullandığımızı düşünelim. Bu durumda parametreleri ilgili sayfaya / uygulamaya aşağıdaki şekilde ekleyebiliriz :

 

Web
Android
iOS / Swift
iOS / Objective-C
Web

Please copy this code to all of the pages on your website before the </body> tag. (Also you can add the code to the Tag Manager)

<script>
window.wiso = window.wiso || [];
window.wiso.push(
{s:"__YOUR_COMPANY_ID___"},
{_cburl:"//__YOUR_SUBDOMAIN__.webinstats.com/"},
{p:"__THE_PAGENAME_USER_CURRENTLY_VISIT__"},
{cuid:"__CUSTOMER_ID__"}, // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
{trid:"__UNIQUE_TRANSACTION_ID__"}, // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
{am:"__TRANSACTION_AMOUNT__"}, // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
{exagender:"Female"},
{exatranscnt:"765"}
);
(function() {var _wis = document.createElement('script');_wis.type = 'text/javascript';_wis.async = true; 
_wis.src='//dbfukofby5ycr.cloudfront.net/a9/js/dlc1.46.js';var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(_wis, s); })();
</script>

Android

Add the line below to AndroidManifest.xml file :


<uses-permission android:name="android.permission.INTERNET"></uses-permission>

Add the code below to each activities activity tag :


<activity android:name=".MainActivity"
android:configChanges="orientation|screenSize">
</activity>

Complete the following steps in each activity of your application:

import webinstats.android_wis.Webinstats;
// define wiso object as a global object :
Webinstats wiso = new Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","__YOUR_COMPANY_ID___","0");
// If you use activity, you must call execute method on onCreate() method in each activity
// If you use fragment activity, you must call execute method on onCreateView() method in each fragment
Map<String,String> map=new HashMap<>();
map.put("p","__THE_PAGENAME_USER_CURRENTLY_VISIT__");
map.put("cuid","__CUSTOMER_ID__"); // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map.put("trid","__UNIQUE_TRANSACTION_ID__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map.put("am","__TRANSACTION_AMOUNT__"); // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map.put("exagender","Female");
map.put("exatranscnt","765");
// For each activity => call execute function on onCreate() method 
wiso.execute(this,map);
// For each fragment activity => call execute function on onCreateView() method F.I. :  
wiso.execute(getActivity(),map);

Add the code below to each activities onDestroy method or each Fragment onDestroyView method:


// For each activity => call execute function on onDestroy() method 
wiso.onChangeState(this);
// For each fragment activity => call execute function on onDestroyView() method F.I. :  
wiso.onChangeState(getActivity());
iOS / Swift

Paste the code below for each viewcontroller on your app

// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Swift file add the following line to the begining of the class.
import iOS_wis
// Add the code below for each viewDidLoad() method on viewcontroller
let wiso = Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0")
var map = [String:String]()
map["p"] = "__THE_PAGENAME_USER_CURRENTLY_VISIT__"
map["cuid"] = "__CUSTOMER_ID__" // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE 
map["trid"] = "__UNIQUE_TRANSACTION_ID__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map["am"] = "__TRANSACTION_AMOUNT__" // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
map["exagender"] = "Female"
map["exatranscnt"] = "765"
wiso.execute(view: self, localmap: map)
iOS / Objective-C

Paste the code below for each viewcontroller on your app

// You should add Allow Arbitrary Loads = YES under App Transport Security Settings in info.plist file to use the SDK.
// To access methods from SDK in your Objective-C file add the following line to the begining of the class.
@import iOS_wis
// Add the code below for each -(void)viewDidLoad method on viewcontroller
Webinstats* wiso = [[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"];
NSMutableDictionary *map = [[NSMutableDictionary alloc] init];
[map setObject:@"__THE_PAGENAME_USER_CURRENTLY_VISIT__" forKey:@"p"];
[map setObject:@"__CUSTOMER_ID__" forKey:@"cuid"]; // LEAVE THIS EMPTY IF USER IS NOT LOGGEDIN
// TWO PARAMETERS BELOW SHOULD BE ON THE PURCHASE PAGE
[map setObject:@"__UNIQUE_TRANSACTION_ID__" forKey:@"trid"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[map setObject:@"__TRANSACTION_AMOUNT__" forKey:@"am"]; // LEAVE THIS EMPTY IF IT'S NOT PURCHASE PAGE
[map setObject:@"Female" forKey:@"exagender"];
[map setObject:@"765" forKey:@"exatranscnt"];
[wiso executeWithView:self localmap:map];

Uygulamalarda Inline Banner entegrasyonu için yapılması gerekenler


Android
IOS
Android

Inline Banner için belirlediğiniz alanda sayfanın xml’ine FrameLayout tipinde bir container eklenmeli. Eklenen container’a id atanmalı. Bu id inline banner kampanya tanımlamaları için Advanced tab’ında bulunan selector kısmına yazılmalı.

Screen Shot 2018-09-10 at 10.10.08


<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:id="@+id/inlinebanner"
android:visibility="invisible">
</FrameLayout>
IOS

Inline banner için belirlediğiniz alanda belirlediğiniz yükseklikte bir container ekleyip restorationidentifier kısmına id atanmalı. Bu id inline banner kampanya tanımlamaları için Advanced tab’ında bulunan selector kısmına yazılmalı.

Not : Eklediğiniz inline alanları hidden ve height:0 eklemeniz gerekiyor. Kampanya olduğu zaman bu alanların görünebilir olması için Inline Banner alanını eklediğiniz ViewController’ın içerisine hidden olan bu view’ı visible yapan ve yükseklik değerini belirlediğiniz değeri set ettiğiniz(örneğin:80) bir metot yazmanız gerekiyor. Metot parametre olarak mutlaka NSMutableDictionary/dictionary tipinde bir değişken almalı. Metodu ekledikten sonra panelde Banner Wizard —> Content —> Advanced —> Run SDK function kısmına metot ismini {“inline_funciton”:”showInlineBanner”} şeklinde ekliyoruz. Daha sonra inline bannerı uygulamanızda görebiliyor olacaksınız.

Objective – C


- (void) showInlineBanner:(NSMutableDictionary*)dictionary{
[view setHidden:NO];
view.frame.size.height = 80
}

Swift


func showInlineBanner(_ parameters : [String:Any]){
hidden.isHidden = false
hidden.frame.size.height = 80
}

Screen Shot 2018-09-10 at 10.12.56

Screen Shot 2018-09-10 at 10.13.28

Screen Shot 2018-09-10 at 10.14.01

Uygulamalarda özelleştirilmiş fonksiyon entegrasyonu


Banner görüntülendiğinde ya da banner’a tıklandığında dinamik olarak tetiklenebilir fonksiyonlardır.

Kullanıcıya özel atanan kupon kodunun sepette uygulanması için aşağıda bir entegrasyon örneği verilmiştir.

Bunun için aşağıdaki kod bloklarını uygulamanızda belirtilen yerlere eklemeniz yeterlidir.

Android
IOS
Android

Sepet_Activity sınıfına aşağıdaki metodu eklemeniz ve metot içerisinde “sepete uygula”yı tetikleyen metodu çağırmanız yeterli olucaktır. Kupon kodu JSONObject’in “run_parameter” değişkenine atanacak ve kullanıcının kupon kodu var ise create_discount metodu tetiklenecektir.

 

public void create_discount(JSONObject object){
String code = object.getString("run_parameter");
trigger_to_discount_func(code);
}

 

IOS

Sepet_ViewController sınıfına aşağıdaki metodu eklemeniz ve metot içerisinde “sepete uygula”yı tetikleyen metodu çağırmanız yeterli olucaktır. Kupon kodu tipi dictionary olan parameters değişkeninin “run_parameter” değerinde atanacak ve kullanıcının kupon kodu var ise create_discount metodu tetiklenecektir.

 

func createDiscount(_ parameters : [String:Any]) {
var code : String = parameters[“run_parameter”]
trigger_to_discount_func(code : String)
}

 

Kullanıcı hareketlerini aksiyon bazlı takip etmek iş hedefleri doğrultusunda uygulamalarınızı optimize etmeyi kolaylaştırır.Kullanıcı kayıtları, satın alımlar gibi standart aksiyonların yanı sıra takip etmek istediğiniz her aksiyon için aşağıdaki kod bloğunu ilgili aksiyonun tetiklendiği alana eklemeniz yeterli olacaktır.

Android
IOS
Android

 

wiso.createEvent("Action_Name");

 

IOS

 

wiso.createEvent(eventname: "Action_Name")

 

Uygulamalara özel test modunun kullanılması için yapılması gerekenler


WebInStats Wistapp uygulamasını App store ya da Google Play üzerinden indirirerek kampanyalarınızı yayına almadan önce bu uygulama yardımı ile test modunda görüntüleyebilirsiniz.

Bunun için aşağıdaki kod bloklarını uygulamanızda belirtilen yerlere eklemeniz yeterlidir.

Android
IOS / Swift
IOS / Objective-C
Android

Uygulamanızda Deep Link tanımlarını yaptığınız activity sınıflarında aşağıdaki işaretli kodu onCreate() Methoduna ekleyin.

 

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.deep_link);
Intent appLinkIntent = getIntent();
Bundle bundle = getIntent().getExtras();
Uri appLinkData = appLinkIntent.getData();
Webinstats wobj = new Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0");
wobj.saveTestParameters(this,appLinkData,bundle);
}

 

IOS / Swift

AppDelegate.swift dosyasında deep linki karşıladığınız application methoduna aşağıdaki işaretli kodu eklemeniz yeterlidir.

 

func application(_ application:UIApplication, open url:URL,sourceApplication:String?,annotation:Any)->Bool{
Webinstats("//__YOUR_SUBDOMAIN__.webinstats.com/","___YOUR_COMPANY_ID___","0").saveTestParameters(url: url)
return true
}

 

IOS / Objective-C

AppDelegate.m dosyasında deep linki karşıladığınız application methoduna aşağıdaki işaretli kodu eklemeniz yeterlidir.

 

- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary *)options{
[[[Webinstats alloc] init:@"//__YOUR_SUBDOMAIN__.webinstats.com/" :@"___YOUR_COMPANY_ID___" :@"0"] saveTestParametersWithUrl:url];
return YES;
}