Czy można zarejestrować schemat URL oparty na http + dla aplikacji na iPhone ' a, takich jak YouTube i mapy?
Chciałbym mieć iOS do otwierania adresów URL z mojej domeny (np. http://martijnthe.nl) z moją aplikacją za każdym razem, gdy aplikacja jest zainstalowana w telefonie, i z mobilnym Safari W przypadku, gdy nie jest.
Przeczytałem, że możliwe jest utworzenie unikalnego przyrostka protokołu do tego i zarejestrowanie go w Info.plist, ale Mobile Safari da błąd w przypadku, gdy aplikacja nie jest zainstalowana.
Jakie byłoby obejście?
Jeden pomysł:
1) Użyj adresów URL http://, które otwierają się na dowolnym pulpicie przeglądarka i renderować usługę za pośrednictwem przeglądarki
[[0]} 2) Sprawdź User-Agent i jeśli jest to mobilne Safari, Otwórz adres URL myprotocol://, aby (spróbować) otworzyć aplikację na iPhone ' a i otworzyć mobilny iTunes, aby pobrać aplikację na wypadek niepowodzeniaNie wiem, czy to zadziała... sugestie? Dzięki!
12 answers
Myślę, że najmniej natrętny sposób na zrobienie tego jest następujący:
- sprawdź, czy user-agent jest agentem iPhone / iPod Touch
- Sprawdź plik cookie
appInstalled
Jeśli plik cookie istnieje i jest ustawiony na true, Ustaw - Jeśli plik cookie nie istnieje, otwórz "Czy wiesz, że Twoja nazwa witryny ma aplikację na iPhone' a?"modal Z "tak, już mam", "nie, ale chciałbym spróbować" i " Zostaw mnie w spokoju" guzik.
- Przycisk "Yep" ustawia plik cookie na true i przekierowuje do
your-uri://
- Przycisk " Nie " przekierowuje na " http://itunes.com/apps/yourappname", który otworzy App Store na urządzeniu
- Przycisk "Leave me alone" ustawia ciasteczko na false i zamyka modal
- Przycisk "Yep" ustawia plik cookie na true i przekierowuje do
window.location
na your-uri://
(lub wykonaj przekierowanie po stronie serwera)
Inną opcją, którą grałem, ale znalazłem trochę niezgrabny, było wykonanie następujących czynności w Javascript:
setTimeout(function() {
window.location = "http://itunes.com/apps/yourappname";
}, 25);
// If "custom-uri://" is registered the app will launch immediately and your
// timer won't fire. If it's not set, you'll get an ugly "Cannot Open Page"
// dialogue prior to the App Store application launching
window.location = "custom-uri://";
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 12:18:40
Jest całkiem możliwe, aby to zrobić w JavaScript, tak długo, jak Twój awaryjny jest inny applink. Budowanie na sugestii Nathana :
<html>
<head>
<meta name="viewport" content="width=device-width" />
</head>
<body>
<h2><a id="applink1" href="fb://profile/116201417">open facebook with fallback to appstore</a></h2>
<h2><a id="applink2" href="unknown://nowhere">open unknown with fallback to appstore</a></h2>
<p><i>Only works on iPhone!</i></p>
<script type="text/javascript">
// To avoid the "protocol not supported" alert, fail must open another app.
var appstorefail = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6";
function applink(fail){
return function(){
var clickedAt = +new Date;
// During tests on 3g/3gs this timeout fires immediately if less than 500ms.
setTimeout(function(){
// To avoid failing on return to MobileSafari, ensure freshness!
if (+new Date - clickedAt < 2000){
window.location = fail;
}
}, 500);
};
}
document.getElementById("applink1").onclick = applink(appstorefail);
document.getElementById("applink2").onclick = applink(appstorefail);
</script>
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 10:31:24
W przypadku urządzeń z systemem iOS 6 istnieje opcja: promowanie aplikacji za pomocą banerów Smart App
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-15 09:49:20
Stwierdziłem, że wybrana odpowiedź działa dla aplikacji przeglądarki, ale miałem problemy z kodem działającym w aplikacjach innych niż przeglądarki, które implementują UIWebView
.
Problem dla mnie był użytkownik w aplikacji Twitter kliknąć link, który przeniesie je do mojej strony przez UIWebView
w aplikacji Twitter. Następnie, gdy kliknęli przycisk z mojej strony, Twitter stara się być fantazyjny i wypełnić window.location
, jeśli strona jest osiągalna. Więc to, co się dzieje, to UIAlertView
wyskakuje z informacją, czy na pewno chcesz Kontynuuj, a następnie natychmiast przekierowuje do App Store bez drugiego wyskakującego okienka.
Moje rozwiązanie obejmuje iframes. Pozwala to uniknąć prezentacji UIAlertView
, co pozwala na proste i eleganckie wrażenia użytkownika.
JQuery
var redirect = function (location) {
$('body').append($('<iframe></iframe>').attr('src', location).css({
width: 1,
height: 1,
position: 'absolute',
top: 0,
left: 0
}));
};
setTimeout(function () {
redirect('http://itunes.apple.com/app/id');
}, 25);
redirect('custom-uri://');
Javascript
var redirect = function (location) {
var iframe = document.createElement('iframe');
iframe.setAttribute('src', location);
iframe.setAttribute('width', '1px');
iframe.setAttribute('height', '1px');
iframe.setAttribute('position', 'absolute');
iframe.setAttribute('top', '0');
iframe.setAttribute('left', '0');
document.documentElement.appendChild(iframe);
iframe.parentNode.removeChild(iframe);
iframe = null;
};
setTimeout(function () {
redirect('http://itunes.apple.com/app/id');
}, 25);
redirect('custom-uri://');
EDIT:
Dodaj pozycję absolutną do ramki iframe, aby po wstawieniu nie było przypadkowego bitu białej spacji na dole strony.
Należy również pamiętać, że nie znalazłem potrzeby takiego podejścia z Androidem. Używanie window.location.href
powinno działać dobrze.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-08-23 19:00:49
W iOS9 Apple wprowadziło wreszcie możliwość zarejestrowania aplikacji w celu obsługi określonych adresów URL http://
: Universal Links.
Bardzo szorstkie wyjaśnienie, jak to działa:
- deklarujesz zainteresowanie otwieraniem adresów URL
http://
dla określonych domen (adresów internetowych) w Twojej aplikacji. - na serwerze określonych domen musisz wskazać, które adresy URL otworzyć w której aplikacji, która zadeklarowała zainteresowanie otwieraniem adresów URL z domeny serwera.
- Ładowanie adresu URL iOS usługa sprawdza wszystkie próby otwarcia adresów URL
http://
dla konfiguracji, jak wyjaśniono powyżej i automatycznie otwiera odpowiednią aplikację po zainstalowaniu; bez przechodzenia najpierw przez Safari...
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-11-04 10:39:27
Znowu budujemy na odpowiedzi Nathana i JB:
Jak uruchomić aplikację z adresu url bez dodatkowego kliknięcia Jeśli wolisz rozwiązanie, które nie obejmuje tymczasowego kroku kliknięcia łącza, możesz użyć następujących opcji. Dzięki temu javascript, byłem w stanie zwrócić obiekt Httpresponse z Django/Python, który pomyślnie uruchamia aplikację, jeśli jest zainstalowana lub alternatywnie uruchamia app store w przypadku przerwy czasowej. Uwaga musiałem również dostosować czas oczekiwania z 500 do 100 w zamów, aby to działało na iPhone 4S. Przetestuj i dostosuj, aby dopasować go do swojej sytuacji.
<html>
<head>
<meta name="viewport" content="width=device-width" />
</head>
<body>
<script type="text/javascript">
// To avoid the "protocol not supported" alert, fail must open another app.
var appstorefail = "itms://itunes.apple.com/us/app/facebook/id284882215?mt=8&uo=6";
var loadedAt = +new Date;
setTimeout(
function(){
if (+new Date - loadedAt < 2000){
window.location = appstorefail;
}
}
,100);
function LaunchApp(){
window.open("unknown://nowhere","_self");
};
LaunchApp()
</script>
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-09-29 17:26:36
window.location = appurl;// fb://method/call..
!window.document.webkitHidden && setTimeout(function () {
setTimeout(function () {
window.location = weburl; // http://itunes.apple.com/..
}, 100);
}, 600);
document.webkitHidden
jest wykrycie, czy Twoja aplikacja jest już wywołana, a bieżąca karta safari przechodzi do tła, ten kod jest z www.baidu.com
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-11-29 15:26:53
Jeśli dodasz iframe
na swojej stronie internetowej z src
ustawionym na niestandardowy schemat dla Twojej aplikacji, iOS automatycznie przekieruje do tej lokalizacji w aplikacji. Jeśli aplikacja nie zostanie zainstalowana, nic się nie stanie. Umożliwia to Głębokie łącze do aplikacji, jeśli jest zainstalowana, lub przekierowanie do sklepu z aplikacjami, Jeśli nie jest zainstalowana.
Na przykład, jeśli masz zainstalowaną aplikację twitter i przejdź do strony internetowej zawierającej następujące znaczniki, zostaniesz natychmiast przekierowany do app.
<!DOCTYPE html>
<html>
<head>
<title>iOS Automatic Deep Linking</title>
</head>
<body>
<iframe src="twitter://" width="0" height="0"></iframe>
<p>Website content.</p>
</body>
</html>
[4]} Oto bardziej dokładny przykład, który przekierowuje do App store, jeśli aplikacja nie jest zainstalowana:
<!DOCTYPE html>
<html>
<head>
<title>iOS Automatic Deep Linking</title>
<script src='//code.jquery.com/jquery-1.11.2.min.js'></script>
<script src='//mobileesp.googlecode.com/svn/JavaScript/mdetect.js'></script>
<script>
(function ($, MobileEsp) {
// On document ready, redirect to the App on the App store.
$(function () {
if (typeof MobileEsp.DetectIos !== 'undefined' && MobileEsp.DetectIos()) {
// Add an iframe to twitter://, and then an iframe for the app store
// link. If the first fails to redirect to the Twitter app, the
// second will redirect to the app on the App Store. We use jQuery
// to add this after the document is fully loaded, so if the user
// comes back to the browser, they see the content they expect.
$('body').append('<iframe class="twitter-detect" src="twitter://" />')
.append('<iframe class="twitter-detect" src="itms-apps://itunes.com/apps/twitter" />');
}
});
})(jQuery, MobileEsp);
</script>
<style type="text/css">
.twitter-detect {
display: none;
}
</style>
</head>
<body>
<p>Website content.</p>
</body>
</html>
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-01-09 10:52:57
Nie możesz, o ile wiem, sprawić, że cały system operacyjny zrozumie http:
+ adres URL domeny. Możesz rejestrować tylko nowe schematy (używam x-darkslide:
w mojej aplikacji). Jeśli aplikacja jest zainstalowana, aplikacja Mobile Safari uruchomi ją poprawnie.
Jednak, musiałbyś zająć się sprawą, w której aplikacja nie jest zainstalowana z " Still here? Kliknij ten link, aby pobrać aplikację z iTunes."na twojej stronie.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 11:18:55
Oto rozwiązanie.
Konfiguracja sitiacji logicznej za pomocą rozmycia i Ostrości
//see if our window is active
window.isActive = true;
$(window).focus(function() { this.isActive = true; });
$(window).blur(function() { this.isActive = false; });
Połącz swój link za pomocą jQuery click handler, który wywołuje coś takiego.
function startMyApp(){
document.location = 'fb://';
setTimeout( function(){
if (window.isActive) {
document.location = 'http://facebook.com';
}
}, 1000);
}
Jeśli aplikacja się otworzy, stracimy skupienie na oknie i zegar się skończy. w przeciwnym razie nic nie dostajemy i ładujemy zwykły adres URL facebook.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-31 04:40:37
Sprawdź User-Agent i jeśli jest Mobilne Safari, otwórz myprotocol:// Adres URL do (próby) otwarcia iPhone ' a aplikacji i mieć go otworzyć mobilny iTunes do pobieranie aplikacji w przypadku, gdy próba nie powiodła się
Brzmi to rozsądnie, ale nie sądzę, że będziesz w stanie go otworzyć mobilny itunes jako drugi Ośrodek. Myślę, że będziesz musiał wybrać jeden lub drugi-albo przekierować do aplikacji lub do itunes.
Tzn. jeśli przekierujesz na myprotocol://, a aplikacji nie ma w telefonie, nie dostaniesz drugiej szansy na przekierowanie do itunes.
Możesz najpierw przekierować na stronę docelową (zoptymalizowaną dla iphone ' a) i dać użytkownikowi opcję kliknięcia na Twoją aplikację lub na itunes, aby uzyskać aplikację, jeśli jej nie ma? Ale będziesz polegał na tym, że użytkownik postąpi właściwie. (Edit: chociaż można ustawić ciasteczko tak, że jest to tylko po raz pierwszy?)
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-07-10 11:25:51
Szukając rozwiązania problemu pop-up, odkryłem, że Apple ma sposób na obejście tego problemu.
Rzeczywiście, po kliknięciu na ten link , jeśli zainstalowałeś aplikację, zostanie ona przekierowana do niej; w przeciwnym razie zostaniesz przekierowany na stronę internetową, bez żadnego wyskakującego okienka.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-29 15:30:16