問題
iOSデバイスで、Native iOS、Swift、MoEngage-iOS-SDK(バージョン7.x.x、8.x.x、9.x.x)を使用している際に、プッシュ通知の配信失敗、画面ナビゲーション、ディープリンク、リッチランディングに関する一般的な問題が発生しています。
解決策
次の手順を実行します。
-
Firebase プロキシ
:
- Firebase プッシュ通知を使用していない場合は、info.plist に FirebaseAppDelegateProxyEnabled キーを追加し、値を Boolean = False/NO に設定して Firebase プロキシを無効にします。
- プッシュ通知をテストします。成功した場合は、これ以上の操作は不要です。そうでない場合は、以下の手順に従ってください。
- Firebase プッシュ通知を使用している場合は、このステップをスキップして次の手順に進んでください。
-
UNUserNotificationCenterDelegateを設定する
:
- AppDelegate.swiftで、didFinishLaunchメソッド内でUNUserNotificationCenterDelegateを設定します。
- didFinishLaunchでFirebaseを初期化する場合は、MoEngage SDKを初期化する前に行ってください。
-
このメソッドの開始時にUNUserNotificationCenterDelegateが設定されていることを確認してください。
//7.xx import MoEngage //8.xx //9.xx import MoEngageSDK 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 with sdkConfig var sdkConfig = MOSDKConfig.init(appID: "XXXXXXXXXXXXXXXX") sdkConfig.moeDataCenter = DATA_CENTER_0X sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX" #if DEBUG MoEngage.sharedInstance().initializeTest(with: sdkConfig, andLaunchOptions: launchOptions) #else MoEngage.sharedInstance().initializeLive(with: sdkConfig, andLaunchOptions: launchOptions) #endif //8.xx version with sdkConfig var sdkConfig = MOSDKConfig.init(withAppID: "XXXXXXXXXXXXXXXX") sdkConfig.enableLogs = true sdkConfig.moeDataCenter = .data_center_0X sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX" #if DEBUG MoEngage.sharedInstance().initializeDefaultTestInstance(with: sdkConfig, andLaunchOptions: launchOptions) #else MoEngage.sharedInstance().initializeDefaultLiveInstance(with: sdkConfig, andLaunchOptions: launchOptions) #endif //9.xx version with sdkConfig var sdkConfig = MoEngageSDKConfig.init(appId: "XXXXXXXXXXXXXXXX", dataCenter: .data_center_0X) sdkConfig.enableLogs = true sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX" #if DEBUG MoEngage.sharedInstance.initializeDefaultTestInstance(sdkConfig) #else MoEngage.sharedInstance.initializeDefaultLiveInstance(sdkConfig) #endif // Rest of the implementation related to developer's app return true }
-
AppDelegate.swiftを拡張する
:
-
AppDelegate.swiftを拡張して、UNUserNotificationCenterDelegateに準拠させます。AppDelegate.swiftは以下のコードスニペットに似ている必要があります:
class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate { }
-
AppDelegate.swiftを拡張して、UNUserNotificationCenterDelegateに準拠させます。AppDelegate.swiftは以下のコードスニペットに似ている必要があります:
-
MoEngageプロキシを無効化
:
-
info.plistにMoEngageAppDelegateProxyEnabledキーを追加し、値をBoolean = False/NOに設定します
-
info.plistにMoEngageAppDelegateProxyEnabledキーを追加し、値をBoolean = False/NOに設定します
-
プッシュ通知トークンを手動で渡す
:
-
AppDelegate.swiftのdidRegisterForRemoteNotificationsWithDeviceToken関数を使用して、プッシュ通知トークンを手動で渡します。
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) }
-
AppDelegate.swiftのdidRegisterForRemoteNotificationsWithDeviceToken関数を使用して、プッシュ通知トークンを手動で渡します。
-
UNUserNotificatoinCenter デリゲート関数を実装する
:
-
AppDelegate.swift で UNUserNotificatoinCenter デリゲート関数が実装されていることを確認します。
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) }
-
AppDelegate.swift で UNUserNotificatoinCenter デリゲート関数が実装されていることを確認します。