Versions Compared

Key

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

If you are using a version lower than 2.0.0 go here.

Step 1 - Requirements

iOS Mobile App & Xcode

P12 file & password

AppAlias (You can get it from RMC Panel) If you do not have an account, our sales representatives will contact you. Click here.

Step 2 - Installation

2.1 Euromsg is available through CocoaPods. To install it, If you are using a version lower than 2.0.0 go here.

In this page:

Table of Contents

...

Step 1 - Requirements

iOS Mobile App & Xcode

P12 file & password or P8 File.

Click here to create a P12 file.

Click here to create a P8 file.

AppAlias (You can get it from RMC Panel) If you do not have an account, our sales representatives will contact you. Click here.

Step 2 - Installation

2.1 Euromsg is available through CocoaPods. To install it, simply add the following line to your Podfile

Code Block
pod 'Euromsg', '>= 2.0.0'

Step 3 - Add Application to RMC Panel

First, create your application from the RMC Panel. App Alias section should be unique to you. RMC makes the distinction based on this value.

...

Step 4 - Usage

Add a Notification Service Extension

NotificationServiceExtension allows your iOS application to receive rich notifications with images, buttons, and badges. It's also required for Euromessage's analytics features.

  1. In Xcode File > New > Target...

  2. Select Notification Service Extension then press Next.

    Image Modified

  3. Enter the product name as NotificationService and press Finish.

    Image Modified

  4. Do not select Activate on the dialog that is shown after selecting Finish.

    Image Modified

    By canceling, you are keeping Xcode debugging your app, instead of the extension you just created.

    If you activated by accident, you can switch back to debug your app within Xcode (next to the play button).

  5. In the project navigator, select the top-level project directory and select the NotificationSerivce target in the project and targets list. Unless you have a specific reason not to, you should set the Deployment Target to be iOS 11.

    Image Modified
  6. Open NotificationService.swift and replace the whole file's contents with the following code.

    Code Block
    languageswift
    import UserNotifications
    import Euromsg
    
    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)
            Euromsg.

...

  1. configure(appAlias: "EuromsgIOSTest", launchOptions: nil, enableLog: true)
            

...

  1. Euromsg.didReceive(bestAttemptContent, withContentHandler: contentHandler)
        }
    
        override func serviceExtensionTimeWillExpire() {
            guard 

...

  1. let 

...

  1. contentHandler 

...

  1. = 

...

  1. self.contentHandler 

...

  1. else 

...

  1. {
    

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.        return;
     

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1. }
    

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1. guard 

...

  1. let 

...

  1. bestAttemptContent 

...

  1. = 

...

  1. self.bestAttemptContent else {
           

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1.  

...

  1. return;
    

...

  1.  

...

  1.   

...

  1.  

...

  1.     }
            

...

  1. contentHandler(bestAttemptContent

...

  1. )
    

...

  1.  

...

  1.    

...

  1. }
    

...

  1. }

...

Add a Notification Content Extension

Note: If you are going to use carousel push sending, you need to add this.

...

In Xcode File > New > Target...

Select Notification Content Extension then press Next.

...

  1. Make sure "Copy only when installing" is not selected. First select your Main Target, then open Build Phases > Embed App Extensions. Here, deselect if Copy only when installing is selected. If this is selected, you cannot use images in your pushes.

    Image Added

Add a Notification Content Extension

Note: If you are going to use carousel push sending, you need to add this.

  1. In Xcode File > New > Target...

  2. Select Notification Content Extension then press Next.

    Image Added

  3. Enter the product name as NotificationContent and press Finish.

    Image Modified

  4. Do not select Activate on the dialog that is shown after selecting Finish.

...

By canceling, you are keeping Xcode debugging your app, instead of the extension you just created.

If you activated by accident, you can switch back to debug your app within Xcode (next to the play button).

...

In the project navigator, select the top-level project directory and select the NotificationContent target in the project and targets list. Unless you have a specific reason not to, you should set the Deployment Target to be iOS 11.

...

...

Delete MainInterface.storyboard and NotificationContent.swift files. Then create a swift file named EMNotificationViewController under the NotificationContent folder.

...

Open EMNotificationViewController.swift and replace the whole file's contents with the following code

...

languageswift

...

  1. Image Added

    By canceling, you are keeping Xcode debugging your app, instead of the extension you just created.

    If you activated by accident, you can switch back to debug your app within Xcode (next to the play button).

  2. In the project navigator, select the top-level project directory and select the NotificationContent target in the project and targets list. Unless you have a specific reason not to, you should set the Deployment Target to be iOS 11.

    Image Added

  3. Delete MainInterface.storyboard and NotificationContent.swift files. Then create a swift file named EMNotificationViewController under the NotificationContent folder. Make sure the info.plist file is the same as in this link.

    Image Added

    Don't Create Objective-C Bridging Header

    Image Added

  4. Open EMNotificationViewController.swift and replace the whole file's contents with the following code

Code Block
languageswift
import UIKit
import UserNotifications
import UserNotificationsUI
import Euromsg

@objc(EMNotificationViewController)
class EMNotificationViewController: UIViewController, UNNotificationContentExtension {
    
    let carouselView = EMNotificationCarousel.initView()
    var completion: ((_ url: URL?, _ bestAttemptContent: UNMutableNotificationContent?) -> Void)?
    
    var notificationRequestIdentifier = ""
    
