我们运行的是为Chrome和三星互联网启用推送通知的渐进Web应用程序,并鼓励用户将其添加到主屏幕上。我们严格记录和监控浏览器异常,以保持高质量的服务。
自2018年5月22日以来,我们注意到突然出现了一些令人费解的JavaScript异常,这些异常源自对标准、功能检测到的Web的调用,这些API以前从未失败过。
例如,下面的代码将产生以下错误,尽管“push”显然是每个Permissions.query()规范的有效值
const permissionStatus = await navigator
.permissions
.query({ name: 'push', userVisibleOnly: true });TypeError: Failed to read the 'query' property from 'Permissions': The provided value 'push' is not a valid enum value of type PermissionName.
通过更仔细的检查,我们注意到所有这些错误都发生在用户代理执行脚本时,这些用户代理是而不是我们的实际客户。相反,在用户访问之后,我们看到一个未知的客户端查询我们的应用程序:
这个未知客户端执行带有特征模式的HTTP请求:
更重要的是,这些请求只是间歇性的,似乎是可控的,如上面的日期和下面的图表所反映的那样:

这一点,以及我们在大多数情况下检测到“添加到主屏幕”的使用情况,使我们怀疑这是否是一个与WebAPK有关的实验。然而,这是没有文件的,因此非常令人费解。
这个未知的谷歌客户端是什么?
它的目的是什么?
开发人员应该如何检测它们,应该采取哪些措施?
2018年8月更新:上面描述的请求现在似乎已经完全消失了,…但它们可能是我们现在看到的某种类似请求的原型。这些新类型的请求仍然来自Google,并且似乎只针对我们PWA的Web,因此不再触发JavaScript错误。它们都带有一个Chrome/59+用户代理字符串,显然是邮政固定的(via Google-Chrome-WebAPK)。其他浏览器,如三星互联网,还没有被发现。
发布于 2020-06-07 15:18:13
这可能是一个无头Chrome (可能是预发布测试,如果你有它在Play商店),它没有push的权限;例如。一个人只能接受重写权限,但不能真正接受许可提示.而且通常没有附加桌面,可以将通知推送到桌面。
只需要try和catch来分类不支持push权限的客户端。
navigator.permissions
.query({name: 'push', userVisibleOnly: true})
.then(function(permissionStatus) {
console.log('push permission state is ', permissionStatus.state);
})
.catch((error) => {
console.warn(error);
});https://stackoverflow.com/questions/50837015
复制相似问题