添加到主屏幕选项不显示 PWA。

12

我创建了一个渐进式Web应用程序。 它很简单,只有一个index.html,一个包含favicon等内容的“images”文件夹,一个sw.js和一个styles.css。

我的manifest.json代码

{
"lang" : "en",
"name" : "Test",
"short_name" : "Test",
"icons" :   [
  {
  "src": "images/android-chrome-192x192.png",
  "sizes": "192x192",
  "type": "image/png"
},
{
  "src": "images/android-chrome-144x144.png",
  "sizes": "144x144",
  "type": "image/png"
}
],
"theme_color" : "#116b20",
"background_color" : "#1a1a1a",
"scope" : "1",
"start_url" : "/test",
"display" : "standalone",
"orientation" : "natural"
   }

和 sw.js

self.addEventListener('install', function(event) {
  console.log('[Service Worker] Installing Service Worker ...', event);
event.waitUntil(
caches.open('static').then(function(cache) {
 cache.addAll(['/test/', '/test/index.html', '/test/manifest.json']);
  })
  );
});
self.addEventListener('activate', function(event) {
 console.log('[Service Worker] Activating Service Worker ....', event);
});
self.addEventListener('fetch', function(event) {
  event.respondWith(
caches.match(event.request).then(function(response) {
  if (response) {
    return response;
  } else {
    return fetch(event.request).then(function(res) {
      return caches.open('dynamic').then(function(cache) {
        cache.put(event.request.url, res.clone());
        return res;
      });
    });
  }
})
  );
});

所以...目前,当我使用chrome从我的智能手机访问该网站时,一切都显示正确,标签颜色也很好,一切看起来都很好。但是我没有“添加到主屏幕”的横幅。

相反,当我在chrome的设置中,点击“添加到主屏幕”,并验证后,再进入添加的快捷方式时,该网站将作为应用程序启动,显示“启动画面”等等。

当我从电脑上访问该网站并观察“应用程序”和清单的调试器时,我有一个小链接“添加到主屏幕”。

你知道这可能是从哪里来的吗?

感谢帮助!

编辑:

我稍微进行了修改。我创建了一个子域名。现在我的URL如下:https://subdomain.example.com。所有内容都在子域名根目录下,在代码中,链接是相对的(例如:“img/name.png”)。

我的服务工作者没有任何错误,当我从电脑上使用Chrome浏览器访问时,我进入开发者工具-> 应用程序-> 清单选项卡,并点击“添加到主屏幕”时,横幅出现,可以将其添加到应用程序中,验证后正常工作。

当我在Chrome开发者工具-> 应用程序-> 服务工作者选项卡中看到的就是这个样子:

sw.js

但是在我的智能手机上,我仍然没有得到提供“添加到主屏幕”的横幅。如果有人有想法,请告诉我...

2个回答

7
您的网站应该使用证书的https协议,同时具有有效的清单和在Chrome应用程序选项卡中显示的有效服务工作者,所有这些都使您的网站符合基本的PWA要求,可以将其添加为可安装的网站(它会创建一个由Google即时签名的.apk文件)。
当https、证书或服务工作者存在问题(大多数情况下是这个原因),主屏幕上仍然会添加一个图标,并且将作为没有地址栏的应用程序打开。不同之处在于,它只是一种书签链接。它不是由Chrome中的WebApk生成的.apk文件。在这种情况下,Chrome不会显示安装横幅。
另一种情况可能是,它可能已经出现并消失了,而您没有注意到,或者它在您的干扰下重新加载了页面。用户首次拒绝后,Chrome不会再次显示。您可以尝试从不同的设备进行操作,如果仍然发生相同的事情,则是您的PWA组件未按照第一段中所述正确配置。 这里这里是谷歌关于安装横幅的一些官方标准。

1
好的,谢谢。我会在几个小时后观看这个,并在之后回来。 - Cohchi
2
好的,我认为这方面都没问题了...在Chrome调试器中,当我点击“添加到主屏幕”时,我遇到了一个错误:“无法安装网站:未检测到匹配的服务工作者。您可能需要重新加载页面,或者检查当前页面的服务工作者是否也控制清单中的起始URL”。但我不知道为什么会出现这个错误。你知道我为什么会出现这个错误吗?也许这个错误解释了为什么我在智能手机上没有“弹出窗口”? - Cohchi
是的。拥有有效的服务工作者是Chrome显示安装横幅的四个标准之一。我在第二段中提到的就是现在发生在您身上的情况。请附上Chrome开发工具->应用程序->服务工作者选项卡截图,以便更清楚地了解情况。 - Anand
1
Workbox是谷歌推出的新型JS库,可为您的项目生成Service Worker。这将通过向导帮助创建服务工作者。尝试重新生成新的服务工作者,看看是否有所帮助。https://developers.google.com/web/tools/workbox/modules/workbox-cli#wizard - Anand

1

是的,所有标准都没问题。 我的网站是使用https协议的,我在代码中隐藏了整个URL,但URL的格式类似于:[https://example.com/subfolder/index.html]。我错过了什么步骤吗?哪里提到了HTTPS? - Cohchi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接