Versions Compared

Key

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

...

...

...

...

Bu sayfada bulabilecekleriniz:

Table of Contents
minLevel1
maxLevel6
outlinefalse
styledecimal
typelist
printablefalse
separatorbrackets

Notification Service Extension Ekleme

Notification Service Extension zengin push mesajları(görsel, video) almanıza yardımcı olur.

  1. Xcode’u açın ve File > New > Target adımını izleyin

  2. Notification Service Extension'ı seçin ve Next butonuna tıklayın.

    Image Modified

  3. Product Name alanına NotificationService yazın ve Finish butonuna tıklayın.

    Image Modified

  4. Finish butonuna tıkladıktan sonra açılacak diyalog penceresinde Cancel butonuna basın.

    Image Modified

    Eğer Activate butonuna tıklarsanız uygulama Target'ı NotificationService olacaktır. Bu bir sorun değildir. Scheme alanından uygulamanızı seçerek düzeltebilirsiniz.

  5. Sol menüden projenizi seçin açılan alanda TARGETS altından NotificationService’i seçin. Deployment Info bölümünde Target alanını iOS 11.0 yapın.

    Image Modified

  6. NotificationService.swift dosyasını açın ve içerisindeki kodları aşağıdaki kodlarla değiştirin.

    Code Block
    languageswift
    import 

...

  1. RelatedDigitalIOS
    import 

...

  1. UserNotifications
    
    class NotificationService: UNNotificationServiceExtension {

...

  1. 
        var contentHandler: ((UNNotificationContent) -> Void)?
        var bestAttemptContent: UNMutableNotificationContent?
    
        override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
            self.contentHandler = contentHandler
            bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
            DispatchQueue.main.async {
                RelatedDigital.initialize(organizationId: "YOUR_ORGANIZATION_ID", profileId: "YOUR_

...

  1. SITE_ID", dataSource: "YOUR_DATA_SOURCE", launchOptions: nil)
    
                RelatedDigital.enablePushNotifications(appAlias: "YOUR_APP_ALIAS", launchOptions: nil, appGroupsKey: "YOUR_APP_GROUPS_KEY")
                RDPush.didReceive(self.bestAttemptContent, withContentHandler: contentHandler)
            }
        }
    
        override func serviceExtensionTimeWillExpire() {
            guard let contentHandler = 

...

  1. contentHandler else {
                return

...

  1. 
            }
            guard let bestAttemptContent = 

...

  1. bestAttemptContent else {
                return

...

  1. 
            }
            contentHandler(bestAttemptContent)
        }
    }

Notification Content Extension Ekleme

Not: Eğer push mesajı gönderimlerinizde Carousel Push kullanacaksanız bunu eklemeniz zorunludur.

...

  1. "Copy only when installing" seçili olmadığından emin olun. Öncelikle Main Targetınızı seçin ardından Build Phases > Embed App Extensions'ı açın. Burada eğer Copy only when installing seçili ise seçimi kaldırın. Bu seçili olması halinde pushlarınızda görsel kullanamazsınız.

    Image Added

Notification Content Extension Ekleme

Not: Eğer push mesajı gönderimlerinizde Carousel Push kullanacaksanız bunu eklemeniz zorunludur.

  1. Xcode’u açın ve File > New > Target adımını izleyin

  2. Notification Content Extension'ı seçin ve Next butonuna tıklayın.

    Image Modified

  3. Pproduct Name alanına NotificationContent yazın ve Finish butonuna tıklayın.

    Image Modified

  4. Finish butonuna tıkladıktan sonra açılacak diyalog penceresinde Cancel butonuna tıklayın.

    Image Modified
    1. Eğer Activate butonuna tıklarsanız uygulama Target'ı NotificationContent olacaktır. Bu bir sorun değildir. Scheme alanından uygulamanızı seçerek düzeltebilirsiniz.

  5. Sol menüden projenizi seçin açılan alanda TARGETS altından NotificationContent’i seçin. Deployment Info bölümünde Target alanını iOS 11.0 yapın.

    Image Modified

  6. MainInterface.storyboard ve NotificationContent.swift dosyalarını silin. Ardından NotificationContent klasörü altına

