Push notification 如何检测是否安装了chrome套装应用程序?

Push notification 如何检测是否安装了chrome套装应用程序?,push-notification,chrome-web-store,google-chrome-app,Push Notification,Chrome Web Store,Google Chrome App,我是一个chrome应用程序的所有者,该应用程序目前是上的托管应用程序。我想添加推送消息到它,所以它必须成为一个打包的应用程序 然而,我不想失去在网站上提示用户安装应用程序的能力,如果他们还没有安装 我想出了很多方法来测试这一点,但没有一种方法令人满意: chrome.app.isInstalled,我当前使用的方法不适用于打包的应用程序 插入DOM元素是推荐的做法,但仅适用于扩展内容\脚本 设置cookie可以工作,但打包应用程序不允许使用cookies权限 使用webview设置cooki

我是一个chrome应用程序的所有者,该应用程序目前是上的托管应用程序。我想添加推送消息到它,所以它必须成为一个打包的应用程序

然而,我不想失去在网站上提示用户安装应用程序的能力,如果他们还没有安装

我想出了很多方法来测试这一点,但没有一种方法令人满意:

  • chrome.app.isInstalled
    ,我当前使用的方法不适用于打包的应用程序
  • 插入DOM元素是推荐的做法,但仅适用于扩展<打包应用程序不允许使用代码>内容\脚本
  • 设置cookie可以工作,但打包应用程序不允许使用
    cookies
    权限
  • 使用webview设置cookie是可能的,但是webview是沙盒的,并且不与chrome共享cookie
  • 检测应用程序中的文件可能有效,但打包应用程序不允许使用
    web\u accessible\u resources
    权限
  • 指定
    url处理程序
    看起来可能有效,但看起来它们只适用于地址栏中的url(即,它们似乎不处理请求)
  • 设置“外部可连接”是可行的,但它需要一个权限对话框,说明应用程序希望“与合作网站通信”。即使我指定,许可也是如此模糊。我希望避免这种情况,因为当权限发生变化时,人们往往不会更新应用程序
如果我同时拥有我的打包应用程序和,有人知道如何确定是否安装了我的打包应用程序吗?

,或者这是一条路要走。可以理解的是,您排除了最后一个选项,因为存在额外权限警告(这将在用户批准新权限之前禁用应用程序)

url\u处理程序
确实提供了一种无需额外权限的解决方案:

  • 在服务器端,如果用户没有任何cookie,请重定向到服务器上的其他URL。例如,
    http://example.com/landing/
    ->
    http://example.com/landing/?noapp
  • 如果未安装应用程序,将遵循重定向。在该登录页上,使用
    history.replaceState(null,null,“/landing/”)
    将URL更改回原始URL
  • 如果安装了应用程序,将触发,并且不遵循重定向。在您的网站上,使用
    setTimeout
    检查页面是否已卸载

  • 如果前面的方法由于某种原因不适合您,那么还有一种(脆弱的)替代方法:在服务器上设置API端点并使用。因为您的应用程序没有访问此资源的权限,所以AJAX请求会自动获取一个不可伪造的请求头(
    Origin:chrome)-extension://.../...
    )。您可以检测此标头的存在,并将应用标记为针对特定IP地址安装。如果选择正确的频率,您将拥有最新的ip到应用程序映射。

    但这不适用于NAT后面的多台计算机。如果你一直在家里ping,我(作为一个用户)会担心我的隐私…

    我还没有机会验证这一点,但看起来这是正确的。当我尝试这个时,我会向你汇报。