MoEngage:应用程序被终止时,推送通知中的深层链接导航不起作用

问题描述 投票:0回答:1

我面临的问题是,当应用程序被终止时,推送通知的深层链接导航不起作用,而当应用程序处于活动状态或在后台时,它可以正常工作。我目前使用的 MoEngage React Native SDK 版本是 9.1.0,我还为 iOS 禁用了

AppDelegate
swizzling。

据我了解,应该通过

Linking.getInitialURL()
获得深层链接。虽然它部分适用于 Android(但链接不能按原样使用),但它根本不适用于 iOS

我目前使用的解决方法是:

// MainActivity.kt
override fun onCreate(savedInstanceState: Bundle?) {
    val originalIntent = intent
    if (originalIntent.extras != null) {
        val remoteMessage = RemoteMessage(originalIntent.extras)
        if (MoEPushHelper.getInstance().isFromMoEngagePlatform(remoteMessage.data)) {
            try {
                val deeplink = remoteMessage.data[PUSH_NOTIFICATION_NAVIGATION_DEEPLINK]
                    ?: remoteMessage.data[PUSH_NOTIFICATION_NAVIGATION_DEEPLINK_LEGACY]
                if (deeplink != null) {
                    originalIntent.apply {
                        data = Uri.parse(deeplink)
                    }
                    intent = originalIntent
                }
            } catch (e: Exception) {
                // Handle exception
            }
        }
    }
    super.onCreate(null)
}
// AppDelegate.mm
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    // Other initializations

    NSMutableDictionary *newLaunchOptions = [NSMutableDictionary dictionaryWithDictionary:launchOptions];
    NSDictionary *userInfo = launchOptions[UIApplicationLaunchOptionsRemoteNotificationKey];
    if (userInfo && !launchOptions[UIApplicationLaunchOptionsURLKey]) {
        if ([[MoEngageSDKMessaging sharedInstance] isPushFromMoEngageWithPayload:userInfo]) {
            NSString *initialURL = userInfo[@"app_extra"][@"moe_deeplink"];
            if (initialURL) {
                newLaunchOptions[UIApplicationLaunchOptionsURLKey] = [NSURL URLWithString:initialURL];
            }
        }
    }

    BOOL result = [super application:application didFinishLaunchingWithOptions:newLaunchOptions];
    UIView *rootView = self.window.rootViewController.view;
    [RNSLoadingView setupWithRootView:rootView];
    return result;
}

然后在 JS 端,使用

Linking.getInitialURL()

即可使用链接

虽然这个解决方法解决了问题,但我想知道是否有更好的方法来处理它?谢谢!

android ios react-native push-notification moengage
1个回答
0
投票

在 iOS 中,当您有自定义方案 URL 时,将使用提供的深层链接回调调用

application(_:open:options:)
方法。

另一方面,当您有通用链接时,将使用提供的深层链接回调调用

application(_:continue:restorationHandler:)
方法。

有关如何使用这些方法处理自定义通知的更多信息和示例,您可以参考 MoEngage 文档的“NotificationActions”部分:自定义通知处理。

如果您仍然遇到问题或需要进一步帮助,您可以按照本文档中的说明寻求支持:通过 MoEngage 仪表板提出支持票。

© www.soinside.com 2019 - 2024. All rights reserved.