ใครช่วยแนะนำฉันเกี่ยวกับวิธีเปิดแอปพลิเคชัน Android จากเบราว์เซอร์ android ได้หรือไม่
ใครช่วยแนะนำฉันเกี่ยวกับวิธีเปิดแอปพลิเคชัน Android จากเบราว์เซอร์ android ได้หรือไม่
คำตอบ:
ใช้<intent-filter>
กับ<data>
องค์ประกอบ ตัวอย่างเช่นหากต้องการจัดการลิงก์ทั้งหมดไปยัง twitter.com คุณต้องใส่สิ่งนี้ไว้<activity>
ในAndroidManifest.xml
:
<intent-filter>
<data android:scheme="http" android:host="twitter.com"/>
<action android:name="android.intent.action.VIEW" />
</intent-filter>
จากนั้นเมื่อผู้ใช้คลิกที่ลิงค์ไปยัง Twitter ในเบราว์เซอร์พวกเขาจะถูกถามว่าแอปพลิเคชันใดที่จะใช้เพื่อให้การดำเนินการเสร็จสิ้น: เบราว์เซอร์หรือแอปพลิเคชันของคุณ
แน่นอนถ้าคุณต้องการรวมการทำงานระหว่างเว็บไซต์และแอพของคุณไว้แน่นคุณสามารถกำหนดโครงร่างของคุณเอง:
<intent-filter>
<data android:scheme="my.special.scheme" />
<action android:name="android.intent.action.VIEW" />
</intent-filter>
จากนั้นในเว็บแอปของคุณคุณสามารถใส่ลิงค์เช่น:
<a href="my.special.scheme://other/parameters/here">
และเมื่อผู้ใช้คลิกแอปของคุณจะเปิดตัวโดยอัตโนมัติ (เพราะอาจเป็นแอพเดียวที่สามารถจัดการmy.special.scheme://
ประเภทของ uris ได้) ข้อเสียเพียงอย่างเดียวคือถ้าผู้ใช้ไม่ได้ติดตั้งแอพพวกเขาจะได้รับข้อผิดพลาดที่น่ารังเกียจ และฉันไม่แน่ใจว่าจะมีวิธีการตรวจสอบใด ๆ
แก้ไข:เพื่อตอบคำถามของคุณคุณสามารถใช้getIntent().getData()
คืนUri
วัตถุได้ จากนั้นคุณสามารถใช้Uri.*
วิธีการแยกข้อมูลที่คุณต้องการ ตัวอย่างเช่นสมมติว่าผู้ใช้คลิกที่ลิงก์ไปที่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"
คุณสามารถทำสิ่งต่าง ๆ ข้างต้นได้ทุกที่ในตัวคุณActivity
แต่คุณอาจต้องการทำสิ่งต่อไปonCreate()
นี้ นอกจากนี้คุณยังสามารถใช้เพื่อให้ได้จำนวนของกลุ่มเส้นทางที่อยู่ในนั้นparams.size()
Uri
มองหา javadoc หรือเว็บไซต์ผู้พัฒนา android สำหรับUri
วิธีการอื่นที่คุณสามารถใช้เพื่อแยกส่วนเฉพาะ
android:exported="true"
ให้กับพวกเขาActivity
ในที่ประจักษ์ ตรวจสอบคำตอบนี้stackoverflow.com/a/13044911/1276636
คำตอบทั้งหมดข้างต้นไม่ได้ผลสำหรับฉันCHROME
เมื่อวันที่ 28 มกราคม 2014
แอปของฉันเปิดใช้งานได้อย่างถูกต้องจากhttp://example.com/someresource/ลิงก์จากแอปเช่นแฮงเอาท์ Gmail และอื่น ๆ แต่ไม่ใช่จากภายในเบราว์เซอร์โครม
เพื่อแก้ปัญหานี้เพื่อที่จะเปิดใช้งานอย่างถูกต้องจากโครเมี่ยมคุณต้องตั้งตัวกรองความตั้งใจเช่นนี้
<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
องค์ประกอบ
แอปของคุณจะปรากฏในเครื่องมือเลือกกิจกรรมเมื่อใดก็ตามที่ผู้ใช้ร้องขอhttp://example.com/someresource/รูปแบบจากเบราว์เซอร์ chrome โดยคลิกลิงก์จากผลการค้นหาของ google หรือเว็บไซต์อื่น ๆ
โปรดดูความคิดเห็นของฉันที่นี่: สร้างลิงก์ในเบราว์เซอร์ Android เพื่อเริ่มแอพของฉันหรือไม่
เราไม่สนับสนุนให้ผู้คนใช้แผนการของตนเองอย่างเด็ดขาดเว้นแต่พวกเขาจะกำหนดโครงร่างอินเทอร์เน็ตใหม่ทั่วโลก
ในกรณีของฉันฉันต้องตั้งสองประเภทสำหรับ<intent-filter>
และจากนั้นมันทำงาน:
<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>
ตัวอย่างเช่นคุณมีสิ่งต่อไปนี้:
ลิงก์สำหรับเปิดแอปของคุณ: http://example.com
ชื่อแพ็คเกจของแอปของคุณ: com.example.mypackage
จากนั้นคุณต้องทำสิ่งต่อไปนี้:
1) เพิ่มตัวกรองเจตนาในกิจกรรมของคุณ (สามารถเป็นกิจกรรมใด ๆ ที่คุณต้องการสำหรับข้อมูลเพิ่มเติมตรวจสอบเอกสารประกอบ )
<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) สร้างไฟล์ HTML เพื่อทดสอบลิงก์หรือใช้วิธีนี้
<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) ใช้ Mobile Chrome เพื่อทดสอบ
4) นั่นแหล่ะ
และไม่จำเป็นต้องเผยแพร่แอปในตลาดเพื่อทดสอบการเชื่อมโยงลึก =)
นอกจากนี้สำหรับข้อมูลเพิ่มเติมโปรดดูเอกสารและมีประโยชน์ในการนำเสนอ
ควรมีการ<category android:name="android.intent.category.BROWSABLE"/>
เพิ่มลงในตัวกรองเจตนาเพื่อให้กิจกรรมได้รับการยอมรับอย่างถูกต้องจากลิงก์
ลิงค์ต่อไปนี้ให้ข้อมูลเกี่ยวกับการเปิดใช้แอพ (หากติดตั้ง) โดยตรงจากเบราว์เซอร์ มิฉะนั้นจะเปิดแอพใน play store โดยตรงเพื่อให้ผู้ใช้สามารถดาวน์โหลดได้อย่างราบรื่น
โปรดทราบว่าไอคอนของคุณจะหายไปจากตัวเรียกใช้ Android เมื่อคุณใช้คุณสมบัตินี้กว่าที่คุณจะต้องแยกตัวกรองความตั้งใจ
<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>
ใช่ Chrome ค้นหาแทนที่จะค้นหาแบบแผน หากคุณต้องการเปิดแอพของคุณผ่านแบบแผน URI ให้ใช้แอพยูทิลิตี้สุดเจ๋งนี้ที่ Play store มันบันทึกวันของฉัน :) https://play.google.com/store/apps/details?id=com.naosim.urlschemesender
คำตอบของเฟลิกซ์ที่ท่าเรือXamarin
ในของคุณMainActivity
เพิ่ม ( docs: Android.App.IntentFilterAttribute Class ):
....
[IntentFilter(new[] {
Intent.ActionView },
Categories = new[] { Intent.CategoryDefault, Intent.CategoryBrowsable },
DataScheme = "my.special.scheme")
]
public class MainActivity : Activity
{
....
Xamarin จะเพิ่มสิ่งต่อไปนี้ในตัวAndroidManifest.xml
คุณ:
<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>
และเพื่อรับ params ( ฉันทดสอบใน 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];
...
}
}
เท่าที่ฉันรู้ข้างต้นสามารถเพิ่มในกิจกรรมใด ๆ ไม่เพียง แต่กิจกรรมหลัก
หมายเหตุ:
OnCreate
เหตุการณ์ของแอปMainLauncher Activity
จะถูกไล่ออกอีกครั้ง<a href="my.special.scheme://host/arg1/arg2">
ข้างต้นจะเป็น:scheme: my.special.scheme
host: host
args: ["arg1", "arg2"]
first: arg1
second: arg2
อัปเดต:หาก Android สร้างอินสแตนซ์ใหม่ของแอปของคุณคุณควรเพิ่มandroid:launchMode="singleTask"
ด้วย
วิธีการของเฟลิกซ์ในการจัดการลิงก์ที่ลึกเป็นวิธีการทั่วไปในการจัดการลิงก์ที่ลึก ฉันขอแนะนำให้ตรวจสอบห้องสมุดนี้เพื่อจัดการการกำหนดเส้นทางและการแยกวิเคราะห์ลิงก์ที่ลึกของคุณ:
https://github.com/airbnb/DeepLinkDispatch
คุณสามารถใช้คำอธิบายประกอบเพื่อลงทะเบียนกิจกรรมของคุณสำหรับ URI ลิงก์ที่ลึกและมันจะแยกพารามิเตอร์สำหรับคุณโดยไม่ต้องทำตามปกติในการรับกลุ่มเส้นทางจับคู่และอื่น ๆ คุณสามารถใส่คำอธิบายประกอบและกิจกรรมเช่นนี้ :
@DeepLink("somePath/{someParameter1}/{someParameter2}")
public class MainActivity extends Activity {
...
}
เฮ้ฉันได้ทางออกแล้ว ฉันไม่ได้ตั้งค่าหมวดหมู่เป็น "ค่าเริ่มต้น" นอกจากนี้ฉันกำลังใช้กิจกรรมหลักสำหรับข้อมูลเจตนา ตอนนี้ฉันกำลังใช้กิจกรรมอื่นสำหรับข้อมูลเจตนา ขอบคุณสำหรับความช่วยเหลือ :)
คุณต้องเพิ่มชื่อปลอม - ชื่อโฮสต์ในแอป CALLBACK_URL ': //' ไม่สมเหตุสมผลเท่า URL และไม่สามารถแยกวิเคราะห์ได้
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
}
@JRuns ดูคำตอบในที่นี่ แนวคิดคือการสร้าง html ด้วยแบบกำหนดเองของคุณและอัปโหลดที่อื่น จากนั้นหากคุณคลิกลิงก์ที่กำหนดเองในไฟล์ html ของคุณคุณจะถูกนำไปยังแอปของคุณ ฉันใช้นี้บทความสำหรับหุ่นยนต์ แต่อย่าลืมตั้งค่าName = "MyApp.Mobile.Droid.MainActivity"
แอตทริบิวต์ชื่อเต็มให้กับกิจกรรมเป้าหมายของคุณ
ตั้งแต่ 15/06/2019
สิ่งที่ฉันทำคือรวมถึงความเป็นไปได้ทั้งสี่ในการเปิด URL
เช่นด้วยhttp
/ https
และ 2 ด้วยwww
คำนำหน้าและ 2 โดยไม่ต้องwww
และโดยการใช้แอพของฉันจะเริ่มต้นอัตโนมัติตอนนี้โดยไม่ต้องขอให้ฉันเลือกเบราว์เซอร์และตัวเลือกอื่น ๆ
<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>