从 Chrome 应用程序过渡

警告

重要提示:Chrome 将在所有平台上取消对 Chrome 应用程序的支持。 Chrome 浏览器和 Chrome 网上应用店将继续支持扩展程序。阅读公告并了解有关迁移应用程序的更多信息。

要从 Chrome 打包或托管的应用程序过渡,可以使用以下选项。

# Chrome 打包应用(Chrome packaged apps)

打包应用程序的推荐迁移选项按从最简单到最复杂的顺序列出。

# 构建渐进式 Web 应用程序

构建渐进式 Web 应用程序 (PWA) 是跨所有操作系统覆盖用户的理想方式。

作为我们的 Web Capabilities(代号:Fugu)工作的一部分,我们正在研究为依赖独家 Chrome 应用程序 API(特别是套接字、HID、文件系统和串行 API)的开发人员改进 Web 迁移路径的方法。如果您需要的网络平台功能仅在部分浏览器中可用,当您的应用在不支持特定 API 的浏览器中运行时,您可以使用功能检测来优雅地降级或包含解释性文本。如果您的应用程序的网络平台存在空白,请告诉我们

PWA 可安装在桌面移动平台上。选择安装 PWA 的用户可以通过图标和快捷方式启动它,类似于今天安装 Chrome 应用程序的方式。

# 构建扩展增强型网页

如果您的 Chrome 应用程序具有常规网络平台无法提供的功能,则可以将其作为扩展 API 使用。在这种情况下,您将渐进式 Web 应用程序与您的 Web 应用程序可以向其发送消息的外部可连接扩展一起使用。构建 Web 应用程序通常比这更可取,因为这种方法会强制用户安装仅在您的站点上有用的扩展程序,并且可能会增加摩擦。

由于 Chrome 扩展程序无法在其他浏览器上运行,您应该检测所需功能何时不可用,并为这些其他浏览器上的用户提供解释性文本。

# 构建扩展

根据您想要提供的用户体验,将整个应用程序转换为扩展程序可能是有意义的。例如,您可以提供一个浏览器操作(browerAction)按钮,为您的用户界面显示一个小的弹出窗口,或者导航到您的扩展程序提供的页面。对于某些应用程序,这可能是一个足够好的用户体验,可以成为一个可行的解决方案。

请注意,这种方法的成本很高。虽然某些浏览器支持与 Chrome 相同的扩展 API,但这种支持并不普遍。对于更喜欢跨浏览器替代方案的用户来说,这可能会产生重大摩擦。

# 通过 Android 为 Chrome OS 构建

如果您是对为 Chrome OS 构建感兴趣的 Android 开发人员,您可以优化您的 Android 应用程序以获得更好的体验。

Chrome 应用 API/功能迁移建议(截至 2019 年 11 月):

