Objective-C Projede Swift SDK'yı Kullanma

Objective-C Projede Swift SDK'yı Kullanma

Swift SDK’mızı Objective-C projenizde kullanabilmek için öncelikle Swift SDKlarımız Cocoapods aracılığıyla yükleyin.

pod "Euromsg" pod "VisilabsIOS"

Projeniz içerisinde Xcode menüsünde File > New > File adımlarını izleyerek yeni bir Swift File oluşturun. Bu dosyanın ismini RelatedDigitalAdapter olarak girin ve Create butonuna tıklayın.

Ardından size bir Bridging Header oluşturmak isteyip istemediğinizi soracak burada oluşturmak istediğinizi seçin.

Oluşturduğunuz RelatedDigitalAdapter.swift dosyasını açın ve aşağıdaki kodları kopyalayıp bu dosyaya yapıştırın.

 

import Euromsg import Foundation import VisilabsIOS public class RelatedDigitalAdapter: NSObject { @objc public class func initEuromsg(appAlias: String, launchOptions: [UIApplication.LaunchOptionsKey: Any]?, enableLog: Bool, appGroupsKey: String?) { Euromsg.configure(appAlias: appAlias, launchOptions: launchOptions, enableLog: enableLog, appGroupsKey: appGroupsKey) } @objc public class func initVisilabs(organizationId: String, profileId: String, dataSource: String, inAppNotificationsEnabled: Bool, channel: String, requestTimeoutInSeconds: Int, geofenceEnabled: Bool, askLocationPermmissionAtStart: Bool, maxGeofenceCount: Int, isIDFAEnabled: Bool, loggingEnabled: Bool) { Visilabs.createAPI(organizationId: organizationId, profileId: profileId, dataSource: dataSource, inAppNotificationsEnabled: inAppNotificationsEnabled, channel: channel, requestTimeoutInSeconds: requestTimeoutInSeconds, geofenceEnabled: geofenceEnabled, askLocationPermmissionAtStart: askLocationPermmissionAtStart, maxGeofenceCount: maxGeofenceCount, isIDFAEnabled: isIDFAEnabled, loggingEnabled: loggingEnabled) Visilabs.callAPI().loggingEnabled = loggingEnabled } @objc public class func askForPushPermission(isProvisional: Bool) { if isProvisional { Euromsg.askForNotificationPermission(register: true) } else { Euromsg.askForNotificationPermissionProvisional(register: true) } } @objc public class func registerToken(deviceToken: Data) { Euromsg.registerToken(tokenData: deviceToken) } @objc public class func handlePush(pushDictionary: [AnyHashable: Any]) { Euromsg.handlePush(pushDictionary: pushDictionary) } @objc public class func setEuroUserId(userId: String) { Euromsg.setEuroUserId(userKey: userId) Euromsg.sync() } @objc public class func setEmailWithPermission(email: String, permission: Bool) { Euromsg.setEmail(email: email, permission: permission) Euromsg.sync() } @objc public class func setEmail(email: String) { Euromsg.setEmail(email: email) Euromsg.sync() } @objc public class func setUserProperty(key: String, value: String) { Euromsg.setUserProperty(key: key, value: value) Euromsg.sync() } @objc public class func removeUserProperty(key: String) { Euromsg.removeUserProperty(key: key) Euromsg.sync() } @objc public class func setAppVersion(appVersion: String) { Euromsg.setAppVersion(appVersion: appVersion) Euromsg.sync() } @objc public class func setPushNotificationPermission(permission: Bool) { Euromsg.setPushNotification(permission: permission) } @objc public class func setEmailPermission(permission: Bool) { Euromsg.setEmail(permission: permission) Euromsg.sync() } @objc public class func setPhoneNumberPermission(permission: Bool) { Euromsg.setPhoneNumber(permission: permission) Euromsg.sync() } @objc public class func setBadgeCount(badgeCount: Int) { Euromsg.setBadge(count: badgeCount) } @objc public class func setAdvertisingIdentifier(identifier: String?) { Euromsg.setAdvertisingIdentifier(adIdentifier: identifier) Euromsg.sync() } @objc public class func setTwitterId(twitterId: String?) { Euromsg.setTwitterId(twitterId: twitterId) Euromsg.sync() } @objc public class func setFacebookId(facebookId: String?) { Euromsg.setFacebook(facebookId: facebookId) Euromsg.sync() } @objc public class func customEvent(pageName: String, properties: [String: String]) { Visilabs.callAPI().customEvent(pageName, properties: properties) } @objc public class func recommend(zoneID: String, productCode: String? = nil, filters: [VisilabsRecommendationFilter] = [], properties: [String: String] = [:], completion: @escaping ((_ response: VisilabsRecommendationResponse) -> Void)) { Visilabs.callAPI().recommend(zoneID: zoneID, productCode: productCode, filters: filters, properties: properties, completion: completion) } @objc public class func logout() { Euromsg.logout() Visilabs.callAPI().logout() } @objc public class func login(exVisitorId: String, properties: [String: String]) { if properties.isEmpty { Visilabs.callAPI().login(exVisitorId: exVisitorId) } else { Visilabs.callAPI().login(exVisitorId: exVisitorId, properties: properties) } } @objc public class func signUp(exVisitorId: String, properties: [String: String]) { if properties.isEmpty { Visilabs.callAPI().signUp(exVisitorId: exVisitorId) } else { Visilabs.callAPI().signUp(exVisitorId: exVisitorId, properties: properties) } } @objc public class func getExVisitorID() -> String { return Visilabs.callAPI().getExVisitorId() ?? "" } @objc public class func getPushMessages(completion: @escaping ((_ payloads: [RDMessage]) -> Void)) { Euromsg.getPushMessages() { ps in var mes = [RDMessage]() for p in ps { let m = RDMessage() m.altURL = p.altURL m.aps = RDMessage.Aps() m.aps.alert = RDMessage.Alert() m.aps.contentAvailable = p.aps?.contentAvailable ?? -1 m.aps.sound = p.aps?.sound m.aps.category = p.aps?.category m.cid = p.cid m.url = p.url m.settings = p.settings m.pushType = p.pushType m.altUrl = p.altUrl m.mediaUrl = p.mediaUrl m.fcmOptions = RDMessage.FcmOptions() m.fcmOptions?.image = p.fcmOptions?.image m.deeplink = p.deeplink m.pushId = p.pushId m.emPushSp = p.emPushSp m.elements = [RDMessage.Element]() m.deliver = p.deliver m.silent = p.silent ?? false mes.append(m) } completion(mes) } } @objc public class func requestIDFA() { Visilabs.callAPI().requestIDFA() } @objc public class func sendLocationPermission() { Visilabs.callAPI().sendLocationPermission() } } @objc public class RDMessage: NSObject { @objc public var formattedDateString: String? @objc public var aps: Aps = Aps() @objc public var altURL: String? = nil @objc public var cid: String? = nil @objc public var url: String? = nil @objc public var settings: String? = nil @objc public var pushType: String? = nil @objc public var altUrl: String? = nil @objc public var mediaUrl: String? = nil @objc public var fcmOptions: FcmOptions? = nil @objc public var deeplink: String? = nil @objc public var pushId: String? = nil @objc public var emPushSp: String? = nil @objc public var elements: [Element]? = nil @objc public var deliver: String? = nil @objc public var silent: Bool = false // MARK: - Aps @objc public class Aps: NSObject { @objc public var alert: Alert? = nil @objc public var category: String? = nil @objc public var sound: String? = nil @objc public var contentAvailable: Int = -1 } // MARK: - Alert @objc public class Alert: NSObject { @objc public let title: String? = nil @objc public let body: String? = nil } // MARK: - FcmOptions @objc public class FcmOptions: NSObject { @objc public var image: String? = nil } // MARK: - Element @objc public class Element: NSObject { // public let id: Int? @objc public let title: String? = nil @objc public let content: String? = nil @objc public let url: String? = nil @objc public let picture: String? = nil } }

 

Visilabs ve Euromsg'ı kullanmak istediğiniz her sayfada Adapter-Swift import etmelisiniz

#import "Adapter-Swift.h"

Visilabs ve Euromsg'ı init etmek

AppDelegate.m dosyanız didFinishLaunchingWithOptions içerisine aşağıdaki kodları ekleyin.

[RelatedDigitalAdapter initEuromsgWithAppAlias:@"YOUR_APP_ALIAS" launchOptions:launchOptions enableLog:YES appGroupsKey:@"YOUR_APP_GROUPS_KEY"]; [RelatedDigitalAdapter initVisilabsWithOrganizationId:@"YOUR_ORGANIZATION_ID" profileId:@"YOUR_PROFILE_ID" dataSource:@"YOUR_DATA_SOURCE" inAppNotificationsEnabled:YES channel:@"IOS" requestTimeoutInSeconds:30 geofenceEnabled:YES askLocationPermmissionAtStart:YES maxGeofenceCount:20 isIDFAEnabled:YES loggingEnabled:YES];

App Groups Key oluşturmayı BU SAYFADA App Groups Ekleme başlığından inceleyebilirsiniz.

Eğer uygulamanız içerisinde Pop-Up, Çarkıfelek, Kazı Kazan gibi aksiyonlar göstermeyecekseniz inAppNotificationsEnabled parametresini NO geçin.

Eğer uygulamanızda lokasyon bazlı push gönderimi kullanmayacaksanız geofenceEnabled ve askLocationPermissionAtStart parametrelerini NO geçin.

Eğer geofence kullanacaksanız ama lokasyon bildirimini siz kendiniz istediğiniz bir sayfada almak istiyorsanız askLocationPermissionAtStart parametresini NO geçin.

Eğer uygulamanızda Takip İzni Sormayacaksanız isIDFAEnabled parametresini NO geçin.

Event Gönderimi

Kaydolma

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"DEVICE_TOKEN" forKey:@"OM.sys.TokenID"]; [dic setObject:@"YOUR_APP_ALIAS" forKey:@"OM.sys.AppID"]; [RelatedDigitalAdapter signUpWithExVisitorId:@"EMAIL OR KEY_ID" properties:dic];

