Skip to main content

iOS Mobile SDK v25.7.0

Compatibility Overview

ComponentVersion
Minimum iOS Version16.0
Minimum watchOS Version9.0
Built Using Xcode16.2
Swift Version5
Swift Tools Version5.10
Package ManagerSwift Package
Q2MobileApp25.7.0
Q2DevApp25.7.0

Q2MobileApp Dependencies

LibraryVersion
Firebase Messaging11.5.0
Bugsnag6.30.1
Pendo3.6.3

Improvements

Q2MobileApp now supports explicit module targeting for push notifications, enabling multiple modules to independently process and render rich content notifications.

Partner Integration Requirements

  • Each module must expose a public identifier string by implementing PushSenderProvider.
  1. Create PushSender with unique identifier.
extension PushSender {

static var moduleSender: Self {
PushSender(id: "com.q2.mobile.module.{your-unique-identifier}")
}
}

Changes Needs to be made at following places if applicable for your use case.

Possible Change: If your module class inherits from Q2ModuleBase then override as follow and uses one or more methods of PushLifecycleModule.

public class YourClass: Q2ModuleBase {

public override static var sender: PushSender? {
return .moduleSender
}

...
}

Possible Change: If your module requires push content extension, implement following static property in type confirming to PushContentExtensionModule

public class YourPushContentExtensionClass: PushContentExtensionModule {

public static var sender: Q2ModuleInterfaces.PushSender? {
return .moduleSender
}
...
}

Possible Change: If your module requires push service extension, then implement following static property in type confirming to PushServiceExtensionModule

public class YourPushServiceExtensionClass: PushServiceExtensionModule {

public static var sender: Q2ModuleInterfaces.PushSender? {
return .moduleSender
}

...
}
  • Custom Payload Key (sender)

    • Partners can now include a "sender" key in the notification payload to explicitly indicate Q2MobileCore which module should handle the notification.
    • PushSender identifier should be unique and needs to be used as sender when you send your notification as specified below.

    Example Payload:

    {
    "aps": {
    "alert": {
    "title": "Title",
    "subtitle": "Subtitle",
    "body": "Body"
    },
    "mutable-content": 1
    },
    "sender": "com.q2.mobile.module.{your-unique-identifier}"
    }

Runtime Resolution Logic

  • MobileCore reads the sender value from the payload.
  • If a matching module is found, only that module handles the notification.
  • If no match is found or the key is missing, fallback to legacy behavior (first available module).
Applies To
  • PushServiceExtensionModule (e.g., image downloading, payload mutation)
  • PushContentExtensionModule (e.g., custom UI rendering)
  • PushLifecycleModule (e.g. when notification is received.)