Cordova通过推送通知检测冷启动

Cordova detect cold start from Push Notification

本文关键字:通知 检测 冷启动 Cordova      更新时间:2023-09-26

我有一个在iOS上运行的cordova应用程序(codova(3.4.0)),很快也会在Android上运行。推送通知已实现并正在运行。我在通过推送通知检测应用程序何时启动以及将应用程序重定向到正确页面时遇到了问题。

注意:当应用程序在后台运行时,这与从推送通知启动应用程序无关。只有当应用程序完全关闭时!

我现在有以下工作流程:

定期启动:

  • 等待cordova.js启动ondeviceready事件
  • 在ondeviceready事件中,重定向到我的应用程序的启动视图(通过window.location.hash)

从推送通知冷启动应用程序:

  • 等待cordova.js启动ondeviceready事件
  • 在ondeviceready事件中,重定向到我的应用程序的启动视图(通过window.location.hash)
  • 插件启动并触发我的应用程序中名为notificationreceived的javascript函数
  • 在notificationreceived函数中,重定向到基于推送通知的视图

正如你所看到的,冷应用程序启动场景会进入启动视图,这是不必要的,会导致用户等待加载第一个视图,然后再次重定向。

问题是,当deviceready启动时,我的javascript代码还没有意识到即将到来的推送通知,所以我正在寻找解决这一问题的方法。

有没有办法将额外的参数传递给deviceready cordova活动?或者有人有其他想法或解决方案来解决这个问题吗?

我想你可以解决办法:

var coldstart = true;
// Update flag if app coldstart
document.addEventListener("pause", function() {
  coldstart = false;
}, false);

我最终解决了这个问题。似乎在启动过程中,在以下方法中,launchOptions参数指示应用程序是否是从推送通知启动的。

- (BOOL)application:(UIApplication*)application didFinishLaunchingWithOptions:(NSDictionary*)launchOptions
{
...
}

在上面的方法中,我为我的应用程序设置了启动url,如果应用程序是从推送通知启动的,我会提供一个额外的url参数。因此,我现在有以下场景来解决我的问题:

  • 在ondeviceready事件中读取启动参数
  • 如果应用程序是从推送通知启动的,则不执行任何操作,等待插件重定向到正确的视图
  • 如果应用程序不是从推送通知启动的,则重定向到启动视图

希望它能帮助到别人。