پیوند عمیق به شما امکان می دهد کاربران را مستقیماً از مرورگرهای وب، اعلان ها، رسانه های اجتماعی، تبلیغات و سایر منابع وارد برنامه خود کنید. پیوندهای عمیق انتقال مستقیم برنامه به برنامه و وب به برنامه را ارائه می دهند که می تواند به شما در افزایش تعامل از طریق محتوای متنی و هدفمند کمک کند.
این راهنما توضیح میدهد که پیوند عمیق چگونه کار میکند و چگونه لینکهای عمیق به محتوای خود ایجاد و آزمایش کنید.
برای پیوندهای عمیقی که به وبسایت یا دامنههای شما ارجاع میدهند، توصیه میکنیم از App Links استفاده کنید، که تجربهای یکپارچه و قابل اعتماد را برای کاربران شما فراهم میکند.
پیوند عمیق چگونه کار می کند
پیوند عمیق یک قابلیت کلی سیستم اندروید است که در همه نسخه ها و در همه دستگاه ها پشتیبانی می شود. این سیستم از سیستم Intents اندروید برای مسیریابی پیوندهای عمیق به برنامه های علاقه مند استفاده می کند. برنامههایی که میخواهند یک URI پیوند عمیق خاص را مدیریت کنند، یک فیلتر Intent منطبق را در فایلهای مانیفست برنامه خود اعلام میکنند.
در زمان اجرا، زمانی که کاربر روی یک لینک ضربه میزند، اندروید یک intent را راهاندازی میکند و سعی میکند آن را به یک برنامه هدایت کند. از آنجایی که چندین برنامه میتوانند فیلترهای هدف را که با یک URI مشخص مطابقت دارند اعلام کنند، Android این اقدامات را به ترتیب برای مسیریابی قصد انجام میدهد:
- برنامه پیشفرض کاربر را باز کنید که میتواند URI را مدیریت کند، اگر یکی از آنها مشخص شده بود.
- تنها برنامه موجودی را که میتواند URI را مدیریت کند باز کنید.
- به کاربر اجازه دهید یک برنامه را از یک گفتگوی ابهامزدایی انتخاب کند.
این بدان معنی است که، حتی اگر فیلترهای هدف شما با یک URI مشخص مطابقت داشته باشند، هیچ تضمینی وجود ندارد که سیستم هدف پیوند عمیق را به برنامه شما هدایت کند. کاربر نقشی کلیدی در مدیریت برنامههایی دارد که هدف را مدیریت میکند، که به آنها کنترل میدهد و انتخاب میکند. برای کنترل بیشتر بر پیوندهای عمیق به وب سایت و دامنه های خود، از App Links استفاده کنید.
گفتگوی ابهامزدایی اندروید به کاربر امکان میدهد تمام برنامههای نصبشدهای را که برای مدیریت یک پیوند عمیق ثبتنام کردهاند، ببیند. کاربر همچنین می تواند یک برنامه را به عنوان پیش فرض برای این نوع پیوند انتخاب کند. هنگامی که کاربر یک پیش فرض را تنظیم می کند، سیستم دیگر گفتگوی آن هدف خاص را نشان نمی دهد و برنامه انتخابی به طور خودکار باز می شود.
شکل 1. گفتگوی ابهامزدایی
رفتار گفتگوی ابهامزدایی در نسخههای Android تکامل یافته است. به عنوان مثال، در Android 12 و بالاتر، پیوندهای وب که تأیید نشده اند، به طور پیش فرض در یک مرورگر وب باز می شوند، در حالی که در نسخه های قبلی، اگر برنامه بتواند پیوند وب را مدیریت کند، ممکن است یک گفتگوی ابهام زدایی ظاهر شده باشد.
توجه : با شروع در Android 12 (سطح API 31)، یک هدف وب عمومی تنها در صورتی به فعالیتی در برنامه شما تبدیل میشود که برنامه شما برای دامنه خاص موجود در آن هدف وب تأیید شده باشد. اگر برنامه شما برای دامنه تأیید نشده باشد، هدف وب به برنامه مرورگر پیشفرض کاربر حل میشود.
انواع لینک های عمیق
سه نوع پیوند عمیق وجود دارد که می توانید در اندروید پشتیبانی کنید:
- پیوندهای عمیق سفارشی : اینها پیوندهای عمیقی هستند که از یک طرح URI سفارشی (مانند
example://products/123
) استفاده می کنند تا کاربر را مستقیماً به یک محتوای خاص در یک برنامه هدایت کنند. آنها برای پیمایش داخلی یا پیوندهایی از منابعی که شما کنترل میکنید قدرتمند هستند، اما پیوندهای وب استاندارد نیستند و اگر برنامه دیگری همان طرح سفارشی را ثبت کند، همچنان میتوانند گفتگوی ابهامزدایی را فعال کنند. - پیوندهای وب : اینها پیوندهای عمیقی هستند که از طرح های استاندارد
http
وhttps
استفاده می کنند. آنها همه کاره تر هستند زیرا URL های استانداردی هستند، اما در اندروید 12 و بالاتر تقریبا همیشه گفتگوی ابهام زدایی را فعال می کنند، به این معنی که احتمالاً به طور پیش فرض توسط مرورگر وب کاربر مدیریت می شوند، نه اینکه به برنامه شما هدایت شوند. - پیوندهای برنامه : از Android 6.0 (سطح API 23) موجود است، این پیوندهای وب تأیید شده هستند. از طریق فرآیند ارتباط وب سایت، می توانید به سیستم اندروید ثابت کنید که مالک دامنه هستید. پس از تأیید، سیستم به طور خودکار پیوندهای آن دامنه را مستقیماً به برنامه شما هدایت می کند و از گفتگوی ابهام زدایی به طور کامل صرف نظر می کند. این یک تجربه قابل اعتماد و یکپارچه برای کاربران شما ایجاد می کند.
فیلترهای هدف را برای پیوندهای ورودی اضافه کنید
برای ایجاد پیوند به محتوای برنامه خود، یک فیلتر قصد اضافه کنید که حاوی این عناصر و مقادیر مشخصه در مانیفست شما باشد:
عمل قصد ACTION_VIEW
را مشخص کنید تا بتوان از جستجوی Google به فیلتر قصد دسترسی داشت.
یک یا چند تگ <data>
اضافه کنید، که هر کدام نشان دهنده یک فرمت URI است که به فعالیت حل می شود. حداقل، تگ <data>
باید دارای ویژگی android:scheme
باشد.
میتوانید برای اصلاح بیشتر نوع URI که فعالیت میپذیرد، ویژگیهای بیشتری اضافه کنید. به عنوان مثال، ممکن است چندین فعالیت داشته باشید که URI های مشابهی را می پذیرند، اما به سادگی بر اساس نام مسیر متفاوت هستند. در این مورد، از ویژگی android:path
یا pathPattern
یا pathPrefix
انواع آن استفاده کنید تا مشخص کنید که سیستم باید کدام فعالیت را برای مسیرهای URI مختلف باز کند.
شامل دسته بندی BROWSABLE
. برای اینکه فیلتر قصد از طریق مرورگر وب قابل دسترسی باشد، لازم است. بدون آن، کلیک کردن روی پیوند در مرورگر نمیتواند به برنامه شما حل شود.
همچنین شامل دسته DEFAULT
. این به برنامه شما اجازه می دهد تا به مقاصد ضمنی پاسخ دهد. بدون این، فعالیت فقط در صورتی می تواند شروع شود که هدف نام مؤلفه برنامه شما را مشخص کند.
قطعه XML زیر نشان می دهد که چگونه می توانید یک فیلتر قصد در مانیفست خود برای پیوند عمیق مشخص کنید. URI های "example://gizmos"
و "http://www.example.com/gizmos"
هر دو به این فعالیت پاسخ می دهند.
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<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://www.example.com/gizmos” -->
<data android:scheme="http"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
<!-- note that the leading "/" is required for pathPrefix-->
</intent-filter>
<intent-filter android:label="@string/filter_view_example_gizmos">
<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 "example://gizmos” -->
<data android:scheme="example"
android:host="gizmos" />
</intent-filter>
</activity>
توجه داشته باشید که دو فیلتر intent فقط بر اساس عنصر <data>
متفاوت هستند. اگرچه ممکن است چندین عنصر <data>
را در یک فیلتر قرار دهید، مهم است که فیلترهای جداگانه ایجاد کنید زمانی که قصد شما این است که URL های منحصر به فرد را اعلام کنید (مانند ترکیبی خاص از scheme
و host
)، زیرا چندین عنصر <data>
در یک فیلتر هدف در واقع با هم ادغام می شوند تا همه تغییرات ویژگی های ترکیبی آنها را در نظر بگیرند. برای مثال موارد زیر را در نظر بگیرید:
<intent-filter>
...
<data android:scheme="https" android:host="www.example.com" />
<data android:scheme="app" android:host="open.my.app" />
</intent-filter>
ممکن است به نظر برسد که این فقط https://www.example.com
و app://open.my.app
پشتیبانی می کند. با این حال، در واقع از این دو پشتیبانی می کند، به علاوه این موارد: app://www.example.com
و https://open.my.app
.
احتیاط : اگر چندین فعالیت حاوی فیلترهای هدف هستند که به همان پیوند تأیید شده برنامه Android حل می شوند، هیچ تضمینی وجود ندارد که کدام فعالیت پیوند را مدیریت می کند.
هنگامی که فیلترهای هدف را با URI برای محتوای فعالیت به مانیفست برنامه خود اضافه کردید، Android میتواند هر Intent
که دارای URI منطبق است به برنامه شما در زمان اجرا هدایت کند.
برای کسب اطلاعات بیشتر درباره تعریف فیلترهای هدف، به «اجازه دادن به سایر برنامهها برای شروع فعالیت شما» مراجعه کنید.
خواندن داده ها از مقاصد ورودی
هنگامی که سیستم فعالیت شما را از طریق فیلتر قصد شروع می کند، می توانید از داده های ارائه شده توسط Intent
برای تعیین آنچه باید ارائه دهید استفاده کنید. متدهای getData()
و getAction()
را فراخوانی کنید تا داده ها و اقدامات مرتبط با Intent
ورودی را بازیابی کنید. میتوانید این روشها را در هر زمانی در طول چرخه حیات فعالیت فراخوانی کنید، اما معمولاً باید این روشها را در هنگام تماسهای اولیه مانند onCreate()
یا onStart
انجام دهید.
در اینجا یک قطعه وجود دارد که نحوه بازیابی داده ها از یک Intent
را نشان می دهد:
کاتلین
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.main)
val action: String? = intent?.action
val data: Uri? = intent?.data
}
جاوا
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Intent intent = getIntent();
String action = intent.getAction();
Uri data = intent.getData();
}
این بهترین شیوه ها را برای بهبود تجربه کاربر دنبال کنید:
- پیوند عمیق باید کاربران را مستقیماً بدون هیچ گونه درخواست، صفحات بینابینی یا لاگین به محتوا هدایت کند. اطمینان حاصل کنید که کاربران می توانند محتوای برنامه را ببینند حتی اگر قبلاً برنامه را باز نکرده باشند. اشکالی ندارد که کاربران را در مورد تعاملات بعدی یا زمانی که برنامه را از راهانداز باز میکنند، راهنمایی کنید.
- دستورالعمل طراحی شرح داده شده در Navigation with Back and Up را دنبال کنید تا برنامه شما با انتظارات کاربران برای پیمایش به عقب پس از ورود به برنامه شما از طریق پیوند عمیق مطابقت داشته باشد.
لینک های عمیق خود را تست کنید
میتوانید از پل اشکالزدایی Android با ابزار مدیریت فعالیت (am) استفاده کنید تا آزمایش کنید که URIهای فیلتر قصدی که برای پیوند عمیق مشخص کردهاید، به فعالیت برنامه صحیح پاسخ میدهند. می توانید دستور adb را بر روی یک دستگاه یا شبیه ساز اجرا کنید.
نحو کلی برای آزمایش URI فیلتر قصد با adb به این صورت است:
$ adb shell am start
-W -a android.intent.action.VIEW
-d <URI> <PACKAGE>
به عنوان مثال، دستور زیر سعی می کند یک فعالیت برنامه هدف را که با URI مشخص شده مرتبط است، مشاهده کند.
$ adb shell am start
-W -a android.intent.action.VIEW
-d "example://gizmos" com.example.android
توجه : هنگام تعریف مجموعهای از انواع اولیه در یک مسیر، مانند **@Serializable data class Product(val colors: List)**
، فرمت URL پیوند عمیق ایجاد شده به صورت خودکار **basePath?colors={value**}
است. اگر سعی می کنید یک URI با پارامترهای پرس و جوی متعدد (مثلاً **basepath?colors=red&colors=blue**
) مشخص کنید، باید از علامت علامت (به عنوان مثال **basepath?colors=red\&colors=blue**
) فرار کنید.
اعلامیه مانیفست و کنترلکننده قصدی که تنظیم کردهاید، ارتباط بین برنامه شما و یک وبسایت و آنچه را که باید با پیوندهای ورودی انجام دهید را مشخص میکند. با این حال، برای اینکه سیستم برنامه شما را بهعنوان کنترلکننده پیشفرض مجموعهای از URI ها در نظر بگیرد، باید از سیستم نیز درخواست کنید که این اتصال را تأیید کند. Verify App Links نحوه اجرای این راستیآزمایی را توضیح میدهد.
برای کسب اطلاعات بیشتر در مورد اهداف و پیوندهای برنامه، به منابع زیر مراجعه کنید:
- Intents و Intent Filters
- به برنامه های دیگر اجازه دهید تا فعالیت شما را شروع کنند
- پیوندهای برنامه Android را با Android Studio اضافه کنید