Mobile Messaging SDK for iOS





GitHub Stars



Last Commit

20d ago










Mobile Messaging SDK for iOS

Version License Platform

Mobile Messaging SDK is designed and developed to easily enable push notification channel in your mobile application. In almost no time of implementation you get push notification in your application and access to the features of Infobip Mobile Apps Messaging. The document describes library integration steps. Additional information can be found in our Wiki.


  • Xcode 11
  • Swift 4.2
  • iOS 10.0+

Quick start guide

This guide is designed to get you up and running with Mobile Messaging SDK integrated into your iOS application.

  1. Make sure to setup application at Infobip portal, if you haven't already.

  2. Configure your project to support Push Notifications:

    1. Click on "Capabilities", then turn on Push Notifications. Entitlements file should be automatically created by Xcode with set aps-environment value. Enable Push Notifications capability

    2. Turn on Background Modes and check the Remote notifications checkbox. Enable Remote Notifications in Background Modes settings

  3. Using CocoaPods, specify it in your Podfile:

    source ''
    platform :ios, '10.0'
    pod 'MobileMessaging'


    CocoaLumberjack logging used by default, in order to use other logging or switch it off follow this guide.

    If you use Carthage, see Integration via Carthage guide.

  4. Import the library into your AppDelegate file:

    // Swift
    import MobileMessaging
    expand to see Objective-C code

    @import MobileMessaging;

  5. Start MobileMessaging service using your Infobip Application Code, obtained in step 1, and preferable notification type as parameters:

    // Swift
    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey : Any]? = nil) -> Bool {
        MobileMessaging.withApplicationCode(<#your application code#>, notificationType: <#for example MMUserNotificationType(options: [.alert, .sound])#>)?.start()
    expand to see Objective-C code

    - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
        MMUserNotificationType *userNotificationType = [[MMUserNotificationType alloc] initWithOptions:<#for example @[MMUserNotificationType.alert, MMUserNotificationType.sound]#>;
        [[MobileMessaging withApplicationCode: <#your application code#> notificationType: userNotificationType] start:nil];

    Please note that it is not very secure to keep your API key (Application Code is an API key in fact) hardcoded so if the security is a crucial aspect, consider obfuscating the Application Code string (we can recommend UAObfuscatedString for string obfuscation).

  6. Override method application:didRegisterForRemoteNotificationsWithDeviceToken: in order to inform Infobip about the new device registered:

    // Swift
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
    expand to see Objective-C code

    - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
        [MobileMessaging didRegisterForRemoteNotificationsWithDeviceToken:deviceToken];

  7. Override method application:didReceiveRemoteNotification:fetchCompletionHandler: in order to send notification delivery reports to Infobip:

    // Swift
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        MobileMessaging.didReceiveRemoteNotification(userInfo, fetchCompletionHandler: completionHandler)
    expand to see Objective-C code

    - (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler {
        [MobileMessaging didReceiveRemoteNotification:userInfo fetchCompletionHandler:completionHandler];

  8. Integrate Notification Service Extension into your app in order to obtain:

    • more accurate processing of messages and delivery stats
    • support of rich notifications on the lock screen
  9. Skip this step if your apps minimum deployment target is iOS 10 or later. Override method application:didReceiveLocalNotification(for Objective-C) or application:didReceive:(for Swift) in order the MobileMessaging SDK to be able to handle incoming local notifications internally:

    // Swift
    func application(_ application: UIApplication, didReceive notification: UILocalNotification) {
    <details><summary>expand to see Objective-C code</summary>
    -(void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification {
        [MobileMessaging didReceiveLocalNotification:notification];

    In case of a clean project, your AppDelegate.swift code should look like following: AppDelegate source code example

If all the steps implemented correctly, run your application on a real device, you should see the logs in Xcode console confirming that the MobileMessaging SDK has been initialized succesfully and the device has been registered on APNS to receive Push messages:

2019-01-28 18:24:16:003 [MobileMessaging] ℹ️ SDK successfully initialized!
2019-01-28 18:25:44:144 [MobileMessaging] ℹ️ [APNS reg manager] Application did register with device token <...>

If you don't see any logs, set up the default logger before starting the SDK: MobileMessaging.logger = MMDefaultLogger(). Please note that the logs are only collected while your project is in "debug" configuration.

Please pay close attention to a Provisioning Profile that is used for your project build. It must match the APNs environment! If they don't, we'll invalidate the device push registration (more information here I don't receive push notifications!

NEXT STEPS: User profile

If you have any questions or suggestions, feel free to send an email to or create an issue.

Rate & Review

Great Documentation0
Easy to Use0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Unwelcoming Community0