【发布时间】:2019-03-12 23:58:29
【问题描述】:
当用户收到推送通知然后点击按钮以查看它并导航到应用程序内的正确页面时,我很难理解我在这里缺少什么,所以我的代码是这样的它在 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()并查看这是否是有效的 frame。也许您可以尝试 1 或 2 秒的超时,看看是否能解决问题。 -
Perfect Manoj!!!,解决了问题,我设置了 2 秒的超时时间。
-
顺便说一下 Manoj,我的推送通知总是出现在手机顶部(在 android 中)你知道我怎么能显示这个来显示弹出样式?对不起,我不知道确切的名字。
-
我没有检查他们的 API,但大多数情况下它只是 Android 上的托盘通知,除非他们允许我们自定义收到的通知回调。当我有时间检查时会通知您。
-
好的...我会提出另一个问题,我将在哪里发布我的代码,谢谢