Chrome 应用特性/功能 Web 平台迁移建议 Android 迁移建议 扩展迁移建议
chrome.accessibilityFeatures chrome.accessibilityFeatures
chrome.alarms Notification Triggers WorkManager chrome.alarms
chrome.app.runtime Launch Event Activity Lifecycle
chrome.app.runtime.onRestarted Page Life Cycle Activity.onResume
chrome.app.window Window Placement / Screen Enumeration chrome.windows
chrome.audio Audio Device Client Some Audio APIs
chrome.bluetooth Web Bluetooth API Bluetooth API
chrome.bluetoothLowEnergy Web Bluetooth API BTLE
chrome.bluetoothSocket Web Bluetooth API Bluetooth Socket
chrome.browser window.open Intent system
chrome.commands UI Events Hard-code keyboard commands chrome.commands
chrome.contextMenus (HTML/script) Native, Android has its own contextmenus
chrome.documentScan chrome.documentScan
chrome.events Alarms chrome.events
chrome.extensionTypes N/A chrome.extensionTypes
chrome.fileSystem Native FileSystem API
chrome.fileSystemProvider FileSystemProvider chrome.fileSystemProvider
chrome.gcm Web Push Notifications N/A chrome.gcm
chrome.hid Web HID API
chrome.i18n (HTML/script) Localization chrome.i18n
chrome.identity OAuth API or Credential Management API Native chrome.identity
chrome.idle User Idle Detection API chrome.idle
chrome.instanceID Web push Per-App ID needs to be self-generated chrome.instanceID
chrome.mdns NDS discovery
chrome.mediaGalleries Native FileSystem API
chrome.networking.onc
chrome.notifications Notifications API Notifications show in lower right of CrOS as system level notifications chrome.notifications
chrome.permissions Web Permissions API N/A chrome.permissions
chrome.power WakeLock API In discussion chrome.power
chrome.printerProvider Transition to Extension android.printservice chrome.printerProvider
chrome.runtime Service Workers + Page Lifecycle API chrome.runtime
chrome.runtime.connect Channel Messaging API chrome.runtime.connect
chrome.runtime.sendMessage chrome.runtime.sendMessage
chrome.serial Web Serial API
chrome.sockets.tcp QuicTransport C/S (or WebSockets) android.net.ConnectivityManager and Java standard socket API
chrome.sockets.tcpServer android.net.ConnectivityManager and Java standard socket API
chrome.sockets.udp QuicTransport C/S DatagramSocket API for UDP
chrome.storage Cache API IndexedDB chrome.storage
chrome.storage.managed Managed Configurations chrome.storage.managed
chrome.syncFileSystem Java - Drive REST API
chrome.system.cpu navigator.hardwareConcurrency chrome.system.cpu
chrome.system.display window.screen DisplayMetrics, but high density displays are wonky
chrome.system.memory navigator.deviceMemory chrome.system.memory
chrome.system.network Network Information API
chrome.system.storage navigator.storage chrome.system.storage
chrome.tts Web Speech API (Synthesis) Android TTS 2009 chrome.tts
chrome.types chrome.types
chrome.usb Web USB API Temporary* private USB host API
chrome.virtualKeyboard Soft Input Method
chrome.vpnProvider VpnService chrome.vpnProvider
chrome.wallpaper WallpaperManager chrome.wallpaper
externally_connectable
kiosk_enabled
minimum_chrome_version Target Android version minimum_chrome_version
offline_enabled Offline via Service Workers Native
NaCl Migration Guide
tag Native WebView

# FAQs

# 问:如果 Chrome 应用迁移建议不符合我的用例要求怎么办?

我们希望得到您的反馈!请尽可能详细地填写此表格

# 问:我的 Chrome 应用程序有很多用户。将它们迁移到我的新网络应用程序并弃用我的 Chrome 应用程序的最佳方法是什么?

在移除运行时之前,您仍然可以向 Chrome 应用程序发布更新。我们建议更新您的应用程序以包含一条消息,表明您的应用程序已停止使用,并且用户应该继续访问您的网站(请参见下面的示例)。您还可以包含一个调用 uninstallSelf() 方法的“卸载”按钮。

从 Chrome 75 开始,可以在 Chrome 应用程序内部使用 installReplacementWebApp() 方法,响应按钮单击或其他用户手势,自动触发替换 PWA 的安装流程。

20

# 问:我希望继续拥有 UI 可供性,使用户能够从任务栏/程序坞/主屏幕(taskbar/dock/homescreen)启动我的应用程序。我该怎么办?

Progressive Web Apps 可安装在桌面移动平台上。选择安装 PWA 的用户可以通过图标和快捷方式启动它,类似于今天安装 Chrome 应用程序的方式。

# 问:我希望我的应用程序在自己的窗口中运行,而不是在选项卡中运行。这是我可以用网络应用程序做的事情吗?

您可以在 Progressive Web Apps清单文件中提供元数据,表明在安装后启动时,它将在自己的窗口中打开。

# 问:我的应用程序支持键盘快捷键。网络也可以支持吗?

Web 应用程序可以通过侦听各种按键事件(例如 keydown)来支持键盘快捷键,但您可以支持的快捷键是有限的。例如,您不能拦截 Ctrl+N、Ctrl+T 等,因为这些是浏览器使用的。或者,这些可能是由操作系统处理的快捷方式(例如 Windows 上的 Alt+Tab)。

当您的 Web 应用程序在全屏模式下使用时,您可以拦截这些系统快捷方式。

扩展命令 API 支持更丰富的键盘快捷键,可在整个浏览器中运行,如果可以转换到扩展,则可以启用新功能。

