Откройте приложение (iOS / Android) через JavaScript с резервным перенаправлением в магазин App / Play (версия 2016 г.)

Дано: веб-сайт, приложения для iOS и Android, зарегистрированная схема URL "myapp: //".

Цель: разместить на сайте ссылку на устройства iOS / Android с установленным приложением. При нажатии на эту ссылку должно открываться приложение и запускаться определенная логика (обрабатываемая приложением, по сути, как «универсальные ссылки» из Apple, но без дублирования ссылок на веб-сайты).

Из-за ограничений безопасности определение того, установлено ли приложение, проблематично без магии файлов cookie веб-просмотра. Учитывая это, как лучше всего попытаться открыть приложение через JavaScript и вызвать резервное перенаправление, если это не удастся?

Решение из этого потока: https://stackoverflow.com/questions/1108693/is-it-possible-to-register-a-httpdomain-based-url-scheme-for-iphone-apps-like/2391031#2391031 не работает с iOS10. Не уверен насчет Android.


person Max    schedule 13.12.2016    source источник


Ответы (2)


В 2016 году этого невозможно добиться только с помощью Javascript.

Вы по-прежнему можете использовать этот подход на Android, но Apple внесла изменения в iOS 9.2, которые означают, что это практически бесполезно на устройствах iOS.


Как это работало на iOS

Раньше это делалось так, чтобы попытаться открыть приложение в Javascript, установив для window.location нужный пользовательский путь URI.

window.location = “imdb://title/tt3569230”;

Приложение не установлено

Проблема в том, что когда приложение не установлено, отображается ошибка «Не удается открыть страницу». Уверен, вы все это видели. Это проклятие глубоких ссылок. Во времена iOS 7 и iOS 8 был славный период, когда это можно было обойти, но золотой век прошел.

Чтобы этого избежать, вам пришлось добавить на свою страницу некоторый Javascript, откуда вы перенаправляете его в App Store. Таким образом, пользователь не остался с ошибкой на экране.

window.location = 'imdb://title/tt3569230';
setTimeout(function() {
  window.location = 'itms-apps://itunes.apple.com/us/app/imdb-movies-tv/id342792525'
}, 250);

Приложение установлено

When the app was installed, it would display the modal below, prompting the user if they want to open the app:

Что происходит сейчас, так это то, что в iOS 9 Apple изменила модальное окно Открыть в "[app]" с блокирующего режима Javascript на неблокирующее модальный. Это означает, что когда вы пытаетесь открыть приложение с помощью перенаправления Javascript на пользовательскую схему URI, модальное окно больше не будет блокировать выполнение Javascript, в результате чего резервное перенаправление в App Store будет выполняться немедленно перед пользователем. можно нажать кнопку "Открыть".

В Branch.io (полное раскрытие: я в группе Branch) мы увидели, что это появится в бета-версиях iOS 9.2 и были надежды, что наши радары Apple (отчеты об ошибках) и влиятельные партнеры могут побудить Apple решить эту проблему до выпуска. К сожалению для разработчиков iOS, этого не произошло. В ответе Apple на наши опасения было совершенно ясно, что они хотят, чтобы все сделали: внедрили универсальные ссылки.


Решение на 2016 год

Единственный способ иметь единственную ссылку, которая работает повсюду (включая маршрутизацию в приложения, если они установлены, или резервные веб-URL, если они не установлены), должен включать использование универсальных ссылок в iOS. Конечно, универсальные ссылки на самом деле еще не везде поддерживаются в iOS, поэтому есть определенные крайние случаи, когда все еще требуются пользовательские схемы URI (Chrome и Gmail - два больших примера). Вам нужно будет их обнаружить и создать настраиваемую обработку.

У большинства компаний нет ресурсов, чтобы выделить на это одного штатного инженера (или двух), поэтому Pinterest, Tinder, Airbnb, Jet.com, Yummly и т. Д. Приняли платформы для связывания, такие как Branch.io или динамические ссылки Firebase.

person Alex Bauer    schedule 13.12.2016
comment
Я знаю, что занимаюсь археологом здесь, но что, если мне просто нужен откат на deeplink в фейсбуке? Я делаю небольшой веб-сайт, и Branch.io мне кажется излишним. Мне просто нужна глубокая ссылка в профиле Facebook и одна в профиле Instagram. Могу ли я реализовать запасной вариант? - person Groben; 28.12.2017
comment
@Groben Branch разработан для вашего собственного приложения. Это не сработает для ссылки на Facebook и Instagram, так что да ... вам нужно создать это перенаправление самостоятельно! - person Alex Bauer; 28.12.2017

То, как это работает на ios, не всегда открывая магазин при установке приложения, - это сделать что-то вроде этого:

function isIOS() {
    const iDevices = [
        'iPad Simulator',
        'iPhone Simulator',
        'iPod Simulator',
        'iPad',
        'iPhone',
        'iPod'
    ];

    if (navigator.platform) {
        while (iDevices.length) {
            if (navigator.platform === iDevices.pop()) {
                return true;
            }
        }
    }

    return false;
}

let openedApp = false;

function openAppOrStore() {
    setTimeout(function () {
        if (!openedApp) {
            window.location = "https://apps.apple.com/us/app/petleo/id1462882016";
        }
    }, 25);
    const parts = window.location.href.split('/');
    const consultationId = parts[parts.length - 2];
    const iosLink = "petleo://consultations/" + consultationId;
    try {
        window.location = iosLink;
        if (window.location.href.indexOf("petleo://") !== -1) {
            openedApp = true;
        }
    } catch (e) {   
    }
}

setTimeout(function () {
    if (window.location.href.indexOf('consultation') !== -1) {
        if (isIOS()) {
            openAppOrStore();
        }
    }
}, 25);
person Karim    schedule 31.05.2020
comment
Таким образом, в iOS 14 возникает проблема, описанная @AlexBauer: если приложение установлено, Safari STILL перенаправляет пользователя в магазин приложений всего через 25 мсек. - person zaitsman; 11.01.2021