Skip to end of metadata
Go to start of metadata

You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 30 Current »


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

  1. 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.

  2. 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
  3. 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];


    Swift

    var 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


  • No labels