Какъв е този неизвестен клиент с произход от Google, който задейства JavaScript грешки в нашия PWA?

Изпълняваме прогресивни уеб приложения с активирани насочени известия за Chrome и Samsung Internet и насърчаваме нашите потребители да го добавят към началния си екран. Ние стриктно регистрираме и наблюдаваме изключенията на браузъра, за да запазим висококачествена услуга.

От 22 май 2018 г. забелязахме внезапно нарастване на озадачаващи изключения на JavaScript, произтичащи от извиквания към стандартни уеб 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.

При по-внимателна проверка забелязахме, че всички подобни грешки се случват по време на изпълнение на скрипт от потребителски агенти, които не са наши действителни клиенти. По-скоро виждаме неизвестен клиент да прави заявка към нашето приложение веднага след като нашият потребител посети:

  1. Потребителят посещава нашия PWA, не се съобщава за грешка
  2. Потребителят използва „Добавяне към началния екран“ (повечето пъти), не се съобщава за грешка
  3. Неизвестен клиент посещава нашия PWA, съобщават се грешки.

Този неизвестен клиент изпълнява HTTP заявка, носеща характерни модели:

  • URL адресът е същият като посетения от потребителя
  • Първоначалният IP адрес е присвоен на Google, Inc. (диапазон 66.102.0.0/20 или 66.249.64.0/19)
  • Референтът е „https://www.google.com/
  • User Agent String somehow matches the one of the User: same version of Android, same device build, same browser, but a different browser version, always from this list:
    • Chrome/66.0.3359.126 (May 22 → May 30)
    • Chrome/66.0.3359.158 (11 юни → 25 юни)
    • SamsungBrowser/3.0 Chrome/38.0.2125.102 (25 юни → 27 юни)
    • SamsungBrowser/6.4 Chrome/56.0.2924.87 (22 май → 30 май, 25 юни)
    • SamsungBrowser/7.0 Chrome/59.0.3071.125 (22 май → 30 май, 25 юни)

Нещо повече, тези искания се появяват само периодично, по привидно контролиран начин, както е отразено от датите по-горе и графиката по-долу:

„Честота

Това, както и фактът, че откриваме използването на „Добавяне към началния екран“ в повечето случаи, ни кара да се чудим дали това може да е експеримент, свързан с WebAPK файлове. Това обаче е недокументирано и следователно е много озадачаващо.

Какъв е този неизвестен клиент с произход от Google?

Каква е неговата цел?

Как трябва разработчиците да ги открият и какви мерки трябва да се вземат?

Актуализация от август 2018 г.: Заявки като описаните по-горе изглежда са изчезнали напълно сега... Но може да са били някакъв вид прототип на някак си подобен вид заявки, които виждаме сега. Тези заявки от нов вид все още идват от сървърите на Google и изглежда са насочени изключително към уеб манифеста на нашия PWA, следователно вече не се задейства грешка в JavaScript. Всички те носят низ на потребителски агент на Chrome/59+, ясно постфиксиран (via Google-Chrome-WebAPK). Други браузъри, като Samsung Internet, все още не са забелязани.


person Eric Redon    schedule 13.06.2018    source източник


Отговори (1)


Това може да е Chrome без глава (вероятно тестове преди пускане, в случай че го имате в Play Store), който не разполага с разрешение push; напр. с Pupeteer можете само да заменяте разрешенията, но всъщност не приема подканата за разрешение... и обикновено няма прикачен работен плот, където човек може да изпраща известия.

Просто 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);
  });
person Martin Zeitler    schedule 07.06.2020
comment
Интересни любопитни факти за Puppeteer. Съгласен съм, че това вероятно е безглавен браузър и бих спекулирал, че работи от център за данни в Google, задействан от „Добавяне към началния екран“ на действителни PWA в дивата природа и е предназначен да извършва реални тестове за генериране на WebAPK преди стартиране. - person Eric Redon; 07.06.2020