問題
プッシュ通知に関する一般的な問題、プッシュキャンペーンのインプレッションが追跡されないことや、SDKバージョン7.x.xを使用してデバイスにプッシュ通知が正常に配信されても画像がレンダリングされないことを含みます。
info |
Information
|
ソリューション
次の手順を実行します。
-
各構成のプロジェクトのメインターゲットにapp_group_idを追加する :
構成全体で同じ app_group_id または異なるものを追加できます。
info Information
異なるバンドル識別子を使用しているが、同じ app_group_id を共有している場合、問題が発生する可能性があります。具体的には、異なるバンドル識別子を持つ2つのアプリが同じデバイスにインストールされている場合、app_group_idが同じであれば、通知サービス拡張が失敗する可能性があります。
これを避けるために、複数の構成で同じ app_group_id を使用することができますが、単一のデバイスで全てのアプリを同時にテストすることはできないことに注意してください。
-
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:
sdkConfig変数のapp_group_id:
var sdkConfig = MOSDKConfig.init(appID: "XXXXXXXXXXXXXXXX") sdkConfig.moeDataCenter = DATA_CENTER_0X sdkConfig.appGroupID = "group.com.XXXXXXXXXXXXXXXX" //if SDK initialized without sdkConfig in AppDelegate file MoEngage.setAppGroupID("group.com.moengage.MIPL567.demo")
MOSDKConfig* sdkConfig = [[MOSDKConfig alloc] initWithAppID: @"XXXXXXXXXXXXXXXX"];sdkConfig.moeDataCenter = DATA_CENTER_0X;sdkConfig.appGroupID = @"group.com.XXXXXXXXXXXXXXXX";//if SDK initialized without sdkConfig in AppDelegate file[MoEngage setAppGroupID: @"group.com.XXXXXXXXXXXXXXXX"];
-
通知サービス拡張ターゲットを作成する
:
-
拡張ターゲットの名前を付ける
: 拡張ターゲットの名前を選択します。SwiftはObjective-Cプロジェクトともシームレスに動作するため、推奨される言語です。
-
プッシュ通知を有効にする
: 拡張ターゲットの署名と機能のセクションで、プッシュ通知を有効にし、AppGroupIdを追加します。
-
最小デプロイ iOS バージョンを揃える
: 通知サービス拡張の最小デプロイ iOS バージョンがメインアプリの iOS バージョンと一致することを確認します。
-
拡張ターゲットの名前を付ける
: 拡張ターゲットの名前を選択します。SwiftはObjective-Cプロジェクトともシームレスに動作するため、推奨される言語です。
-
通知サービス拡張ターゲットにMORichNotificationフレームワークを統合する
: Podfileに、通知サービス拡張を別のターゲットとして追加し、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 'MORichNotification' end
-
Code changes in NotificationService.swift file:
import UserNotifications import MORichNotification class NotificationService: UNNotificationServiceExtension { var contentHandler: ((UNNotificationContent) - Void)? var bestAttemptContent: UNMutableNotificationContent? override func didReceive(_ request: UNNotificationRequest, withContentHandler contentHandler: @escaping (UNNotificationContent) - Void) { MORichNotification.setAppGroupID("group.com.XXXXXXXXXXXXXXXX") self.contentHandler = contentHandler bestAttemptContent = (request.content.mutableCopy() as? UNMutableNotificationContent) MORichNotification.handle(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) } } }
-
メインアプリターゲットのビルドフェーズを確認する
: メインアプリターゲットのビルドフェーズセクションで、アプリ拡張の埋め込み / 基盤拡張の埋め込みセクションを見つけます。
インストール時のみコピー
オプションがチェックされていないことを確認してください。
- すべての構成で一貫した appGroupId を確保する : プロジェクト内のすべてのスキームおよび構成(例: Debug/Release/QA/UAT)で appGroupId が一貫していることを確認してください。
-
ビルド構成の整合性
: プロジェクトを実行またはアーカイブする際は、メインターゲットと通知サービス拡張ターゲットの両方のビルド構成が同じスキーム/構成を指していることを確認してください。