当用户收到推送通知然后点击按钮以查看它并导航到应用程序内的正确页面时,我很难理解我在这里丢失了什么,所以我的代码是这样的,顺便说一下在ios中运作良好:
因此,如果应用程序是android,我使用下面的代码...我收到内容并将其传递给一个名为handleOpenURL的函数
if (application.android) {
application.on(application.launchEvent, (args) => {
try {
TnsOneSignal.startInit(application.android.context).setNotificationOpenedHandler(new TnsOneSignal.NotificationOpenedHandler({
// notificationOpened: function (result: com.onesignal.OSNotificationOpenResult) {
notificationOpened: function (result) {
const imovelAndroid = JSON.parse(result.stringify()).notification.payload.additionalData;
handleOpenURL(imovelAndroid);
}
})).init();
TnsOneSignal.setInFocusDisplaying(TnsOneSignal.OSInFocusDisplayOption.Notification);
TnsOneSignal.startInit(application.android.context).init();
}
catch (error) {
console.error('error', error);
}
});
}
我实际上正在进入下面的功能,但问题是在导航时,它根本不起作用:
function handleOpenURL(argImovel) {
const precoToNumber = +argImovel['imovel'].preco;
const precoFormated = Number(precoToNumber).toLocaleString("pt-PT", { minimumFractionDigits: 0 });
const navigationOptions = {
moduleName: "detail/detail-page",
context:{ //my context here which is big so i´m not putting it.
}
};
frameModule.topmost().navigate(navigationOptions);
}
一切都按照预期在ios中运行,它应该接收推送,当用户点击它时,应用程序应该导航到显示收到的内容的详细页面。
我错过了什么?谢谢你的时间,问候。
编辑
感谢Manoj,我修复了将此问题添加到handleOpenURL函数的问题:
setTimeout(() => {
frameModule.topmost().navigate(navigationOptions);
}, 2);
确保您的Frame准备好导航,尝试记录frameModule.topmost()
并查看它是否是有效帧。
也许你可以尝试超时1或2秒,看看是否能解决问题。