Adakah yang bisa membimbing saya tentang cara meluncurkan aplikasi android saya dari browser android?
Adakah yang bisa membimbing saya tentang cara meluncurkan aplikasi android saya dari browser android?
Jawaban:
Gunakan a <intent-filter>
dengan <data>
elemen. Misalnya, untuk menangani semua tautan ke twitter.com, Anda akan memasukkannya ke <activity>
dalam AndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Kemudian, ketika pengguna mengklik tautan ke twitter di browser, mereka akan ditanya aplikasi apa yang akan digunakan untuk menyelesaikan tindakan: browser atau aplikasi Anda.
Tentu saja, jika Anda ingin memberikan integrasi yang erat antara situs web dan aplikasi Anda, Anda dapat menentukan skema Anda sendiri:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
Kemudian, di aplikasi web Anda, Anda dapat menaruh tautan seperti:
<a href="my.special.scheme://other/parameters/here">
Dan ketika pengguna mengkliknya, aplikasi Anda akan diluncurkan secara otomatis (karena itu mungkin satu-satunya yang dapat menangani my.special.scheme://
jenis uris). Satu-satunya downside ke ini adalah bahwa jika pengguna tidak menginstal aplikasi, mereka akan mendapatkan kesalahan buruk. Dan saya tidak yakin ada cara untuk memeriksa.
Sunting: Untuk menjawab pertanyaan Anda, Anda dapat menggunakan getIntent().getData()
yang mengembalikan Uri
objek. Anda kemudian dapat menggunakan Uri.*
metode untuk mengekstrak data yang Anda butuhkan. Misalnya, katakanlah pengguna mengeklik tautan ke 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"
Anda dapat melakukan hal di atas di mana saja Activity
, tetapi Anda mungkin ingin melakukannya onCreate()
. Anda juga dapat menggunakan params.size()
untuk mendapatkan jumlah segmen jalur di Uri
. Lihatlah ke javadoc atau situs web pengembang android untuk Uri
metode lain yang dapat Anda gunakan untuk mengekstrak bagian tertentu.
android:exported="true"
untuk mereka Activity
dalam manifes. Periksa jawaban ini stackoverflow.com/a/13044911/1276636
Semua jawaban di atas tidak bekerja untuk saya CHROME
pada 28 Januari 2014
Aplikasi saya diluncurkan dengan benar dari http://example.com/someresource/ tautan dari aplikasi seperti hangout, gmail dll tetapi tidak dari dalam browser chrome.
untuk mengatasi ini, sehingga diluncurkan dengan benar dari CHROME Anda harus menetapkan filter maksud seperti ini
<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>
perhatikan pathPrefix
elemennya
aplikasi Anda sekarang akan muncul di dalam pemilih aktivitas setiap kali pengguna meminta pola http://example.com/someresource/ dari browser chrome dengan mengklik tautan dari hasil pencarian google atau situs web lain
Silakan lihat komentar saya di sini: Buat tautan di peramban Android memulai aplikasi saya?
Kami sangat menyarankan orang untuk tidak menggunakan skema mereka sendiri, kecuali mereka mendefinisikan skema internet baru di seluruh dunia.
Dalam kasus saya, saya harus menetapkan dua kategori untuk <intent-filter>
dan kemudian berfungsi:
<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>
Misalnya, Anda memiliki hal-hal berikut:
Tautan untuk membuka aplikasi Anda: http://example.com
Nama paket aplikasi Anda: com.example.mypackage
Maka yang perlu Anda lakukan selanjutnya:
1) Tambahkan filter maksud ke Aktivitas Anda (Dapat berupa aktivitas apa pun yang Anda inginkan. Untuk info lebih lanjut, lihat dokumentasi ).
<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) Buat file HTML untuk menguji tautan atau gunakan metode ini.
<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) Gunakan Mobile Chrome untuk menguji
4) Itu dia.
Dan tidak perlu mempublikasikan aplikasi di pasar untuk menguji tautan dalam =)
Juga, untuk informasi lebih lanjut, periksa dokumentasi dan presentasi yang bermanfaat .
Juga harus <category android:name="android.intent.category.BROWSABLE"/>
ditambahkan ke filter maksud untuk membuat aktivitas dikenali dengan benar dari tautan.
Tautan berikut memberikan informasi tentang peluncuran aplikasi (jika dipasang) langsung dari browser. Jika tidak, aplikasi akan langsung membuka aplikasi di play store sehingga pengguna dapat mengunduh dengan lancar.
Harap perhatikan jika ikon Anda hilang dari peluncur android ketika Anda menerapkan fitur ini, daripada Anda harus memisahkan filter maksud.
<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>
Ya, Chrome mencari bukannya mencari skema. Jika Anda ingin meluncurkan Aplikasi Anda melalui skema URI, gunakan Aplikasi utilitas keren ini di Play store. Itu menyelamatkan hari saya :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
Port Xamarin jawaban Felix
Di Anda MainActivity
, tambahkan ini ( dokumen: Android.App.IntentFilterAttribute Class ):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin akan menambahkan yang berikut AndroidManifest.xml
untuk Anda:
<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>
Dan untuk mendapatkan params ( saya uji di OnCreate of MainActivity ):
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];
...
}
}
Sejauh yang saya tahu, di atas dapat ditambahkan dalam aktivitas apa pun, tidak hanya MainActivity
Catatan:
OnCreate
acara aplikasi MainLauncher Activity
akan diaktifkan kembali.<a href="my.special.scheme://host/arg1/arg2">
di atas akan:scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
Pembaruan: jika android membuat instance baru aplikasi Anda, Anda juga harus menambahkannya android:launchMode="singleTask"
.
Pendekatan Felix untuk menangani tautan dalam adalah pendekatan khas untuk menangani tautan dalam. Saya juga menyarankan memeriksa perpustakaan ini untuk menangani perutean dan penguraian tautan dalam Anda:
https://github.com/airbnb/DeepLinkDispatch
Anda dapat menggunakan anotasi untuk mendaftarkan Aktivitas Anda untuk tautan dalam URI tertentu, dan itu akan mengekstrak parameter untuk Anda tanpa harus melakukan omong kosong biasa untuk mendapatkan segmen jalur, mencocokkannya, dll. Anda dapat dengan mudah membuat catatan dan aktivitas seperti ini :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
Hei, aku punya solusinya. Saya tidak menetapkan kategori sebagai "Default". Saya juga menggunakan aktivitas Utama untuk Data maksud. Sekarang saya menggunakan aktivitas berbeda untuk data maksud. Terima kasih untuk bantuannya. :)
Anda perlu menambahkan pseudo-hostname ke aplikasi CALLBACK_URL: // 'tidak masuk akal sebagai URL dan tidak dapat diuraikan.
contoh.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
}
Lihat jawaban JRuns di sini . Idenya adalah membuat html dengan skema khusus Anda dan mengunggahnya ke suatu tempat. Kemudian jika Anda mengklik tautan khusus pada file html Anda, Anda akan diarahkan ke aplikasi Anda. Saya menggunakan artikel ini untuk android. Tapi jangan lupa untuk mengatur Name = "MyApp.Mobile.Droid.MainActivity"
atribut nama lengkap untuk aktivitas target Anda.
Pada 15/06/2019
apa yang saya lakukan adalah memasukkan keempat kemungkinan untuk membuka url.
yaitu, dengan http
/ https
dan 2 dengan www
awalan dan 2 tanpawww
dan dengan menggunakan ini aplikasi saya diluncurkan secara otomatis sekarang tanpa meminta saya untuk memilih browser dan opsi lainnya.
<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>