Phonegap - 使用 window.location.replace 离开索引范围后处理推送通知

Posted

技术标签:

【中文标题】Phonegap - 使用 window.location.replace 离开索引范围后处理推送通知【英文标题】:Phonegap - handling push notification once I've left the index scope with window.location.replace 【发布时间】:2015-11-14 03:28:31 【问题描述】:

我正在使用Phonegap 4.2(基于Cordova 5.0)来创建一个跨平台的应用程序。

该应用程序适用于 androidios

当用户加载应用时,他位于index.html。从那里我可以访问各种 javascript 方法,原始的,基于 Cordova 的,而且我碰巧正在使用 jQuery v1.11.1。

当应用收到推送通知时,应用必须能够访问负载中的 location 属性,并从那里访问特别提到的目的地(例如“https://***.com/questions/ask”)。我正在这样做。然后用户要么被重定向到该特定位置,即网站(不打开浏览器,。离开应用程序),将网站包含在其中索引文件并替换它的内容。

使用iFrames 似乎不是一种选择,只是将网站包含在索引文件中,因为网站只是显示为空白或其他一些问题——虽然我可能错了,但那是 有点偏离主题(可能会解决我将要介绍的整个问题)。

在阅读了一些文章(antonylees、*** 等)后,我得出了简单地使用window.location.replace(externalUrl); 访问该站点的解决方案。它完美地工作。 (请注意,构建网站并将其包装到我的应用中不是一种选择,因为它太重了)。

到目前为止,一切顺利

我正在使用PushPlugin Cordova 插件来处理推送通知。一切都已设置并正常工作;我确实收到推送通知。

为了能够处理(处理)推送通知,我为 Android 和 iOS 注册了 onNotification 事件监听器。

在处理到达的推送通知时,我必须考虑三种情况:

    推送到达 → 用户按下通知 → 应用程序从冷启动启动(应用程序未运行) → 使用索引文件中可用的 `onNotification` 方法处理有效负载,并将用户重定向到指定的位置推送通知的负载 推送到达 → 用户按下通知 → 应用程序在后台启动(即运行),但用户尚未离开索引文件 → 使用索引文件中可用的 `onNotification` 方法处理有效负载,并且用户被重定向到推送通知有效负载中指定的位置 推送到达 → 用户按下通知 → 应用程序在后台启动(即运行),但用户已经离开索引文件,因为过去已经重定向到网站,并且不再访问` onNotification` 方法,因为它在新网站中不存在 → 用户准确地停留在他原来的位置并且没有被重定向到新位置

我的问题

场景 1. 和 2. 工作正常,因为我可以访问附加的通知侦听器,它们可以处理有效负载并实现我与有效负载一起发送的位置属性,以确定将用户重定向到的位置。

然而,在场景 3 中,用户已被重定向到索引文件(以及外部网站)和技术上的索引范围之外,因此从现在开始,我不再可以访问在index 文件,包括 onNotification 方法。

因此,当用户收到推送通知时,我无法将用户重定向到新位置。

所以我的问题是:

离开索引文件后,如何处理新到达的推送通知负载?是否有更好的选择来简单地将网站包含在索引中,从而使之前定义的方法可以在我需要时使用?

谢谢。

编辑

有人向我指出,InAppBrowser 插件可能会通过向浏览器提供回调函数或代码注入来提供我正在寻找的东西。我今晚会试试,然后回来报告,与此同时,如果你碰巧对情况有更好的线索,我会很感激 SO 的回答:)

【问题讨论】:

当您导航到 Cordova Web 视图内的外部站点时,您将失去所有 Cordova 优势。如果您上传所有平台/“平台”/www 文件(Cordova.js 和其他插件 js 文件)可能会使其工作,如果您只针对一个平台可能会很容易,但您说您想要 iOS 和Android,所以你应该找到一种基于用户代理的平台加载文件的方法 但是正如您评论您的编辑,是的,当您想要加载外部站点时,inAppBrowser 是您的最佳选择 【参考方案1】:

使用InAppBrowser 的.open(url, '_blank', args) 方法解决了我的问题。

新加载的页面能够访问之前定义的方法,如果我对此感兴趣,我还可以注入一些代码并向新分配的页面添加一些基于事件的侦听器,但这不是完全需要。

【讨论】:

以上是关于Phonegap - 使用 window.location.replace 离开索引范围后处理推送通知的主要内容,如果未能解决你的问题,请参考以下文章

JS获取页面URL信息

如何使用 vueJS 在内部数组中显示 JSON 数据?

用jquery延迟自动url重定向?

Phonegap 使用 phonegap 3 和媒体插件构建

我可以使用 Phonegap Build 在 Phonegap 中播放视频吗

其他平台上的PhoneGap API 元素,使用PhoneGap Build