ネイティブiOS、Swift、およびMoEngage-iOS-SDK(バージョン7.x.x、8.x.x、9.x.x)を使用してiOSデバイスで一般的なプッシュ通知の問題を回避する方法

問題

iOSデバイスで、Native iOS、Swift、MoEngage-iOS-SDK(バージョン7.x.x、8.x.x、9.x.x)を使用している際に、プッシュ通知の配信失敗、画面ナビゲーション、ディープリンク、リッチランディングに関する一般的な問題が発生しています。

解決策

次の手順を実行します。

  1. Firebase プロキシ :
    • Firebase プッシュ通知を使用していない場合は、info.plist に FirebaseAppDelegateProxyEnabled キーを追加し、値を Boolean = False/NO に設定して Firebase プロキシを無効にします。
    • プッシュ通知をテストします。成功した場合は、これ以上の操作は不要です。そうでない場合は、以下の手順に従ってください。
    • Firebase プッシュ通知を使用している場合は、このステップをスキップして次の手順に進んでください。
  2. UNUserNotificationCenterDelegateを設定する :
    • AppDelegate.swiftで、didFinishLaunchメソッド内でUNUserNotificationCenterDelegateを設定します。
    • didFinishLaunchでFirebaseを初期化する場合は、MoEngage SDKを初期化する前に行ってください。
    • このメソッドの開始時にUNUserNotificationCenterDelegateが設定されていることを確認してください。

      Swift
      //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
      }
  3. AppDelegate.swiftを拡張する :
    • AppDelegate.swiftを拡張して、UNUserNotificationCenterDelegateに準拠させます。AppDelegate.swiftは以下のコードスニペットに似ている必要があります:
      Swift
      class AppDelegate: UIResponder, UIApplicationDelegate, UNUserNotificationCenterDelegate {
      
      }
  4. MoEngageプロキシを無効化 :
    • info.plistにMoEngageAppDelegateProxyEnabledキーを追加し、値をBoolean = False/NOに設定します boolean.png
  5. プッシュ通知トークンを手動で渡す :
    • AppDelegate.swiftのdidRegisterForRemoteNotificationsWithDeviceToken関数を使用して、プッシュ通知トークンを手動で渡します。
      Swift
      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)
      }
  6. UNUserNotificatoinCenter デリゲート関数を実装する :
    • AppDelegate.swift で UNUserNotificatoinCenter デリゲート関数が実装されていることを確認します。
      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)
      }

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

How can we improve this article?