Oturum Açma

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"DEVICE_TOKEN" forKey:@"OM.sys.TokenID"]; [dic setObject:@"YOUR_APP_ALIAS" forKey:@"OM.sys.AppID"]; [RelatedDigitalAdapter loginWithExVisitorId:@"EMAIL OR KEY_ID" properties:dic];

Sayfa Görüntüleme

NSMutableDictionary* dic = [NSMutableDictionary new]; [RelatedDigitalAdapter customEventWithPageName:@"PAGE_NAME" properties:dic];

Ürün Görüntüleme

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"123456" forKey:@"OM.pv"]; [dic setObject:@"Product Name" forKey:@"OM.pn"]; [dic setObject:@"125.49" forKey:@"OM.ppr"]; [dic setObject:@"Product Brand" forKey:@"OM.pv.1"]; [dic setObject:@"5" forKey:@"OM.inv"]; [RelatedDigitalAdapter customEventWithPageName:@"Product View" properties:dic];

Sepet İşlemleri

Kullanıcı sepete ürün eklediğinde veya ürün çıkardığında aşağıdaki customEvent uygulamasını kullanın. Sepette bulunan son üründe kullanıcı tarafından silindiğinde OM.pb, OM.pu ve OM.ppr parametrelerini boş string olarak göndermelisiniz.

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"123456" forKey:@"OM.pbid"]; [dic setObject:@"12345;23456" forKey:@"OM.pb"]; [dic setObject:@"3;1" forKey:@"OM.pu"]; [dic setObject:@"376.47;23.50" forKey:@"OM.ppr"]; [RelatedDigitalAdapter customEventWithPageName:@"Cart" properties:dic];

