Herkes android uygulama android tarayıcıdan başlatmak için bana rehberlik edebilir misiniz?
Herkes android uygulama android tarayıcıdan başlatmak için bana rehberlik edebilir misiniz?
Yanıtlar:
<intent-filter>
Bir <data>
eleman içeren bir kullanın . Örneğin, twitter.com için tüm bağlantıları işlemek için aşağıdaki konularda içinde bu koyardım <activity>
Gözlerinde farklı AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Daha sonra, kullanıcı tarayıcıda twitter bağlantısını tıkladığında, eylemi tamamlamak için hangi uygulamanın kullanılacağı sorulur: tarayıcı veya uygulamanız.
Tabii ki, web siteniz ve uygulamanız arasında sıkı bir entegrasyon sağlamak istiyorsanız, kendi düzeninizi tanımlayabilirsiniz:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Ardından, web uygulamanızda aşağıdaki gibi bağlantılar koyabilirsiniz:
<a href="my.special.scheme://other/parameters/here">
Kullanıcı tıkladığında, uygulamanız otomatik olarak başlatılır (çünkü muhtemelen my.special.scheme://
uris türünü işleyebilecek tek kişi olacaktır ). Bunun tek dezavantajı, kullanıcının uygulamayı yüklememesi durumunda kötü bir hata alacaklarıdır. Ve kontrol etmenin bir yolu olduğundan emin değilim.
Düzenleme: Sorunuzu yanıtlamak için, getIntent().getData()
bir Uri
nesneyi döndüren öğeyi kullanabilirsiniz . Daha sonra Uri.*
ihtiyacınız olan verileri ayıklamak için yöntemler kullanabilirsiniz . Örneğin, kullanıcının aşağıdakiler için bir bağlantıyı tıkladığını varsayalım http://twitter.com/status/1234
:
Uri data = getIntent().getData();
String scheme = data.getScheme(); // "http"
String host = data.getHost(); // "twitter.com"
List<String> params = data.getPathSegments();
String first = params.get(0); // "status"
String second = params.get(1); // "1234"
Yukarıdakileri herhangi bir yerde yapabilirsiniz Activity
, ancak muhtemelen bunu yapmak isteyeceksiniz onCreate()
. params.size()
İçindeki yol segmentlerinin sayısını almak için de kullanabilirsiniz Uri
. Uri
Belirli parçaları çıkarmak için kullanabileceğiniz diğer yöntemler için javadoc veya android geliştirici web sitesine bakın .
android:exported="true"
geçen ay Activity
Manifestte. Bu yanıtı kontrol edin stackoverflow.com/a/13044911/1276636
Yukarıdaki yanıtların tümü CHROME
28 Ocak 2014 itibariyle benim için çalışmadı
Uygulamam , hangout'lar, gmail vb. gibi uygulamalardan gelen http://example.com/someresource/ bağlantılarından düzgün bir şekilde başlatıldı , ancak krom tarayıcıdan değil.
Bunu çözmek için, CHROME'den düzgün bir şekilde başlatılması için böyle bir filtre ayarlamanız gerekir.
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
<data
android:host="www.example.com"
android:pathPrefix="/someresource/"
android:scheme="http" />
</intent-filter>
pathPrefix
unsuru not et
kullanıcı , google arama sonuçlarından veya başka bir web sitesinden bir bağlantıyı tıklatarak krom tarayıcıdan http://example.com/someresource/ desen istediğinde artık etkinlik seçicide görünecektir
Lütfen buradaki yorumuma bakın: Android tarayıcısında uygulamamı başlatmak için bir bağlantı oluştursun mu?
Yeni bir dünya çapında internet şeması tanımlamıyorlarsa, insanların kendi şemalarını kullanmalarını kesinlikle önermiyoruz.
Benim durumumda için iki kategori ayarlamak zorunda kaldım <intent-filter>
ve sonra çalıştı:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT"/>
<category android:name="android.intent.category.BROWSABLE"/>
</intent-filter>
Örneğin, sıradaki şeyleriniz var:
Uygulamanızı açma bağlantısı: http://example.com
Uygulamanızın paket adı: com.example.mypackage
O zaman yapmanız gerekenler:
1) Faaliyetinize bir amaç filtresi ekleyin (İstediğiniz herhangi bir etkinlik olabilir. Daha fazla bilgi için belgelere bakın ).
<activity
android:name=".MainActivity">
<intent-filter android:label="@string/filter_title_view_app_from_web">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- Accepts URIs that begin with "http://example.com" -->
<data
android:host="example.com"
android:scheme="http" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
2) Bağlantıyı test etmek için bir HTML dosyası oluşturun veya bu yöntemleri kullanın .
<a href="intent://example.com#Intent;scheme=http;package=com.example.mypackage;end">Open your Activity directly (just open your Activity, without a choosing dialog). </a>
<a href="http://example.com">Open this link with browser or your programm (by choosing dialog).</a>
3) Test etmek için Mobil Chrome'u kullanın
4) Hepsi bu.
Derin bağlantıyı test etmek için pazarda uygulama yayınlamak gerekli değildir =)
Ayrıca, daha fazla bilgi için belgelere ve yararlı sunuma bakın .
<category android:name="android.intent.category.BROWSABLE"/>
Etkinliğin bağlantıdan düzgün şekilde tanınmasını sağlamak için niyet filtresine de eklenmelidir.
Aşağıdaki bağlantı, uygulamanın (yüklüyse) doğrudan tarayıcıdan başlatılması hakkında bilgi verir. Aksi takdirde, uygulamayı sorunsuz bir şekilde indirebilmek için uygulamayı doğrudan oyun mağazasında açar.
Bu özelliği uyguladığınızda simgenizin android başlatıcıdan kaybolup kaybolmadığını, niyet filtresini bölmeniz gerekmediğini lütfen unutmayın.
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="your-own-uri" />
</intent-filter>
</activity>
Evet, Chrome şema aramak yerine arama yapıyor. Uygulamanızı URI şeması aracılığıyla başlatmak istiyorsanız Play Store'daki bu harika yardımcı programı kullanın. Günümü kurtardı :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Felix'in cevabının Xamarin limanı
Buna şunu MainActivity
ekleyin ( docs: Android.App.IntentFilterAttribute Sınıfı ):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin AndroidManifest.xml
sizin için aşağıdakileri ekleyecektir :
<activity
android:label="Something"
android:screenOrientation="portrait"
android:theme="@style/MyTheme"
android:name="blah.MainActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="my.special.scheme" />
</intent-filter>
</activity>
Ve params almak için ( OnCreate of MainActivity'de test ettim ):
var data = Intent.Data;
if (data != null)
{
var scheme = data.Scheme;
var host = data.Host;
var args = data.PathSegments;
if (args.Count > 0)
{
var first = args[0];
var second = args[1];
...
}
}
Bildiğim kadarıyla, yukarıdaki sadece MainActivity'ye değil, herhangi bir aktiviteye eklenebilir
Notlar:
OnCreate
uygulamaların etkinliğinin MainLauncher Activity
tekrar tetikleneceği anlamına gelir .<a href="my.special.scheme://host/arg1/arg2">
yukarıdaki son kod snippet değerleri şöyle olacaktır:scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
Güncelleme: Android uygulamanızın yeni bir örneğini oluşturuyorsa, siz de eklemelisiniz android:launchMode="singleTask"
.
Felix'in derin linkleri ele alma yaklaşımı, derin linkleri ele alma konusunda tipik bir yaklaşımdır. Ayrıca derin bağlantılarınızın yönlendirilmesi ve ayrıştırılması için bu kütüphaneye göz atmanızı öneririm:
https://github.com/airbnb/DeepLinkDispatch
Etkinliğinizi belirli bir derin bağlantı URI'sına kaydetmek için ek açıklamaları kullanabilirsiniz ve yol parçalarını almak, eşleştirmek, vb. :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
Hey çözümü buldum. Kategoriyi "Varsayılan" olarak ayarlamadım. Ayrıca, Amaç Verileri için Ana etkinliği kullanıyordum. Şimdi niyet verileri için farklı bir etkinlik kullanıyorum. Yardım için teşekkürler. :)
CALLBACK_URL 'uygulamasına sözde ana bilgisayar adı eklemeniz gerekir: //' URL olarak anlamlı değildir ve ayrıştırılamaz.
example.php:
<?php
if(!isset($_GET['app_link'])){ ?>
<iframe src="example.php?app_link=YourApp://blabla" style="display:none;" scrolling="no" frameborder="0"></iframe>
<iframe src="example.php?full_link=http://play.google.com/xyz" style="display:none;" scrolling="no" frameborder="0"></iframe>
<?php
}
else { ?>
<script type="text/javascript">
self.window.location = '<?php echo $_GET['app_link'];?>';
window.parent.location.href = '<?php echo $_GET['full_link'];?>';
</script>
<?php
}
Bak @JRuns cevabı buraya . Fikir, özel şemanızla html oluşturmak ve bir yere yüklemek. Ardından, html dosyanızdaki özel bağlantınızı tıklarsanız uygulamanıza yönlendirileceksiniz. Bu makaleyi android için kullandım . Ancak Name = "MyApp.Mobile.Droid.MainActivity"
hedef etkinliğiniz için tam ad özelliğini ayarlamayı unutmayın .
15/06/2019 itibarıyla
yaptığım şey, url açmak için dört olasılıkın hepsini dahil etmek.
yani, öneki http
/ https
ve 2 olan www
ve olmayanwww
ve bunu kullanarak uygulamam bir tarayıcı ve başka bir seçenek seçmemi istemeden otomatik olarak başlatılır.
<intent-filter android:autoVerify="true">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https" android:host="example.in" />
<data android:scheme="https" android:host="www.example.in" />
<data android:scheme="http" android:host="example.in" />
<data android:scheme="http" android:host="www.example.in" />
</intent-filter>