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

2024-01-01

我在用着Phonegap http://phonegap.com/4.2(基于Cordova 5.0)创建跨平台应用程序。

该应用程序适用于 Android 和 iOS。

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

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

Using iFrames似乎不是一个选项,只是将网站包含在索引文件中,因为该网站只是显示为空白或其他一些问题 - 虽然我可能是错的,但那就是sort of偏离主题(可能会解决我即将介绍的整个问题)。

阅读了一些文章后(安东尼利斯 http://antonylees.blogspot.ca/2013/02/launch-website-as-mobile-app-using.html, 堆栈溢出 https://stackoverflow.com/questions/22247816/window-location-href-doesnt-work-in-phonegap-app#answer-22336348等)我归结为简单使用的解决方案window.location.replace(externalUrl);访问该网站。它工作完美。 (请注意,构建网站并将其包装到我的应用程序中不是一个选项,因为它太重了)。

到目前为止,一切都很好

我正在使用推送插件 https://github.com/phonegap-build/PushPlugin用于处理推送通知的 Cordova 插件。一切都已设置完毕并可以运行;我确实收到推送通知。

为了能够处理(i.e.处理)我已注册的推送通知onNotification事件监听器,适用于 Android 和 iOS。

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

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

My issue

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

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

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

所以我的问题是:

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

谢谢。

Edit

有人向我指出应用内浏览器 https://cordova.apache.org/docs/en/3.0.0/cordova_inappbrowser_inappbrowser.md.html插件可能会通过向浏览器提供回调函数或代码注入来提供我正在寻找的内容。今晚我会尝试一下,然后带着一份报告回来,同时,如果您碰巧对情况有更好的了解,我将不胜感激。:)


使用应用内浏览器 https://cordova.apache.org/docs/en/3.0.0/cordova_inappbrowser_inappbrowser.md.html's .open(url, '_blank', args)方法解决了我的问题。

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Phonegap - 一旦我使用 window.location.replace 离开索引范围,处理推送通知 的相关文章

  • 如何解决 Typescript 构建中的错误“找不到模块 'jquery'”

    我目前在 ts 文件的顶部有这个import require jquery 我这样做是因为我试图在我的打字稿文件中使用 jquery 但我似乎无法编译它 因为它返回标题中所述的错误 我正在使用 ASP NET CORE 脚本文件夹 tsco
  • 为什么我们在打字稿中使用 HTMLInputElement ?

    我们为什么使用 document getElementById ipv as HTMLInputElement value 代替 document getElementById ipv value 功能getElementById返回具有类
  • Jquery一键提交多个同名表单

    我有动态创建的循环表单 我需要一键提交所有表单 我正在遵循下面的代码 你能建议我怎么做吗 谢谢
  • Android Studio - Windows 7 上的 Android SDK 问题

    我对 Google i o 2013 上发布的最新开发工具 Android Studio 有疑问 我已经成功安装了该程序并且能够正常启动 我可以导入现有项目并对其进行编辑 但是 当我尝试单击 SDK 管理器图标或 AVD 管理器图标时 或者
  • 正则表达式 - 从 markdown 字符串中提取所有标题

    我在用灰质 https www npmjs com package gray matter 以便将文件系统中的 MD 文件解析为字符串 解析器产生的结果是这样的字符串 n Clean er ReactJS Code Conditional
  • 所有 RestKit 项目在归档时都无法构建

    这个问题涉及RESTKIT 0 9 x 如果您是 Restkit 新手 请考虑使用较新的版本0 10 x https github com RestKit RestKit tree v0 10 1 branch 我最近继承了一个项目 使用r
  • 我的设备突然没有显示在“Android 设备选择器”中

    我正在使用我的三星 Galaxy3 设备来测试过去两个月的应用程序 它运行良好 但从今天早上开始 当我将设备连接到系统时 它突然没有显示在 Android 设备选择器 窗口中 我检查过 USB 调试模式仅在我的设备中处于选中状态 谁能猜出问
  • Android向menuItem添加子菜单,addSubMenu()在哪里?

    我想根据我的参数以编程方式将 OptionsMenu 内的子菜单添加到 menuItem 中 我检查了android sdk中的 MenuItem 没有addSubMenu 方法 尽管你可以找到 hasSubMenu 和 getSubMen
  • 使用 Vue 的多模式组件

    我在 Vue 中实现动态模式组件时遇到问题 A common approach I follow to display a set of data fetched from the db is I dump each of the rows
  • Vue 和 Vuex:处理依赖的计算属性

    我的应用程序是一个使用 Vuex 在 Vue 中构建的精简电子表格 关键组件是TableCollection Table and Row The TableCollection有一个包含多个的数组Table对象 每个Table有一个包含多个
  • 增加活动的屏幕亮度

    显然 Android 操作系统中至少有三种不同的技术可以改变屏幕亮度 其中两个在纸杯蛋糕之后不再起作用 而第三个被接受的技术显然有一个错误 我想在单视图活动开始时增加屏幕亮度 然后在活动结束时将亮度恢复为用户设置 没有按钮 没有第二个视图或
  • 代码镜像错误:未捕获错误:扩展集中无法识别扩展值([对象对象])

    全部 我目前正在从事一个React Electron项目 该项目的目标是完成一个Markdown编辑器 当我配置codemirror 该程序报告错误说 Uncaught Error Unrecognized extension value
  • 在 Shopify 商店中嵌入 Vue 组件

    在产品页面中 我尝试显示自定义 Vue 组件 为简洁起见 该组件根据给定的产品 ID 显示 Firebase 数据库中的一些信息 我最初尝试将其制作为 Shopify 应用程序 以便我可以访问他们的 API 我实现了 OAuth 并且可以检
  • 致命错误:在 Swift 中解包可选值时意外发现 nil

    所以我试图获取 Swift 中输入字段的文本 这就是我得到的 class ViewController UIViewController IBOutlet var passwordField UITextField IBOutlet var
  • 带参数的事件监听器

    我想将参数传递给 JavaScript 中的事件侦听器 我已经找到了解决方案 但我无法理解它们为什么或如何工作以及为什么其他解决方案不起作用 我有 C C 背景 但是 Javascript 函数的执行有很大不同 您能否帮助我理解以下示例如何
  • Javascript Replace() 和 $1 问题

    我正在尝试创建一个脚本来搜索文本中的模式并在它找到的字符串周围包裹一个标签 shop attributes td each function this html function i html return html replace E 0
  • android sdk 的位置尚未在 Windows 操作系统的首选项中设置

    在 Eclipse 上 我转到 windows gt Android SDK 和 AVD Manager 然后弹出此消息 Android sdk 的位置尚未在首选项中设置 进入首选项 在侧边栏找到 Android 然后会出现一个 SDK 位
  • Firebase - 有没有办法查看有多少人安装了该应用程序?

    Parse 支持安装功能 我不确定 firebase 是否也支持 但在 Google 中挖掘了几个小时后 我无法找到有关如何在 Firebase 中查看 计算用户安装的重要信息 有没有办法计算 Firebase 中的用户安装量 或者甚至还有
  • Crashlytics 出现 Android Studio 构建错误

    我正在尝试将 CrashLytics 与 Android Studio 和 gradle 一起使用 但出现一个令人困惑的错误 java lang NoSuchMethodError 我的 build gradle 是 buildscript
  • 节拍匹配算法

    我最近开始尝试创建一个移动应用程序 iOS Android 它将自动击败比赛 http en wikipedia org wiki Beatmatching http en wikipedia org wiki Beatmatching 两

随机推荐