...

  1. RDNotificationViewController isminde swift dosyası oluşturun. Info.plist dosyasını bu linkteki ile aynı olduğuna dikkat ediniz.

...

  1. Image Added

    Objective-C Bridging Header oluşturma sorulursa Don’t Create butonuna tıklayın.

    Image Modified

  2. EMNotificationViewController.swift açın ve içerisindeki kodları aşağıdaki ile değiştirin.

Code Block
languageswift
import UIKit
import UserNotifications
import UserNotificationsUI
import RelatedDigitalIOS

@objc(RDNotificationViewController)
class RDNotificationViewController: UIViewController, UNNotificationContentExtension {
    
    let carouselView = PushNotificationCarousel.initView()
    var completion: ((_ url: URL?, _ bestAttemptContent: UNMutableNotificationContent?) -> Void)?
    
    var notificationRequestIdentifier = ""
    
    func didReceive(_ notification: UNNotification) {
        notificationRequestIdentifier = notification.request.identifier
        RelatedDigital.initialize(organizationId: "YOUR_ORGANIZATION_ID", profileId: "YOUR_PROFILE_ID", dataSource: "YOUR_DATA_SOURCE", launchOptions: nil)
        RelatedDigital.enablePushNotifications(appAlias: "YOUR_APP_ALIAS", launchOptions: nil, appGroupsKey: "YOUR_APP_GROUPS_KEY")
        carouselView.didReceive(notification)
    }
    func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
        carouselView.didReceive(response, completionHandler: completion)

    }
    override func loadView() {
        completion = { [weak self] url, bestAttemptContent in
            if let identifier = self?.notificationRequestIdentifier {
                UNUserNotificationCenter.current().removeDeliveredNotifications(withIdentifiers: [identifier])
                UNUserNotificationCenter.current().getDeliveredNotifications(completionHandler: { notifications in
                    bestAttemptContent?.badge = NSNumber(value: notifications.count)
                })
            }
            if let url = url {
                if #available(iOSApplicationExtension 12.0, *) {
                    self?.extensionContext?.dismissNotificationContentExtension()
                }
                self?.extensionContext?.open(url)
            } else {
                if #available(iOSApplicationExtension 12.0, *) {
                    self?.extensionContext?.performNotificationDefaultAction()
                }
            }
        }
        carouselView.completion = completion
        carouselView.delegate = self
        self.view = carouselView
    }
}

/**
 Add if you want to track which carousel element has been selected
 */
extension RDNotificationViewController: PushCarouselDelegate {
    func selectedItem(_ element: RDPushMessage.Element) {
        // Add your work...
        print("Selected element is => \(element)")
    }
}

NotificationContent ve NotificationService için Related Digital iOS SDK’sını eklemeliyiz. Cocoapods ve SPM için farklı tanımlamalar mevcuttur.

Cocoapods

Podfile dosyanızı aşağıdaki şekilde düzenleyin ve tekrar terminalden proje dizininize giderek pod install yazarak enter tuşuna basın.

...

Code Block
languagenone
platform :ios, '11.0'

target 'YOUR_PROJECT_NAME' do
  use_frameworks!
  pod 'RelatedDigitalIOS'
post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == 'RelatedDigitalIOS'
            target.build_configurations.each do |config|
                config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'No'
            end
        end
    end
end
end

target 'NotificationService' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  pod 'RelatedDigitalIOS'
  # Pods for RelatedDigital

end

target 'NotificationContent' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
  pod 'RelatedDigitalIOS'
  # Pods for RelatedDigital

end

SPM

Hem NotificationService hem de NotificationContent için General altında Frameworks and Libraries altına RelatedDigitalIOS modülünü eklemelisiniz.

...

App Groups Ekleme

Tüm hepsini tamamladıktan sonra Targetlara App Groups eklemeniz gerekmektedir.

