2011-07-31 12 views
31

Szukam sposobu na sprawdzenie, czy konkretna aplikacja jest zainstalowana z przeglądarki internetowej po stronie klienta. Platforma to Android.Wykrywanie z przeglądarki, jeśli konkretna aplikacja jest zainstalowana na Androidzie

Na przykład piszę własną stronę internetową i piszę własną aplikację, teraz chcę, kiedy użytkownik odwiedza moją stronę z przeglądarki telefonu Android. Przeglądarka wygląda, jeśli aplikacja jest już zainstalowana w telefonie i jeśli nie sugeruje instalacji aplikacji. Czy mogę to zrobić ?

Odpowiedz

16

Masz na myśli z JavaScript działającego w przeglądarce? Myślę (mam nadzieję), że to niemożliwe. Nie chciałbym, aby jakakolwiek losowa strona internetowa mogła zobaczyć, jakie aplikacje są zainstalowane.

Jeśli chcesz użytkownikowi zainstalować konkretną aplikację, można podać link rynku, na swojej stronie internetowej: http://developer.android.com/guide/publishing/publishing.html#marketintent

Edit: Gdy Twoja wyjaśnienie w komentarzach do mojej odpowiedzi, bardziej użyteczny odpowiedź pojawiła się poniżej, który słusznie ma więcej przebojów.

+0

Tak, mam na myśli z Javascript. –

+1

@Thomas naprawdę nie ma sposobu, aby dowiedzieć się, czy aplikacja jest zainstalowana? Na przykład piszę własną stronę internetową i piszę własną aplikację, teraz chcę, gdy użytkownik wejdzie na moją stronę z telefonu Android Browser, wygląd przeglądarki, jeśli aplikacja jest zainstalowana w telefonie, a jeśli nie zaproponuje instalacji aplikacji. Czy mogę to zrobić ? –

+0

Wpisałem to w główne pytanie, ponieważ jest to bardzo ważne. – Thomas

98

Istnieje sposób, aby to osiągnąć.

Nie można wykryć, czy dana aplikacja jest zainstalowana, ze względów bezpieczeństwa i prywatności. Ale możesz zrobić lewę, aby otworzyć aplikację, jeśli jest zainstalowana lub otworzyć jej stronę Google Play, jeśli tak nie jest.

Aby to zrobić, należy utworzyć filtr zamiaru w głównej działalności aplikacji, aby otworzyć go po wywołaniu danego adresu URL. Tak:

<activity android:name=".MainActivity > 
     <intent-filter> 
      <data 
       android:host="www.myurl.com" 
       android:pathPrefix="/openmyapp" 
       android:scheme="http" > 
      </data> 

      <action android:name="android.intent.action.VIEW" /> 

      <category android:name="android.intent.category.DEFAULT" /> 
      <category android:name="android.intent.category.BROWSABLE" /> 
      <category android:name="android.intent.category.LAUNCHER" /> 
     </intent-filter> 
    </activity> 

Wyjaśniając: gdy użytkownik nawiguje do http://www.myurl.com/openmyapp, jeśli jest zainstalowana aplikacja, istnienie zamiaru zostanie utworzony i aktywny zostaną pokazane.

Ale co, jeśli użytkownik nie ma zainstalowanej aplikacji? Następnie musisz utworzyć stronę przekierowania na swoim http://www.myurl.com/openmyapp/index.html. Gdy użytkownik dotrze do tego adresu, twój serwer musi przekierować do market://details?id=com.your.app.package.

W ten sposób, gdy po przejściu użytkownika do http://www.myurl.com/openmyapp nie zostanie utworzone żadne intencje, serwer internetowy wywoła inny adres URL. Z kolei ten URL otworzy Google Play na urządzeniu bezpośrednio na stronie aplikacji.

Mam nadzieję, że to pomaga.

+1

to bardzo ciekawy pomysł, jednak po kliknięciu linku do intencji użytkownik otrzymuje okno dialogowe do wyboru między przeglądarką a aplikacją - w dowolny sposób? – hexblot

+1

Dobra rozmowa. Użytkownik musi wybrać aplikację, a następnie wybrać "zawsze", aby filtr intencyjny działał po raz pierwszy. Następnym razem Android nie będzie już pytać. To jest domyślne zachowanie Androida. Dokładnie to samo dzieje się po kliknięciu na link do mapy, na przykład. Niestety, nie znam żadnego sposobu na ominięcie tego i wątpię, czy jest jeden ... – leocadiotine

+12

