2011-07-31 22 views
31

yüklüyse tarayıcıdan Algıla Bir istemci tarafı web tarayıcısından belirli bir uygulamanın yüklü olup olmadığını öğrenmek için bir yol arıyorum. Platform Android.Belirli bir uygulama Android

Örneğin kendi web sitemi kendim yazıp kendi uygulamamı yazarım, şimdi de kullanıcının Android telefon Tarayıcısından kendi siteme gelmesini istiyorum. Tarayıcı, uygulamanın telefona önceden yüklenmiş olup olmadığını ve uygulamayı yüklemeyi önermediğini gösterir. Bunu yapabilir miyim ?

cevap

16

Tarayıcıda çalışan JavaScript’ten mi söz ediyorsunuz? Bence (umut) bu imkansız. Hangi uygulamaların yüklendiğini görebilecek rastgele bir web sitesi istemem. Eğer kullanıcı belirli bir uygulamayı yüklemek istiyorsanız

, web sitenizde bir Pazar bağlantısını sağlayabilir: http://developer.android.com/guide/publishing/publishing.html#marketintent

Edit: Benim yanıta yorum yapın açıklama, daha kullanışlı bir cevap aşağıda göründü sonra, haklı olarak daha fazla vardiya vardır.

+0

Evet, Javascript'ten demek istiyorum. –

+1

@Thomas gerçekten uygulamanın yüklü olup olmadığını bilmek için bir yolu yoktur? Foe Örneği Kendi web sitemi kendim yazıp kendi uygulamamı yazarım, şimdi kullanıcının kendi siteme gelip Android telefonundan gelmesini istediğimde Tarayıcı, Tarayıcı uygulaması telefona yüklenip yüklenmediğini ve uygulamayı yüklemeyi önermediğimi gösterir. Bunu yapabilir miyim ? –

+0

Bunu ana soruya düzenledim çünkü çok önemli. – Thomas

98

Bunu başarmanın bir yolu var. Güvenlik ve gizlilik nedenleriyle, belirli bir uygulamanın yüklü olup olmadığını algılayamıyorsunuz. Ancak, yüklü değilse veya Google Play sayfasını açmamışsa uygulamayı açmak için bir numara yapabilirsiniz.

Bunu yapmak için, belirli bir URL çağrıldığında açmak üzere uygulamanızın ana etkinliğinde bir amaç filtresi oluşturmanız gerekir. Şunun gibi:

<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> 

açıklanması: Kullanıcı http://www.myurl.com/openmyapp gittiğinde uygulaması yüklüyse, bir niyet oluşturulur ve Etkinlik gösterilecektir.

Ancak, kullanıcı uygulamayı yüklememişse ne olur? Ardından, http://www.myurl.com/openmyapp/index.html sayfanızda bir yönlendirme sayfası oluşturmanız gerekir. Kullanıcı bu adrese ulaştığında, sunucunuz market://details?id=com.your.app.package'a yönlendirmelidir. Bu şekilde, kullanıcı http://www.myurl.com/openmyapp'a gittikten sonra hiçbir Niyet yaratılmadığında, web sunucusu başka bir URL'yi arayacaktır. Bu URL, sırayla, Google Play'i cihazda doğrudan uygulamanın sayfasında açar.

Yardım edin.

+1

Bu çok ilginç bir fikir, ancak amaç için bağlantı tıklandığında, kullanıcı tarayıcı ve uygulama arasında seçim yapmak için bir iletişim kutusuyla sunulur - bu şekilde herhangi bir şekilde? – hexblot

+1

İyi çağrı. Kullanıcı uygulamayı seçmeli ve sonra ilk kez çalışmak üzere niyet filtresi için "her zaman" ı seçmelidir. Bir dahaki sefere Android artık sormayacak. Bu, Android'in varsayılan davranıştır. Örneğin, bir harita bağlantısına tıkladığınızda aynı şey olur. Ne yazık ki, bunu aşmak için herhangi bir yol bilmiyorum ve bir tane var şüpheliyim… – leocadiotine

+12