Görselde sol tarafta işaretlenmiş olan Targetlarda sırasıyla Signing & Capabilities altından App Groups ekleyin. App Groups adını group.YOUR_APP_BUNDLE_IDENTIFIER.relateddigital şeklinde yazın.

...

Push Bildirim İzni Alma

Kullanıcılardan iki farklı şekilde izin alabilirsiniz. Bunlardan birincisi Provisional Push. Provisional Push’ta kullanıcının önüne uygulama tarafından herhangi bir izin sorulmaz. Gönderdiğiniz ilk pushta Bildirim Ekranında Merkezinde kullanıcıya bildirim gönderimini açık bırakma ve kapatma seçenekleri sunulur.

...

Code Block
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        RelatedDigital.registerToken(tokenData: deviceToken)
    }

Push Açıldı Raporunu İletme

RMC paneli üzerinden kullanıcılarınızın push mesajlarına tıklayıp tıklamadıklarını raporlayabilmek için aşağıdaki kodları ekleyin.

Code Block
languageswift
 func application(_ application: UIApplication,
                     didReceiveRemoteNotification userInfo: [AnyHashable: Any]) {
        RelatedDigital.handlePush(pushDictionary: userInfo)
    }

    func application(_ application: UIApplication,
                     didReceiveRemoteNotification userInfo: [AnyHashable: Any],
                     fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        RelatedDigital.handlePush(pushDictionary: userInfo)
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        if completionHandler([.alert, .badge, .sound])
#available(iOS 14.0, *) {
   }      func userNotificationCenter(_ center: UNUserNotificationCenter completionHandler([.banner, .sound, .badge, .list])
        } else {
            completionHandler([.alert, .badge, .sound])
      didReceive response: UNNotificationResponse,}
    }

    func userNotificationCenter(_ center: UNUserNotificationCenter,
                  withCompletionHandler completionHandler: @escaping () -> Void) {        didReceive RelatedDigital.handlePush(pushDictionary: response.notification.request.content.userInfo)response: UNNotificationResponse,
        completionHandler()     }

SceneDelegate.swift

willConnectTo fonksiyonun içerisine aşağıdaki kod bloğunu ekleyin.

Code Block
languageswift
if #available(iOS 13, *),             let userInfo = connectionOptions.notificationResponse?.notification.request.content.userInfo {  withCompletionHandler completionHandler: @escaping RelatedDigital.handlePush(pushDictionary: userInfo)
}    

RMC’ye bilgi gönderme

Aşağıdaki kodu kullanıcı uygulamanıza üye olduğunda, üye girişi yaptığında ve uygulama ilk açılırken çalıştırın.

Eğer kullanıcı e-mail izni vermemişse permission değerini false olarak göndermelisiniz.

Code Block
languageswift
RelatedDigital.setEmail(email: "test@relateddigital.com", permission: true)
RelatedDigital.setEuroUserId(userKey: "1234567890")
RelatedDigital.sync()

Mobil kanaldan gelen datalarınızın RMC'ye yüklenebilmesi için, aktif RMC hesabınızda kullanmış olduğunuz referans değeriniz ne ise (KEY_ID* veya E-Mail) mobil kanaldan gelen dataların da bu referans ile gelmesine dikkat ediniz."

*KEY_ID: Uygulama sahibi tarafından müşterisinin tekilleştirilmesi için kullanılan id değerleridir. Bunlar CRM id, userid, customerid, accountid gibi farklı isimlerle ifade ediliyor olabilir.

IYS E-Posta Kaydı

IYS kodunu Euromsg.sync() kodundan hemen önce ekleyiniz.

Code Block
languageswift
RelatedDigital.registerEmail(email: "example@email.com", permission: true)
//TACIR hesaplar için aşağıdaki kodu kullanınız
RelatedDigital.registerEmail(email: "example@commercial.com, permission: True, isCommercial: true)() -> Void) {
        RelatedDigital.handlePush(pushDictionary: response.notification.request.content.userInfo)
        completionHandler()
    }