# 问:我的应用需要在用户离线时运行。我可以用网络应用程序做到这一点吗?

是的,您可以使用 Service Worker 使您的站点离线运行Workbox 项目可以简化为 Service Worker 开发功能齐全的缓存策略。

# 问:我的应用程序使用 chrome.gcm API 从云端接收推送消息。开放的网络能做到吗?

是的,假设用户已授予权限,Push API 和 Notifications API 可以允许您的 Web 应用程序显示您的用户推送通知。

# 问:我的应用程序需要能够向用户显示通知,即使它没有打开任何窗口。我可以用开放的网络做到这一点吗?

是的,只要浏览器实例正在运行,Push API 和 Notifications API 就可以让您的 Web 应用程序显示您的用户推送通知,即使您的 Web 应用程序关闭时也是如此。

# 问:我的应用程序使用 chrome.bluetooth/chrome.usb 与蓝牙/USB 设备通话。这可以在开放网络上完成吗?

Web 蓝牙Web USB 在某些浏览器中可用,并且可以在渐进式 Web 应用程序中使用(与功能检测一起)。

# 问:我的应用程序使用 chrome.fileSystem API 来读取和写入用户指定的文件和/或目录。这可以在开放网络上完成吗?

开放式 Web 可以读取用户打开的单个文件,但不能保留对这些文件的访问、写入这些文件或对目录具有任何访问权限。

有计划实现直接文件系统访问,并且 Chrome 中提供了一个实验性实现,但该功能尚未完全标准化。

# 问:我的应用程序使用 chrome sockets API 进行网络连接。这可以通过开放网络完成吗?

您也许可以使用 WebSockets 执行所需的操作。但是,要使用它,您可能需要更改连接的远程端。

如果这是不可能的,我们希望了解更多有关您的用例的信息 - 请让我们知道您通过 Chromium 问题跟踪器尝试完成的工作。

# 问:有哪些资源可用于帮助进行渐进式 Web 应用程序迁移?

Chrome 团队维护以下站点和工具,其中包含可在迁移过程中提供帮助的信息:

如果您有未通过这些资源解决的特定问题,我们建议您在 Stack Overflow 上提问。此模板可用于创建标记有 google-chrome-appProgressive-web-apps 的问题,以确保最大程度的可见性。

# 问:我想使用尚未提及但缺乏网络替代方案的功能。如何提出功能请求?

我们希望更多地了解您想要完成的工作——通过 Chromium 问题跟踪器告诉我们。

# Chrome 托管的应用程序

# FAQs

# 问:我的托管应用程序使用通知权限。我如何在网络上做到这一点?

是的,假设用户已授予权限,Push API 和 Notifications API 可以允许您的 Web 应用程序显示您的用户推送通知。

# 问:我的托管应用程序使用了无限存储权限。我如何在网络上做到这一点?

无限存储权限确保您存储的数据是“持久的”,这意味着它只能由用户手动清除。推荐的替代方法是在您的 Web 应用程序中请求持久存储权限。

# 问:我的托管应用程序使用地理定位权限。我如何在网络上做到这一点?

Geolocation API 可用于 Web 应用程序以定位用户的位置。

# 问:我的托管应用程序使用后台权限。我如何在网络上做到这一点?

为了确保最小的功耗,我们一直小心翼翼地引入了一种通用方法,让站点在用户设备的后台运行。部署了 Service Worker 的站点可以确保用户在离线时采取的操作使用后台同步 API 同步到服务器。此 API 允许站点在设备重新连接到 Internet 时在后台运行一些有限的代码,即使该选项卡已关闭。请注意,此 API 不允许定期唤醒服务工作者(service worker)。

Chrome 中正在实施一项单独的功能,即定期后台同步,作为一项实验性功能。它允许开发人员通过在 Service Worker 上公开的特殊事件请求定期更新,并控制这些更新的频率。

# 问:我的托管应用程序使用 clipboardRead 和/或 clipboardWrite 权限。我如何在网络上做到这一点?

Web 应用程序可以使用标准平台 API 以编程方式复制和粘贴文本图像

By.一粒技术服务

results matching ""

    No results matching ""