iOS SDKバージョン9.x.xを使用してiOSデバイスで一般的なプッシュ通知の問題を回避する方法

問題

プッシュ通知に関する一般的な問題、特にプッシュキャンペーンのインプレッションが追跡されないことや、SDKバージョン9.x.xを使用してデバイスにプッシュ通知が正常に配信されているにもかかわらず画像がレンダリングされないこと。

info

Information

  • インプレッションを追跡するには、通知サービス拡張がアプリに実装されていることを確認してください。
  • さらに、 iOSインプレッションを表示 するトグルをMoEngageダッシュボードで有効にするには、 設定 → チャンネル → プッシュ → iOS に移動します。 iOS imp.png

ソリューション

次の手順を実行します。

  1. 各構成のプロジェクトのメインターゲットに app_group_id を追加してください :

    設定間で同じ app_group_id または異なるものを追加できます。

    info

    Information

    異なるバンドル識別子を使用しているが、同じ app_group_id を共有している場合、問題が発生する可能性があります。具体的には、異なるバンドル識別子を持つ2つのアプリが同じデバイスにインストールされている場合、Notification Service Extensionが失敗する可能性があります。

    これを避けるために、複数の構成で同じ app_group_id を使用できますが、単一のデバイスで全てのアプリを同時にテストすることはできないことに注意してください。

    app group.png

  2. SDK初期化時にapp_group_idを追加 :
    • SDKをinfo.plistを使用して初期化する場合は、info.plistファイル内のMoEngageキーの中にAPP_GROUP_IDキーを追加してください。
    • SDKをsdkConfigを使用して初期化する場合は、AppDelegateファイル内のsdkConfig変数にAPP_GROUP_IDを追加してください。

    info.plistのapp_group_id: app id.png

    sdkConfig変数のapp_group_id:

    Swift
    var sdkConfig = MoEngageSDKConfig.init(appId: "XXXXXXXXXXXXXXXX", dataCenter: .data_center_0X)
    sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX"

    Objective-C
    MoEngageSDKConfig* sdkConfig = [[MoEngageSDKConfig alloc] initWithAppId:@"XXXXXXXXXXXXXXXX" dataCenter: MoEngageDataCenterData_center_0X];
    sdkConfig.appGroupID = @"group.com.XXXXXXXXXXXXXXXX";

  3. 通知サービス拡張ターゲットを作成する : NSE.png
    • 拡張ターゲットに名前を付ける : 拡張ターゲットの名前を選択します。Swiftは、Objective-Cプロジェクトともシームレスに動作するため、推奨される言語です。 name.png
    • プッシュ通知を有効にする : 拡張ターゲットの署名と機能のセクションで、プッシュ通知を有効にし、AppGroupIdを追加します。 enable.png
    • 最小デプロイ iOS バージョンを合わせる : 通知サービス拡張の最小デプロイ iOS バージョンが、メインアプリの iOS バージョンと一致することを確認します。 support.png
  4. Notification Service ExtensionターゲットにMORichNotificationフレームワークを統合する : Podfileに、Notification Service Extensionを別のターゲットとして追加し、MORichNotificationフレームワークをインストールします。
    スウィフト
    target 'MoEngageDemo' do
      use_frameworks!
      pod 'MoEngage-iOS-SDK'
    end
    
    target 'MoEngageNotificationService' do
      use_frameworks! #use use_frameworks only if included in main target as in above scenario
      pod 'MoEngageRichNotification'
    end
  5. Code changes in NotificationService.swift file:
    import UserNotifications
    import MoEngageRichNotification
     
    class NotificationService: UNNotificationServiceExtension {
     
        var contentHandler: ((UNNotificationContent) - Void)?
        var bestAttemptContent: UNMutableNotificationContent?
     
        override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) - Void) {	
          MoEngageSDKRichNotification.setAppGroupID("group.com.XXXXXXXXXXXXXXXX")
          self.contentHandler = contentHandler
          bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent)
          MoEngageSDKRichNotification.handle(richNotificationRequest: request, withContentHandler: contentHandler)
        }
        
        override func serviceExtensionTimeWillExpire() {
            // Called just before the extension will be terminated by the system.
            // Use this as an opportunity to deliver your "best attempt" at modified content, otherwise the original push payload will be used.
            if let contentHandler = contentHandler, let bestAttemptContent =  bestAttemptContent {
                contentHandler(bestAttemptContent)
            }
        }
    }

  6. メインアプリターゲットのビルドフェーズを確認する : メインアプリターゲットのビルドフェーズセクションで、アプリ拡張の埋め込み / 基盤拡張の埋め込みセクションを見つけます。 インストール時のみコピー オプションがチェックされていないことを確認してください。 copy.png
  7. すべての構成で一貫した appGroupId を確保する : プロジェクト内のすべてのスキームと構成(例: Debug/Release/QA/UAT)で appGroupId が一貫していることを確認してください。
  8. ビルド構成の整合性 : プロジェクトを実行またはアーカイブする際は、メインターゲットと通知サービス拡張ターゲットのビルド構成が同じスキーム/構成を指していることを確認してください。 run.png build.png

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

How can we improve this article?