SceneDelegate.swift

willConnectTo fonksiyonun içerisine aşağıdaki kod bloğunu ekleyin.

Code Block
languageswift
if #available(iOS 13, *),
    let userInfo = connectionOptions.notificationResponse?.notification.request.content.userInfo {
    RelatedDigital.handlePush(pushDictionary: userInfo)
}    

RMC’ye bilgi gönderme

Aşağıdaki kodu kullanıcı uygulamanıza üye olduğunda, üye girişi yaptığında ve uygulama ilk açılırken çalıştırın.

Eğer kullanıcı e-mail izni vermemişse permission değerini false olarak göndermelisiniz.

Code Block
languageswift
RelatedDigital.setEmail(email: "test@relateddigital.com", permission: true)
RelatedDigital.setEuroUserId(userKey: "1234567890")
RelatedDigital.sync()

Mobil kanaldan gelen datalarınızın RMC'ye yüklenebilmesi için, aktif RMC hesabınızda kullanmış olduğunuz referans değeriniz ne ise (KEY_ID* veya E-Mail) mobil kanaldan gelen dataların da bu referans ile gelmesine dikkat ediniz."

*KEY_ID: Uygulama sahibi tarafından müşterisinin tekilleştirilmesi için kullanılan id değerleridir. Bunlar CRM id, userid, customerid, accountid gibi farklı isimlerle ifade ediliyor olabilir.

IYS E-Posta Kaydı

IYS kodunu Euromsg.sync() kodundan hemen önce ekleyiniz.

