我面临的问题是,当应用程序被终止时,推送通知的深层链接导航不起作用,而当应用程序处于活动状态或在后台时,它可以正常工作。我目前使用的 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()
即可使用链接
虽然这个解决方法解决了问题,但我想知道是否有更好的方法来处理它?谢谢!
在 iOS 中,当您有自定义方案 URL 时,将使用提供的深层链接回调调用
application(_:open:options:)
方法。
另一方面,当您有通用链接时,将使用提供的深层链接回调调用
application(_:continue:restorationHandler:)
方法。
有关如何使用这些方法处理自定义通知的更多信息和示例,您可以参考 MoEngage 文档的“NotificationActions”部分:自定义通知处理。
如果您仍然遇到问题或需要进一步帮助,您可以按照本文档中的说明寻求支持:通过 MoEngage 仪表板提出支持票。