Възможно ли е да се внедрят дълбоки връзки от уебсайт към родно приложение?

Имам три бутона на моя уебсайт, които се свързват към страници във Facebook, Twitter и vk.com. Искам да отворя собствено приложение, ако е инсталирано на потребителско устройство. В противен случай искам резервният URL адрес да бъде отворен.

Първо, опитах се да използвам собствени схеми на приложения директно с deep-link.js плъгин. Но когато се опитах да отворя собствена URL схема на приложение, когато собственото приложение не беше инсталирано, Safari показа грешка, но най-накрая отвори резервната страница на URL. Браузърът за Android по подразбиране каза, че не знае как да се справи с такава URL схема:

<a class="btn btn-primary" href="https://www.facebook.com/warpcompany" data-app-ios="fb://profile/838619192839881" data-app-android="fb://page/838619192839881">Facebook</a>

След това се опитах да използвам "стандартните" връзки към приложението, които имат толкова много промоции от Facebook. Дори се опитах да използвам връзките към техните хоствани приложения, за да се уверя, че съм генерирал всичко по правилния начин. Не работи, винаги пренасочва към резервен уебсайт. Можете лесно да го тествате сами от https://fb.me/746134728830806

Възможно ли е да се предостави дълбока връзка на уебсайта, която ще отвори собственото приложение без грешки поне в браузърите по подразбиране на операционната система или ще се върне безшумно към URL?


person avasin    schedule 19.05.2015    source източник


Отговори (3)


Все още е възможно, но в по-новите версии на браузъра по подразбиране на Android трябва да използвате намерения, вместо просто да се опитвате да отворите дълбоката връзка. Например заменете своя fb://page/838619192839881 с

intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;end

Това ще се върне към Google play по подразбиране, но можете да замените резервния вариант, като добавите S.browser_fallback_url:

intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;S.browser_fallback_url=http%3A%2F%2Fwww.facebook.com%2F;end

Резервният вариант трябва да бъде URL кодиран.

Разбира се, ще имате проблеми, ако потребителят не е на телефон с Android или със стара версия на браузъра по подразбиране (или странен браузър). Можете да зададете куп условия и да замените своя HTML с правилния код за всеки случай.

Работя върху HOKO, което е безплатен, лесен и лесен начин всичко да работи на Android и iPhone и ние го направихме цялата мръсна работа около това. Можете да го използвате или просто да ни пишете и ние ще ви помогнем.

person Ricardo Otero    schedule 13.07.2015

Приетият отговор ще работи само на Chrome v28 и браузъри по подразбиране за Android 5.0. Ако искате това да работи на друг браузър като Facebook/Twitter webviews, Firefox, UC и по-стари браузъри по подразбиране от 5.0, ще трябва да използвате код, който е малко по-сложен.

Добавете тази функция към вашия JS фрагмент:

    var openSesame = function() {
        var method = 'iframe';
        var fallbackFunction = function() {
            if (method == 'iframe') {
                window.location = "market://details?id=com.facebook.katana";
            }
        };
        var addIFrame = function() {
            var iframe = document.createElement("iframe");
            iframe.style.border = "none";
            iframe.style.width = "1px";
            iframe.style.height = "1px";
            iframe.src = "fb://page/838619192839881";
            document.body.appendChild(iframe);
        };
        var loadChromeIntent = function() {
            method = 'intent';
            document.location = "intent://page/838619192839881#Intent;scheme=fb;package=com.facebook.katana;end";
        };
        if (navigator.userAgent.match(/Chrome/) && !navigator.userAgent.match("Version/")) {
            loadChromeIntent();
        }
        else if (navigator.userAgent.match(/Firefox/)) {
            window.location = "fb://page/838619192839881";
        }
        else {
            addIFrame();
        }
        setTimeout(fallbackFunction, 750);
    };

Тогава вашият бутон ще изглежда така:

<a href="/bg" onclick="openSesame();">Open the App</a>

Или можете да използвате услуга като branch.io, която прави точно това, което търсите автоматично.

person Alex Austin    schedule 15.07.2015
comment
Не работеше, докато не сложих return false след openSesame(); в onclick. Друг начин е да върнете false от функцията openSesame и да поставите return openSesame() в onclick. Сега работи, благодаря! - person jox; 14.06.2017

Да, така е! Разгледайте това обучение: https://developer.android.com/training/app-indexing/deep-linking.html

Това ли е информацията, от която се нуждаете? лмк

person Mann    schedule 19.05.2015
comment
Благодаря за отговора. Този документ показва как да конфигурирате манифеста на приложението. Търся начина как да извикам дълбоки връзки от обикновена уеб страница. Проблемът е, че не можете просто да използвате native://url, защото в браузърите на мобилни операционни системи по подразбиране това води до грешки. - person avasin; 20.05.2015
comment
О, добре, съжалявам... Мислех, че е тема за Android - person Mann; 20.05.2015