Code Block
languageswift
RelatedDigital.registerEmail(email: "example@email.com", permission: true)
//TACIR hesaplar için aşağıdaki kodu kullanınız
RelatedDigital.registerEmail(email: "example@commercial.com, permission: True, isCommercial: true)

Push Bildirim Mesajlarını Kullanma

Son 30 gün içerisinde gönderilmiş push bildirim mesajlarına aşağıdaki gibi erişebilirsiniz.

Mesajlar tarihe göre sıralanmıştır. Son gelen mesaj listenin ilk başında gösterilir.

message.encoded ile payloadı görebilir bir alt leveldaki parametreye hangi yolla ulaşabileceğinizi öğrenebilirsiniz.

Örneğin push başlığı için message.aps?.alert?.title kullanabilirsiniz

Code Block
RelatedDigital.getPushMessages { messages in
                if messages.isEmpty {
                    print("🚲 there is no recorded push message.")
                }

                for message in messages {
                    print("🆔: \(message.pushId ?? "")")
                    print("📅: \(message.formattedDateString ?? "")")
                    print(message.encoded)
                }
            }

Eğer kullanıcı bazlı bu mesajları ayırmak isterseniz aşağıdaki kodu kullanmalısınız.

Öncelikle app açılırken aşağıdaki kod ile kullanıcı için bir id tanımlamalısınız.

Code Block
RelatedDigital.setNotificationLoginID(notificationLoginID: "123 veya umut@relateddigital.com")

Ardından aşağıdaki kodu kullanarak id bazlı pushları ayırabilirsiniz.

Code Block
RelatedDigital.getPushMessagesWithID { messages in
                if messages.isEmpty {
                    print("🚲 there is no recorded push message.")
                }

                for message in messages {
                    print("🆔: \(message.pushId ?? "")")
                    print("📅: \(message.formattedDateString ?? "")")
                    print(message.encoded)
                }
            }

Push Bildirim Sesi Kullanma

iOS Custom Sound eklemek için projenizin root dizinine .wav .mp3 .ogg uzantıları kabul edilen ses dosyalarınızı maksimum 2 adet olacak şekilde ekleyebilirsiniz.

Bu adımdan sonra Ayarlar > Kampanya Ayarları > Push Uygulamaları > UYGULAMANIZIN_ISMI adımından Özel Ses Dosyası 1 ve Özel Ses Dosyası 2 alanlarına ses dosyalarınızın ismini/isimlerini yazmanız gerekmektedir.

...

Action Button Callback Kullanma

Action Button kullandığınız pushlarda kullanıcının tıkladığı butona göre yönlendirme yapabilmek için Action Button delege methodunu kullanmalısınız.

Öncelikle AppDelegate class'ına PushAction protokolünü ekleyin.

Code Block
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate, PushAction {
  ...
}

Ardından aşağıdaki fonksiyonu AppDelegate class'ının içerisine ekleyerek kullanabilirsiniz.

Code Block
func actionButtonClicked(identifier: String, url: String) {
        print(identifier,url)
}

Son hali aşağıdaki ekran görüntüsündeki gibi olacaktır.

...

Push Mesajlarını Okundu Olarak İşaretleme

getPushMessages fonksiyonunda kullanıcılarınıza uygulama içerisinde gösterdiğiniz push mesajların okundu bilgisini işaretlemek için aşağıdaki fonksiyonları kullanabilirsiniz. Bu fonksiyonlar ile getPushMessages içerisinde bulunan payload/payloadlarda ki status durumunu O yapar ve buna göre kendi oluşturduğunuz bildirim merkezinde buna göre aksiyon alabilirsiniz. Bu fonksiyonları kullandığınız zaman size geri dönüş olarak true veya false döner.

Tümünü okundu olarak işaretleme

Code Block
languageswift
RelatedDigital.readAllPushMessages { success in
            print(success)
        }

Bildirim bazlı okundu olarak işaretleme

Code Block
RelatedDigital.readAllPushMessages(pushId: "BURAYA_PUSH_ID_GELECEK") { success in
            print(success)
        }

getPushMessage fonksiyonunda payloadda pushId bulunmaktadır buraya o değeri ekleyeceksiniz.

Push Mesajlarını Silme

deleteAllPayloads ve deleteAllPayloadWithId fonksiyonlarını kullanarak getPushMessages fonksiyonumuz ile uygulamanız içerisinde gösterdiğiniz pushları silinde olarak işaretleyebilirsiniz.

Tüm bildirimleri silme

Code Block
RelatedDigital.deleteAllPayloads { completed in
            print(completed)
        }

Bildirim bazlı silme

Code Block
RelatedDigital.deletePayloadWithId(pushId: "1234567890") { completed in
            print(completed)
        }

Related Digital ile Firebase’i Ortak Kullanma

Uygulamanızda Related Digital SDK’mızı ve Firebase’i ortak kullanmak isterseniz uygulamanız içerisinde Notification Service Extension classına aşağıdaki kodu eklemeniz yeterli.

Code Block
import UserNotifications
import Euromsg
import FirebaseMessaging
class NotificationService: UNNotificationServiceExtension {
    var contentHandler: ((UNNotificationContent) -> Void)?
    var bestAttemptContent: UNMutableNotificationContent?
    override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) -> Void) {
        self.contentHandler = contentHandler
        bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
        if (self.bestAttemptContent != nil) {
            var userInfo = self.bestAttemptContent?.userInfo;
            let emPushSp = userInfo?["emPushSp"];
            if (emPushSp != nil) {
                print("--RelatedDigital Push")
                userInfo?.removeValue(forKey: "fcm_options")
                self.bestAttemptContent?.userInfo = userInfo!
                Euromsg.configure(appAlias: "EuromsgIOSTestDev", launchOptions: nil, enableLog: true, appGroupsKey: "group.com.relateddigital.EuromsgExample.relateddigital", deliveredBadge: false)
                Euromsg.didReceive(bestAttemptContent, withContentHandler: contentHandler)
            } else {
                print("--Firebase Push")
                Messaging.serviceExtension().populateNotificationContent(self.bestAttemptContent!, withContentHandler: contentHandler)
            }
        }
    }
    override func serviceExtensionTimeWillExpire() {
        guard let contentHandler = self.contentHandler else {
            return;
        }
        guard let bestAttemptContent = self.bestAttemptContent else {
            return;
        }
        contentHandler(bestAttemptContent)
    }
}