Переход по DeepLink из Web

23.09.2025
#javascript#mobile#pwa

Deeplink с fallback на App Store

Мобильные приложения используют кастомные URL-схемы (myapp://screen?tab=home), которые работают как deeplink'и. Проблема: в браузере нельзя проверить, установлено ли приложение.

Решение

Пытаемся открыть приложение и отслеживаем изменение видимости страницы:

const deepLink = `myapp://myscreen?tab=home`;
const appStoreLink = `https://onelink.to/myapp`;

const openAppStore = () => {
  window.location.href = appStoreLink;
};

const checkAppOpened = () => {
  const timeoutId = setTimeout(() => {
    // Если через 2.5с страница всё ещё видна - приложение не установлено
    if (document.visibilityState !== 'hidden') {
      openAppStore();
    }
  }, 2500);

  // Отслеживаем скрытие страницы (приложение открылось)
  document.addEventListener('visibilitychange', () => {
    if (document.hidden) {
      clearTimeout(timeoutId);
    }
  });
};

// Запускаем процесс
window.location.href = deepLink;
checkAppOpened();

Как это работает

  • Пытаемся открыть приложение через deeplink
  • Если приложение установлено - страница скрывается, таймер сбрасывается
  • Если через 2.5 секунды страница видна - редиректим в App Store/Google Play