@leocadiotine Myślę, że istnieje sposób na ominięcie "wybierz aplikację" z wytycznymi w Chrome Google (https://developers.google .com/chrome/mobile/docs/intents). Podsumowując, link z takim formatem powinien być wywołany z przeglądarki ** Force open by package_name app **. Aplikacja o nazwie pakietu jest przeszukiwana i otwierana, w przeciwnym razie jest przekazywana do wyniku wyszukiwania GooglePlay. – Nezneika

14

Znalazłem bardziej przydatne rozwiązanie. Poniżej jest android plik konfiguracyjny:

<activity android:name="me.test.html.MainActivity" > 
    <intent-filter> 
     <action android:name="android.intent.action.VIEW" /> 

     <category android:name="android.intent.category.LAUNCHER" /> 
     <category android:name="android.intent.category.DEFAULT" /> 
     <category android:name="android.intent.category.BROWSABLE" /> 

     <data 
      android:host="xxxxx" 
      android:scheme="mm" /> 
    </intent-filter> 
</activity> 

Poniżej znajduje się kod HTML:

<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
<title>Insert title here</title> 
<script type="text/javascript"> 
function test2(){ 
    var di = document.getElementById("di"); 
    di.innerHTML = "app have not installed"; 
} 
function newOpen(){//184 064 323 438 
    var di = document.getElementById("di"); 
    di.innerHTML = "app have installed"; 
    var ifc = document.getElementById("ifc"); 
    ifc.innerHTML = "<iframe src='mm://xxxxx?a=b&c=d' onload='test2()'></iframe>"; 
    return false; 
} 
</script> 
</head> 
<body> 
<a href="#" onclick="return newOpen()">local3</a><br/> 
<div id="di"></div> 
<div style="display:none;" id="ifc"></div> 
</body> 
</html> 

W ten sposób, gdy użytkownik kliknie znacznik, a jeśli urządzenie posiada aplikację zainstalowaną, to będzie nie wyświetla okna dialogowego, które może wybrać użytkownik, ale zamiast tego bezpośrednio otwiera aplikację; a jeśli aplikacja nie została zainstalowana, zostanie wywołana funkcja js "test2", dlatego wiemy, że aplikacja nie została zainstalowana, więc możemy zrobić wszystko w "test2"! Zaletą jest to, że nie musimy używać standardowego schematu html, który wyświetlałby okno dialogowe wyboru, a jeśli sam skorzystam ze zdefiniowanego schematu, strona nie zostanie wyświetlona na niewłaściwej stronie! Jestem Chińczykiem, mój angielski nie jest dobry, mam nadzieję, że każdy może mnie zrozumieć, a inni niech znają rozwiązanie.

+1

Jeśli aplikacja nie jest zainstalowana, to nadal zainstalowana aplikacja jest wyświetlana na ekranie, inaczej działa ... –

+0

"Aplikacja zainstalowała się", gdy aplikacja nie jest faktycznie zainstalowana. –

5

Możesz wykorzystać Android Intents. Możesz skonstruować zakotwiczenie intencji, aby uruchomić aplikację.Jeśli aplikacja nie jest zainstalowana, przeglądarka wyszukuje nazwę pakietu podaną w zakotwiczeniu zamiaru. Możemy również podać adres URL cofania.

przykład:

<a href="intent://scan/#Intent;scheme=zxing package=com.google.zxing.client.android;end"> Take a QR code </a> 

ta nie jest dostępna we wszystkich przeglądarkach. Obsługuje go Chrome i kilka innych głównych przeglądarek. Sprawdź to link, aby uzyskać więcej szczegółów.

Wiem, że jest późno, że może komuś pomóc.

1

Może być wkrótce dostępny publicznie.

Chrome zespołu mówi:

W Chrome 59 wprowadzamy nowe API o nazwie getInstalledRelatedApps(). Ten nowy interfejs API pozwala określić, czy natywna aplikacja jest zainstalowana na urządzeniu. (https://developers.google.com/web/updates/2017/04/getinstalledrelatedapps)

jednak:

Uwaga: Ten interfejs API jest za pochodzenie Trial, oznacza to, że jesteśmy w trybie eksperymentalnym i aktywnie poszukują informacji zwrotnej. Musisz zrezygnować z tej witryny z tej wersji próbnej: (https://github.com/jpchase/OriginTrials/blob/gh-pages/developer-guide.md) , ponieważ nie jest ona ogólnie dostępna w Internecie. Możesz teraz zarejestrować się w wersji próbnej (https://docs.google.com/forms/d/e/1FAIpQLSfO0_ptFl8r8G0UFhT0xhV17eabG-erUWBDiKSRDTqEZ_9ULQ/viewform?entry.1999497328=getInstalledRelatedApps).

Aktualny stan platformą tej funkcji: https://www.chromestatus.com/feature/5695378309513216

Problem w bugtracker dla tej funkcji: https://bugs.chromium.org/p/chromium/issues/detail?id=587623

/update 15.02.2018:

Proces za getInstalledRelatedApps() została zakończona: https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/completed-trials.md : First available in Chrome M59. Trial ends on January 30, 2018., ale nie jest jeszcze zaimplementowany w stabilnym Chrome: Feature team currently considering the next steps for the feature.

Powiązane problemy