通知の開封を検知できません
ここでは iOS 固有の事象について取り扱っております
KARTE SDK では通知を開封した際、通知の効果測定を行うために自動で 接客サービスのクリック
イベントを送信しています。
通知の開封を検知するために UNUserNotificationDelegate に対して Method Swizzling を行っておりますが、アプリの実装方法や同時に導入するSDKの組み合わせによっては、UNUserNotificationDelegateのメソッドが呼び出されなくなる場合があります。
これは KARTE SDK で実装している Method Swizzling の処理と、他のSDK等で実装している Method Swizzling の処理がコンフリクトしているために発生することが多いです。
これを回避するために KARTE SDK では Method Swizzling を無効にする機能を用意しております。
Method Swizzling を無効にする方法
下記実装を行うことで、Method Swizzling を無効にすることができます。
RemoteNotification.isEnabledAutoMeasurement = false
[KRTRemoteNotification setIsEnabledAutoMeasurement:NO];
🚧注意事項
Method Swizzling を無効にする設定は、
KarteApp.setup(appKey:)
を呼び出す前に行う必要があります。KarteApp.setup(appKey:)
以降で設定を行っても Method Swizzling は無効になりません。
🚧制限事項
この機能は KARTE RemoteNotification SDK v2.4.0 から対応しています。
手動でのクリックイベントの送信方法
Method Swizzling を無効にした場合、通知を開封時に効果測定用のイベントが送信されないため、手動でイベントを送信する処理を実装する必要があります。
func userNotificationCenter(_ center: UNUserNotificationCenter, didReceive response: UNNotificationResponse, withCompletionHandler completionHandler: @escaping () -> Void) {
let userInfo = response.notification.request.content.userInfo
// KARTE経由のプッシュ通知であるか判定
if let notification = RemoteNotification(userInfo: userInfo) {
// KARTE経由のプッシュ通知
// 通知に含まれるディープリンクをハンドル
notification.handle()
// ★追加★ クリックイベントを送信
notification.track()
} else {
// KARTE以外のシステムから送信されたプッシュ通知
}
completionHandler()
}
import { Notification } from '@react-native-karte/notification';
import messaging from '@react-native-firebase/messaging';
messaging()
.getInitialNotification()
.then((remoteMessage) => {
if (remoteMessage) {
const notification = Notification.create(remoteMessage);
if (notification) {
// 通知に含まれるディープリンクをハンドル
notification.handle();
// ★追加★ クリックイベントを送信
notification.track();
}
}
});
messaging().onNotificationOpenedApp((remoteMessage) => {
if (remoteMessage) {
const notification = Notification.create(remoteMessage);
if (notification) {
// 通知に含まれるディープリンクをハンドル
notification.handle();
// ★追加★ クリックイベントを送信
notification.track();
}
}
});
Updated 11 months ago