@leocadiotine Google'ın (https://developers.google) kılavuzunda "uygulama seç" i devre dışı bırakmanın bir yolu olduğunu düşünüyorum. .com/krom/mobil/docs/Intents'in). Özet olarak, bu tür bir formatta bir link tarayıcıdan çağrılmalıdır ** Force open by package_name app **. olarak paket adıyla uygulama aranır ve açılır, aksi halde GooglePlay arama sonucuna yönlendirilir. – Nezneika

14

Daha yararlı bir çözüm buldum. Aşağıda

<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> 

html kodu edilir: Aşağıda android yapılandırma dosyasıdır kullanıcı etiketi tıkladığında Bu şekilde

<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> 

, ve cihazın yüklü uygulamayı varsa, o zaman olacak kullanıcının seçmesine izin vermek için bir iletişim kutusu göstermez, bunun yerine uygulamayı doğrudan açar; ve eğer uygulama yüklenmemişse, js "test2" fonksiyonu çağrılacaktır, bu yüzden uygulamanın kurulmadığını biliyoruz, bu yüzden "test2" de herhangi bir şey yapabiliriz! Bunun avantajı, bir seçim diyaloğunu gösteren standart html şemasını kullanmamızın gerekmemesidir ve tanımlanmış şemayı kendim kullanırsam, sayfa yanlış bir sayfaya gitmemiştir! Ben bir Çinliyim, İngilizcem iyi değil, herkesin beni anlayabileceğini ve başkalarının da çözümü öğrenmesini sağlayabileceğini umuyorum.

+1

Uygulama yüklenmemişse, yine de uygulamanın yüklü olduğu ekranda görüntüleniyor, aksi halde çalışıyor… –

+0

Uygulama gerçekten kurulmadığında 'uygulama yüklendi'. –

5

Android Intents'tan yararlanabilirsiniz. Uygulamayı başlatmak için bir niyet çapası oluşturabilirsiniz.Uygulama yüklenmemişse tarayıcı, amaç ankrajında ​​belirtilen paket adını arar. Ayrıca bir Geri Giden URL sağlayabiliriz.

örnek:

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

Bu tüm tarayıcılarda desteklenmez. Chrome ve diğer birkaç önemli tarayıcı bunu destekliyor. Daha fazla ayrıntı için bu link kontrol edin.

Bunun geç olduğunu düşündüğüm birisinin yardımcı olabileceğini düşündüm.

1

Bu, yakında herkese açık olarak mevcut olabilir.

Krom Takım diyor ki:

Chrome 59 biz getInstalledRelatedApps() adlandırılan yeni API sunuyoruz. Bu yeni API, yerel uygulamanızın bir cihaza yüklenip yüklenmediğini belirlemenizi sağlar. (https://developers.google.com/web/updates/2017/04/getinstalledrelatedapps) Henüz

:

Not: Bu API, bir Origin Deneme arkasında bu biz deneysel modunda ve aktif geribildirim arıyoruz demektir. Sitenizi, bu geniş kapsamlı olarak web'de bulunmadığından (https://github.com/jpchase/OriginTrials/blob/gh-pages/developer-guide.md) numaralı deneme sürümüne dahil etmeniz gerekiyor. Şimdi deneme sürümü (https://docs.google.com/forms/d/e/1FAIpQLSfO0_ptFl8r8G0UFhT0xhV17eabG-erUWBDiKSRDTqEZ_9ULQ/viewform?entry.1999497328=getInstalledRelatedApps) için kayıt olabilirsiniz. Bu özelliğin

Güncel platformu durumu: https://bugs.chromium.org/p/chromium/issues/detail?id=587623

/Güncelleme 15.02.2018: Bu özellik için takipçisi içinde https://www.chromestatus.com/feature/5695378309513216

Sayı

getInstalledRelatedApps() için Deneme tamamlandı: https://github.com/GoogleChrome/OriginTrials/blob/gh-pages/completed-trials.md : First available in Chrome M59. Trial ends on January 30, 2018., ancak henüz sabit Chrome'da uygulanmadı: Feature team currently considering the next steps for the feature.

İlgili konular