iOS - Euromsg Objective-C SDK
Objective-C SDK’mız için kritik güvenlik güncellemeleri hariç desteğimiz son bulmuştur. Lütfen Swift SDK’mızı inceleyiniz.
Genel Bilgi
Apple Push Notification Server (APNS) dünya üzerinde bütün iOS cihazların bağlı bulunduğu merkezi bir sunucudur. Herhangi bir anda bir uygulamaya push atılmak istendiği anda gönderilmek istenen mesaj APNS’e ulaştırılır ve APNS bu mesajı ilgili cihaza iletir. Mesajın doğru cihaza ve uygulamaya iletilmesi için her cihaz/uygulama ikilisine karşılık bir anahtar (token) üretilir ve mesajla beraber bu anahtarın da APNS’e gönderilmesi istenir.
APNS’le iletişim için RMC sizden aşağıdaki bilgileri beklemektedir;
Token Listesi
Sertifika (http://developer.apple.com/membercenter)
Sertifika oluşturma adımlarını APNS Sertifikası Oluşturma sayfasında bulabilirsiniz.
APNS Metodları
APNS sertifikaları Sandbox ve Production olmak üzere ikiye ayrılırlar.
Sandbox sertifikası AppStore’a gönderilmemiş uygulamalar için kullanılır ve genellikle geliştirici debugger’a bağlıyken (USB kablosu ile Xcode’a bağlantı varsa) kullanılır.
Ad-Hoc ve Testflight üzerinden dağıtılan (kapalı dağıtım) uygulamalar ve AppStore’da yer alan uygulamalar için Production sertifikası kullanılır.
Token’ların iletimi için RMC tarafından sağlanan SDK’nın kullanılması gerekir. SDK’yı proje içine taşıyıp dosyaları ekledikten sonra aşağıdaki adımları takip ederek SDK’yı uygulamanıza entegre edebilirsiniz.
Uygulamanın APNS sistemine kayıt olması için aşağıdaki metodun uygulama içerisinde çalıştırılması gerekmektedir;
Objective-C
[[UIApplication sharedApplication] registerForRemoteNotificationTypes:
(UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)];
iOS 8 ve sonrası sistemlerde ise aşağıdaki kod çalıştırılmalıdır;
Objective-C
[[UIApplication sharedApplication] registerUserNotificationSettings:[UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeSound | UIUserNotificationTypeAlert | UIUserNotificationTypeBadge) categories:nil]];
Swift
In AppDelegate file of your project you should edit didFinishLaunchingWithOptions
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
if #available(iOS 10.0, *) {
// For iOS 10 display notification (sent via APNS)
UNUserNotificationCenter.current().delegate = self
let authOptions: UNAuthorizationOptions = [.alert, .badge, .sound]
UNUserNotificationCenter.current().requestAuthorization(
options: authOptions,
completionHandler: {_, _ in })
} else {
let settings: UIUserNotificationSettings =
UIUserNotificationSettings(types: [.alert, .badge, .sound], categories: nil)
application.registerUserNotificationSettings(settings)
}
}
Aynı zamanda aşağıdaki kod AppDelegate içinde çağırılmalıdır;
Objective-C
- (void) application:(UIApplication *)application didRegisterUserNotificationSettings:
(UIUserNotificationSettings *)notificationSettings {
[application registerForRemoteNotifications];
}
Swift
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
EuroManager.sharedManager("AppcentIOSTest1").registerToken(deviceToken)
}
Bu noktadan sonra kullanıcının karşısına uzaktan uyarı mesajları ile ilgili bir bildiri gelecektir. Kullanıcı mesaj almayı kabul eder ve cihaz başarıyla APNS’e kayıt olursa AppDelegate içerisinde aşağıdaki metod uyarılır;
- (void) application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
NSLog(@"didRegisterForRemoteNotificationsWithDeviceToken");
[[EuroManager sharedManager:@"AppcentIOSTest1"] registerToken:deviceToken];
}
application:didRegisterForRemoteNotificationsWithDeviceToken: metodunda deviceToken değişkeni APNS tarafından gönderilen tanımlayıcı koddur. Bu kod alındıktan sonra EuroMobile instance içerisinde yer alan registerToken: metodu çağırılır ve token değerinin EuroMobile sistemine kayıt edilmesi sağlanır.
Örnekte “AppcentIOSTest1” değeri size RMC tarafından verilen kod değeridir.
Eğer cihaz kayıt sırasında bir hata alırsa aşağıdaki metod bu hatanın ne olduğunu bildirir.
- (void) application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
NSLog(@"Registration failed : %@",error.description);
}
EuroMobile instance aşağıdaki şekilde aktif edilir;
EuroManager *euroInstance = [EuroManager sharedManager:@"AppcentIOSTest1"];
[euroInstance setDebug:YES];
Kullanıcıya ait ek parametreler biliniyorsa kayıt aşamasında ya da sonrasında aşağıdaki gibi eklenebilir. Kullanıcı token eşleşmesi sağlamak için setUserKey methodunda referans kolon bilgisininin (KEY_ID veya EMAIL) gönderilmesi gereklidir. Bu method sayesinde subscribe işlemi için extra parametresine değerler eklenmiş olur ve kullanıcının hangi token ile eşleştirileceği belirtilmiş olur. Extra parametresi hakkında ek olarak Push Uygulamaları Tanımlama bilgi alınabilir.
euroInstance.userEmail = @"ozan.uysal@gmail.com";
[euroInstance setTwitterId:@"myTwitterAccount"];
[euroInstance setFacebookId:@"myFacebookAccount"];
[euroInstance setUserLatitude:41.11 andLongitude:29.12];
[euroInstance setAppVersion:@"1.0"];
[euroInstance setUserKey:@"ozanUysalKey"];
Herhangi bir adımda yeni bir parametre ekler ve bunları RMC sunucusuna göndermeniz gerekirse (örn.kullanıcı login olması) synchronize metodunu çağırmanız yeterli olacaktır. Uygulama açılış ve kapanışlarında bu metod otomatik olarak çalıştırılır.
[[EuroManager sharedManager:@"AppcentIOSTest1"] synchronize];
IYS E-Posta Kaydı
Eğer kullanıcınız kurumsal bir hesap ise TACIR olarak göndermeniz gerekmektedir. Bunun için registerEmail metodunda bulundan isCommercial parametresini true olarak değiştiriniz.
Objective-C
void (^success)(void) = ^void(void) {
NSLog(@"registerEmail sucess");
};
void (^failure)(NSString*) = ^void(NSString* message) {
NSLog(@"registerEmail failure");
NSLog(@"%@", message);
};
[[EuroManager sharedManager:@"EuromsgIOSTest"] registerEmail:@"test@euromsg.com" emailPermit:YES isCommercial:NO success:success failure:failure];
Swift
let success: (() -> Void)? = {
print("registerEmail sucess")
}
let failure: ((String?) -> Void)? = { message in
print("registerEmail failure")
print("\(message ?? "")")
}
EuroManager.sharedManager("EuromsgTest")?.registerEmail("test@euromsg.com", emailPermit: true, isCommercial: false, success: success, failure: failure)
Cihaz uzaktan bir uyarı geldiğinde application:didReceiveRemoteNotification: mesajını uyarır. Burada gelen mesaj içeriği Pigeon instance içinde yer alan handlePush: metoduna verilmelidir. Bu metod okundu bilgisinin iletilmesi içindir.
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
NSLog(@"didReceiveRemoteNotification : %@",userInfo);
[[EuroManager sharedManager:@"AppcentIOSTest1"] handlePush:userInfo];
}
Eğer iOS 8 ve sonrası bir sistem kullanılıyorsa aşağıdaki metodun çağırılması tavsiye edilir. Bu sayede arkaplanda gelen mesajlar da işlenebilecektir (background push).
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"didReceiveRemoteNotification:fetchCompletionHandler : %@",userInfo);
[[EuroManager sharedManager:@"AppcentIOSTest1"] handlePush:userInfo];
}
Push Kampanyası Cirolarının Panele Yansıması
Gelen push bildirimine tıkladıktan sonra yapılan satın almanın RMC panelinde Ciro alanına yansıması için aşağıdaki metodu kullanmanız gerekmektedir.
Push ekranında bulunan Özel Parametreler alanına utm parametrelerini girmelisiniz.
Örn: utm_medium=apppush;utm_source=related;utm_campaign=campaign_name
Not: utm_campaign her seferinde farklı olması gerektiği için oluşturduğunuz push kampanyasının ID’sini değişken olarak kullanabilirsiniz. Bunun için <##CAMP_ID##> değişkenini isteğe bağlı bir şekilde kullanabilirsiniz.Push bildirimi tıklandıktan sonra size aşağıdaki gibi bir data dönecektir.
Örnek Data:
"pushId": df73706e-1138-40f2-b687-c10c43ee8138, "aps": { alert = { body = Test; title = Test; }; badge = 0; "content-available" = 0; "mutable-content" = 1; sound = ""; }, "pushType": Text, "url": , "mediaUrl": , "deepLink": , "altUrl": , "utm_campaign": campaign_name, "utm_medium": apppush, "utm_source": related
Bu datayı aynı deeplink kullanımında olduğu gibi handle ederek utm parametrelerini pusha tıklandığında Visilabs’e event olarak göndermelisiniz. Örnek Visilabs event kodlarını alt satırda bulabilirsiniz.
Objective-C
NSMutableDictionary *properties = [[NSMutableDictionary alloc] init]; [properties setObject:@"utm_campaign" forKey:@"campaign_name"]; [properties setObject:@"utm_source" forKey:@"related"]; [properties setObject:@"utm_medium" forKey:@"apppush"]; [properties setObject:@"KeyID veya Email" forKey:@"OM.exVisitorID"]; //RMC sistemindeki referansınız [properties setObject:@"Kullanıcı Push Mesaj Tokenı" forKey:@"OM.sys.TokenID"]; [properties setObject:@"AppAlias" forKey:@"OM.sys.AppID"]; [[Visilabs callAPI] customEvent:@"Campaign" withProperties:properties];
Swiftvar properties = [String:String]() properties["utm_campaign"] = "campaign_name" properties["utm_source"] = "related" properties["utm_medium"] = "apppush" properties["OM.exVisitorID "] = "KeyID veya Email" //RMC sistemindeki referansınız properties["OM.sys.TokenID"] = "Kullanıcı Push Mesaj Tokenı" properties["OM.sys.AppID"] = "AppAlias" Visilabs.callAPI().customEvent("Campaign", withProperties: NSMutableDictionary(dictionary: properties))
EuroDelegate içerisinde aşağıdaki metodlar bulunmaktadır. Bu metodlar bir mesaj geldiğinde delegate atandığı takdirde harekete geçerler.
Cihazın kayıt edilmesi sırasında bir problem oluşursa bu metod uyarılır. Sorunun sebebi error bölümünde yer alır.
- (void) didFailRegister:(NSError *) error token:(NSData *)token;
Sistemden resimli bir mesaj geldiğinde mesajla ilgili resim image değişkeninde NSData tipinde iletilir. Mesajın içeriği message değişkeninde saklıdır.
- (void) didReceiveImageMessage:(EMMessage *)message;
Cihaz sisteme başarılı bir şekilde kayıt edildiğinde bu metod uyarılır.
- (void) didRegisterSuccessfully;
Sistemden bir mesaj gönderildiğinde bu metod uyarılır. Mesajın içeriği message değişkeninde gönderilir.
- (void) didReceivePushMessage:(EMMessage *)message;
Message sınıfında kullanılabilecek değişkenler;
Değişken | Açıklama |
---|---|
messageContent | Message |
URL | An optional URL |
params | Custom parameters |
pushType | Push Type |
altURL | Alternate URL |
mediaUrl | Image and Video content URL |
cId | Campaign id |
sound | Sound name |
RMC Personalization (visilabs)
Eğer uygulamanızda Personalization Center Suite’ini kullanıyorsanız ve okunan push mesajlarını Personalization Center’a iletmek isterseniz reportVisilabs: metodu ile bunu yapabilirsiniz. reportVisilabs: metodu Visilabs SDK’sı tarafından üretilen bir URL bekler ve aşağıdaki gibi kullanılır.
- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
NSLog(@"didReceiveRemoteNotification:fetchCompletionHandler : %@",userInfo);
Visilabs *visi = [Visilabs ...]
NSString *pushUrl = [visi getPushURL:@"src" withCampaign:@"cam" withMedium:@"med" withContent:@"con"];
[[EuroManager sharedManager:@"AppcentIOSTest1"] reportVisilabs:pushUrl];
[[EuroManager sharedManager:@"AppcentIOSTest1"] handlePush:userInfo completionHandler:completionHandler];
}
Ana Başlık: Euromessage SDK Entegrasyonu
Related content
Copyright 2020 Related Digital