Documentation Index
Fetch the complete documentation index at: https://moengage-crashes-in-debug-feedback.mintlify.app/llms.txt
Use this file to discover all available pages before exploring further.
Problem
Common issues with Push notifications, including failed delivery, screen navigation, deep linking, and rich landing, are occurring on iOS devices using React-Native, Swift, and MoEngage-iOS-SDK (Versions 7.xx, 8.x.x, 9.x.x).
Instructions
Perform the following steps:
- Firebase Proxy:
- If you are not using Firebase push notifications, disable the Firebase proxy by adding the FirebaseAppDelegateProxyEnabled key in info.plist with the value Boolean = False/NO.
- Test the push notification. If successful, no further action is required. Otherwise, follow the steps below.
- If you are using Firebase push notifications, skip this step and proceed with the following steps.
- Set UNUserNotificationCenterDelegate:
- In AppDelegate.swift, set UNUserNotificationCenterDelegate in the didFinishLaunch method.
- If you are initializing Firebase in didFinishLaunch, do so before initializing the MoEngage SDK.
- Ensure UNUserNotificationCenterDelegate is set at the start of this method.
//7.xx
import MoEngage
//8.xx
import MoEngageSDK
import ReactNativeMoEngage
//9.xx
import MoEngageSDK
import ReactNativeMoEngage
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) - Bool {
UNUserNotificationCenter.current().delegate = self
FIRApp.configure() //Firebase configuration - syntax could differ according to versions
//MoEngage Initializatoin - use specific version code only
//7.xx version //Set MoEngage Properties in Info.plist
MoEngage.setDataCenter(DATA_CENTER_0X)
MoEngage.enableSDKLogs(true)
MoEngage.setAppGroupID("group.com.XXXXXXXXXXXXXXXX")
MOReactInitializer.sharedInstance().intializeSDK(withLaunchOptions: launchOptions)
//7.xx version with sdkConfig
var sdkConfig = MOSDKConfig.init(appID: "XXXXXXXXXXXXXXXX")
sdkConfig.moeDataCenter = DATA_CENTER_0X
sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX"
MOReactInitializer.sharedInstance().intializeSDK(withConfig: sdkConfig, andLaunchOptions: launchOptions)
//8.xx version //Set MoEngage Properties in Info.plist
MoEngageInitializer.sharedInstance().initializeDefaultInstance(launchOptions)
//8.xx version with sdkConfig
var sdkConfig = MOSDKConfig.init(withAppID: "XXXXXXXXXXXXXXXX")
sdkConfig.enableLogs = true
sdkConfig.moeDataCenter = .data_center_0X
sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX"
MoEngageInitializer.sharedInstance().initializeDefaultSDKConfig(sdkConfig, andLaunchOptions: launchOptions)
//9.xx version //Set MoEngage Properties in Info.plist
MoEngageInitializer.sharedInstance().initializeDefaultInstance(launchOptions)
//9.xx version with sdkConfig
var sdkConfig = MoEngageSDKConfig.init(appId: "XXXXXXXXXXXXXXXX", dataCenter: .data_center_0X)
sdkConfig.enableLogs = true
sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX"
MoEngageInitializer.sharedInstance().initializeDefaultSDKConfig(sdkConfig, andLaunchOptions: launchOptions)
// Rest of the implementation related to developer's app
return true
}
- Extend AppDelegate.swift:
- Extend AppDelegate.swift to conform to UNUserNotificationCenterDelegate. Your AppDelegate.swift must resemble the following code snippets:
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
}
- Disable MoEngage Proxy:
- Add MoEngageAppDelegateProxyEnabled key in info.plist with the value Boolean = False/NO
- Pass Push Notification Token Manually:
- Use the didRegisterForRemoteNotificationsWithDeviceToken function of AppDelegate.swift to pass the push notification token manually.
func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
//7.xx version
MoEngage.sharedInstance().setPushToken(deviceToken)
//8.xx version
MOMessaging.sharedInstance.setPushToken(deviceToken)
//9.xx version
MoEngageSDKMessaging.sharedInstance.setPushToken(deviceToken)
}
- Implement UNUserNotificatoinCenter Delegate Functions:
- Ensure UNUserNotificatoinCenter Delegate functions are implemented in AppDelegate.swift.
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) - Void) {
//This is to only to display Alert and enable notification sound
if #available(iOS 14.0, *) {
completionHandler([.sound,.alert, .banner, .list])
} else {
completionHandler([.sound,.alert])
}
}
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () - Void) {
//7.xx version
MoEngage.sharedInstance().userNotificationCenter(center, didReceive: response)
//8.xx version
MOMessaging.sharedInstance.userNotificationCenter(center, didReceive: response)
//9.xx version
MoEngageSDKMessaging.sharedInstance.userNotificationCenter(center, didReceive: response)
}