    func didReceive(_ notification: UNNotification) {
        notificationRequestIdentifier = notification.request.identifier
        Euromsg.configure(appAlias: "EuromsgIOSTest", launchOptions: nil, enableLog: true)
        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 EMNotificationViewController: CarouselDelegate {
    
    func selectedItem(_ element: EMMessage.Element) {
        // Add your work...
        print("Selected element is => \(element)")
    }   
}

The podfile file should be as follows. Then go to the project path through the terminal, type pod install and press enter.

...

Code Block
target 'YOUR_PROJECT_NAME' do
  # Comment the next line if you don't want to use dynamic frameworks
  use_frameworks!
pod 'Euromsg'
post_install do |installer|
    installer.pods_project.targets.each do |target|
        if target.name == 'Euromsg'
            target.build_configurations.each do |config|
                config.build_settings['APPLICATION_EXTENSION_API_ONLY'] = 'No'
            end
        end
    end
end
  # Pods for RelatedDigital

end

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

end

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

end

Adding App Groups

After completing all of them, you need to add App Groups to Targets.

Add App Groups under Signing & Capabilities respectively in Targets marked on the left in the image. Type the App Groups name as group.YOUR_APP_BUNDLE_IDENTIFIER.relateddigital

...

AppDelegate.swift

Firstly import Euromsg and UserNotifications

Code Block
languageswift
import Euromsg
import UserNotifications

Add UNUserNotificationCenterDelegate to the class AppDelegate section.

Code Block
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate

Provisional Push

If you want to get provisional push permission, add the following code to didFinishLaunchingWithOptions. For iOS 12 or older version users, this function will work as askForNotificationPermission.

Code Block
languageswift
        UNUserNotificationCenter.current().delegate = self
        
        self?.extensionContext?.open(url)
            }
        Euromsg.configure(appAlias: "YOUR_APP_ALIAS", enableLog: true)
   else if let url = self?.appUrl {Euromsg.registerForPushNotifications()
        Euromsg.askForNotificationPermissionProvisional()
        self?.extensionContext?.open(url)
  if #available(iOS 13, *) {
         }   // handle push for iOS 13 }and later        carouselView.completion = completionin sceneDelegate
        }
 self.view = carouselView     }else }

The podfile file should be as follows. Then go to the project path through the terminal, type pod install and press enter.

...

AppDelegate.swift

Firstly import Euromsg and UserNotifications

Code Block
languageswift
import Euromsg
import UserNotifications

Add UNUserNotificationCenterDelegate to the class AppDelegate section.

Code Block
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate

Add this code under didFinishLaunchingWithOptions.

Code Block
languageswift
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        
if let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [String: Any] {
            Euromsg.handlePush(pushDictionary: userInfo)
        }

If you do not want to get provisional push permission, add the following code to didFinishLaunchingWithOptions.

Code Block
languageswift
        UNUserNotificationCenter.current().delegate = self
        
        Euromsg.configure(appAlias: "YOUR_APP_ALIAS", enableLog: true)
        Euromsg.registerForPushNotifications()
        Euromsg.askForNotificationPermission()
        if #available(iOS 13, *) {
            // handle push for iOS 13 and later in sceneDelegate
        }
        else if let userInfo = launchOptions?[UIApplication.LaunchOptionsKey.remoteNotification] as? [String: Any] {
            Euromsg.handlePush(pushDictionary: userInfo)
        }
     
  return true     }

User has to accept to receive push messages. If the user accepts and the device is successfully registered to the APNS, the following method is called in AppDelegate

...

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

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

    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                willPresent notification: UNNotification,
                                withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
        completionHandler([.alert, .badge, .sound])
    }
    
    func userNotificationCenter(_ center: UNUserNotificationCenter,
                                didReceive response: UNNotificationResponse,
                                withCompletionHandler completionHandler: @escaping () -> Void) {
        Euromsg.handlePush(pushDictionary: response.notification.request.content.userInfo)
        completionHandler()
    }

SceneDelegate.swift

Code Block
languageswift
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
        // Use this method to optionally configure and attach the UIWindow `window` to the provided UIWindowScene `scene`.
        // If using a storyboard, the `window` property will automatically be initialized and attached to the scene.
        // This delegate does not imply the connecting scene or session are new (see `application:configurationForConnectingSceneSession` instead).
        guard let _ = (scene as? UIWindowScene) else { return }

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

Send Information to RMC

Run the code below when the user successfully logs in, registers and the first time the application is opened.

...

.request.content.userInfo {
            Euromsg.handlePush(pushDictionary: userInfo)
        }    
    } 

Send Information to RMC

Run the code below when the user successfully logs in, registers and the first time the application is opened.

In order for your data from the mobile channel to be uploaded to RMC, please pay attention that whatever reference value you have used in your active RMC account (KEY_ID * or E-Mail) comes from the mobile channel with this reference.

*KEY_ID: These are the id values ​​used by the application owner to deduplicate the customer. These can be expressed with different names such as CRMid, userid, customerid, accountid.

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

Optional Parameters

setUserProperty: User to fill demographic fields

setAppVersion: You can segment according to the version your users use.

checkConfiguration: You can check the permission status of users

...

IYS Email Register

Add it just before Euromsg.sync() code.

Code Block
languageswift
Euromsg.setUserPropertyregisterEmail(keyemail: "Keyexample@email.com", valuepermission: "Value")
Euromsg.setAppVersion(appVersion: "1.0.0")
let conf = Euromsg.checkConfiguration()
conf.properties?.pushPermit
conf.properties?.emailPermit
conf.properties?.gsmPermit
Euromsg.setPushNotification(permission: true)
Euromsg.setEmail(permission: true)
Euromsg.setPhoneNumber(permissiontrue)
//You can also call TACIR account as following
Euromsg.registerEmail(email: "example@commercial.com, permission: true, isCommercial: true)