Satın Alma

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"123456" forKey:@"OM.tid"]; [dic setObject:@"12345;23456" forKey:@"OM.pp"]; [dic setObject:@"3;1" forKey:@"OM.pu"]; [dic setObject:@"376.47;23.50" forKey:@"OM.ppr"]; [RelatedDigitalAdapter customEventWithPageName:@"Purchase" properties:dic];

Kategori Görüntüleme

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"123456" forKey:@"OM.clist"]; [RelatedDigitalAdapter customEventWithPageName:@"Category" properties:dic];

Arama

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"Laptop" forKey:@"OM.OSS"]; [dic setObject:@"12" forKey:@"OM.OSSR"]; [RelatedDigitalAdapter customEventWithPageName:@"Search" properties:dic];

Banner Tıklaması

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"b-123456" forKey:@"OM.OSB"]; [RelatedDigitalAdapter customEventWithPageName:@"Banner Click" properties:dic];

Favorilere Ekleme

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"123456" forKey:@"OM.pf"]; [dic setObject:@"1" forKey:@"OM.pfu"]; [dic setObject:@"125.49" forKey:@"OM.ppr"]; [RelatedDigitalAdapter customEventWithPageName:@"/OM_evt.gif" properties:dic];

Favorilerden Çıkarma

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"123456" forKey:@"OM.pf"]; [dic setObject:@"-1" forKey:@"OM.pfu"]; [dic setObject:@"125.49" forKey:@"OM.ppr"]; [RelatedDigitalAdapter customEventWithPageName:@"/OM_evt.gif" properties:dic];

Kampanya Parametresi Yollama

NSMutableDictionary* dic = [NSMutableDictionary new]; [dic setObject:@"euromsg" forKey:@"utm_source"]; [dic setObject:@"push" forKey:@"utm_medium"]; [dic setObject:@"campaign_name" forKey:@"utm_campaign"]; [RelatedDigitalAdapter customEventWithPageName:@"/OM_evt.gif" properties:dic];

 

Copyright 2020 Related Digital