App Link مکانیزمی در Android (Android 6.0+) است که لینکهای وب را به طور خودکار در برنامه نصب شده باز میکند و گفتگوی انتخاب را حذف میکند. این اصطلاح توسط Google در سال 2015 همراه با Android 6.0 Marshmallow معرفی شد. به گفته Android Developers، App Link از Digital Asset Links استفاده میکند — تأیید رمزنگاری شده از طریق فایلی روی سرور که تأیید میکند دامنه متعلق به توسعهدهنده برنامه است.
نکات اصلی
App Link (Android App Link) — یک لینک استاندارد HTTPS است که هنگام کلیک روی دستگاه Android به طور خودکار برنامه نصب شده را بدون نمایش گفتگوی استاندارد انتخاب بین مرورگر و برنامه باز میکند. Google App Link را در Android 6.0 (API 23) به عنوان راه حلی برای مشکل «گفتگوی انتخاب» معرفی کرد که به دلیل کلیک اضافی و سردرگمی کاربر، نرخ تبدیل deep link را کاهش میداد.
نوآوری کلیدی: تأیید. Android بررسی میکند که آیا دامنه واقعاً متعلق به توسعهدهنده برنامه است یا خیر، از طریق Digital Asset Links API. Google Play Store هنگام انتشار App Link را بررسی میکند و در صورت ناموفق بودن تأیید، میتواند بهروزرسانی را رد کند. این باعث میشود App Link از Custom URL Scheme امنتر باشد: هیچ برنامه دیگری نمیتواند لینک دامنه شما را رهگیری کند.
Digital Asset Links — یک پروتکل باز است که Google نه تنها برای App Link، بلکه برای اتصال وبسایتها با برنامهها در نتایج جستجو، Google Assistant و Smart Lock for Passwords استفاده میکند. پروتکل مبتنی بر تأیید رمزنگاری شده است: در assetlinks.json اثر انگشت SHA256 گواهی امضای برنامه مشخص میشود که جعل را غیرممکن میکند.
فرآیند کار App Link از سه مرحله تشکیل شده است: تأیید Digital Asset Links، پردازش از طریق Intent Filter و انتقال خودکار. هر مرحله اجباری است. اگر تأیید ناموفق باشد، Android گفتگوی انتخاب را نشان میدهد — چنین deep link مانند معمولی کار میکند، اما بدون مزیت انتقال خودکار.
Asset Links — فایل JSON که روی سرور در آدرس https://domain/.well-known/assetlinks.json قرار میگیرد. فایل شامل آرایهای از اشیاء با فیلدهای زیر است: relation (آرایهای از رشتهها که نوع ارتباط را توصیف میکند)، target (شیء با namespace و package_name برنامه، و همچنین sha256_cert_fingerprints — آرایهای از اثر انگشت SHA256 گواهی امضا).
// assetlinks.json — حداقل پیکربندی App Link
[{
"relation": ["delegate_permission/common.handle_all_urls"],
"target": {
"namespace": "android_app",
"package_name": "com.example.app",
"sha256_cert_fingerprints": [
"14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:AD:A4:C5:AD:6B:01:14:79:6B:CB:12:6B:21:39:6F:EA"
]
}
}]
اثر انگشت SHA256 از گواهیای که برنامه با آن امضا شده است به دست میآید. برای ساخت debug از گواهی استاندارد debug Android استفاده میشود، برای release — گواهی از Google Play Console یا گواهی شخصی. مهم: هنگام تغییر گواهی امضا (مثلاً هنگام انتقال به App Signing by Google Play) باید assetlinks.json را روی سرور بهروزرسانی کنید، در غیر این صورت App Link کار نخواهد کرد.
Android App Link را در اولین کلیک روی لینک بررسی میکند. سیستم assetlinks.json را از سرور بارگیری میکند، package_name و اثر انگشت SHA256 را با گواهی برنامه نصب شده مقایسه میکند. اگر دادهها مطابقت داشته باشند، Android Intent Filter را به عنوان تأیید شده علامتگذاری میکند و تمام لینکهای بعدی به این دامنه به طور خودکار و بدون گفتگو باز میشوند.
// AndroidManifest.xml — Intent Filter برای App Link
<activity
android:name=".ui.ProductActivity"
android:exported="true">
<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.com"
android:pathPrefix="/product" />
</intent-filter>
</activity>
autoVerify="true" — ویژگی اجباری که به Android دستور میدهد assetlinks.json را بررسی کند. بدون این ویژگی، Intent Filter تأیید نخواهد شد و App Link فعال نخواهد شد. Android از چند Intent Filter در یک Activity — برای هاستهای مختلف پشتیبانی میکند. سیستم هر هاست را جداگانه بررسی میکند. تأیید به صورت ناهمزمان انجام میشود و ممکن است در اولین انتقال تا 20 ثانیه طول بکشد.
پس از تأیید موفق، Android به طور خودکار برنامه را هنگام کلیک روی هر لینکی که با Intent Filter تأیید شده مطابقت دارد باز میکند. کاربر گفتگوی انتخاب را نمیبیند — برنامه فوراً باز میشود. اگر برنامه نصب نشده باشد، لینک در مرورگر (مانند یک صفحه وب معمولی) باز میشود. این تجربه کاربری ایدهآل است: انتقال یکپارچه بدون اقدامات اضافی.
مهم: انتقال خودکار فقط برای طرح HTTPS کار میکند. App Link از HTTP (پروتکل ناامن) پشتیبانی نمیکند. اگر کاربر به صورت دستی یک لینک HTTP را باز کند (مثلاً از SMS)، Android تأیید را انجام نمیدهد و گفتگوی انتخاب را نشان میدهد. توصیه میشود برای تمام لینکهایی که به برنامه منتهی میشوند از HTTPS استفاده کنید و انتقال HTTP → HTTPS را روی سرور تنظیم کنید.
App Link تکامل Deep Link در Android است، نه جایگزین آن. تفاوت بین آنها اساسی است. Deep Link معمولی (Custom URL Scheme) از طریق Intent Filter با طرح سفارشی (myapp://) و بدون autoVerify کار میکند. Android بررسی نمیکند که آیا برنامه واقعاً با این طرح مرتبط است — هر برنامهای میتواند myapp:// را ثبت کرده و لینکها را رهگیری کند.
App Link سه مشکل Deep Link را حل میکند. اول: امنیت — تأیید از طریق Digital Asset Links رهگیری لینکها را غیرممکن میکند. دوم: تجربه کاربری — عدم وجود گفتگوی انتخاب، نرخ تبدیل به اقدام هدف را 20–40% افزایش میدهد. سوم: نمایهسازی — Google لینکهای HTTPS App Link را نمایهسازی میکند و میتواند آنها را در نتایج جستجو به عنوان لینک به محتوای داخل برنامه نشان دهد.
سازگاری: App Link در Android 6.0+ (99% دستگاهها) کار میکند. برای Android 5.x (Lollipop) از Deep Link معمولی با گفتگوی انتخاب استفاده میشود. بنابراین توصیه میشود هر دو مکانیزم را پشتیبانی کنید: App Link برای دستگاههای مدرن و Custom URL Scheme به عنوان fallback برای نسخههای قدیمی. Intent Filter با autoVerify="true" سازگاری معکوس را خراب نمیکند — در Android < 6 ویژگی نادیده گرفته میشود.
| ویژگی | Deep Link | App Link |
|---|---|---|
| طرح | سفارشی (myapp://) | HTTPS (https://domain) |
| تأیید | خیر | assetlinks.json |
| گفتگوی انتخاب | نمایش داده میشود | انتقال خودکار |
| نسخه Android | API 1+ | API 23+ (6.0+) |
| نمایهسازی Google | خیر | بله (URL HTTPS) |
تنظیم App Link به سه مرحله نیاز دارد: پیکربندی Intent Filter در مانیفست، قرار دادن assetlinks.json روی سرور و بررسی تأیید. مرحله اول — افزودن Intent Filter با android:autoVerify="true" در AndroidManifest.xml. مهم است که طرح HTTPS، هاست و مسیرهایی که برنامه باید پردازش کند مشخص شود. مسیرها میتوانند حاوی wildcard (*) برای زیرپوشهها باشند.
مرحله دوم — ایجاد assetlinks.json. فایل را میتوان از طریق Android Studio (Tools → App Links Assistant) تولید کرد. دستیار همچنین به اشکالزدایی و آزمایش کمک میکند. فایل در سرور در مسیر /.well-known/assetlinks.json قرار میگیرد. سرور باید Content-Type: application/json را برگرداند و از طریق HTTPS بدون ریدایرکت در دسترس باشد. Google Play Console نیز وضعیت تأیید App Link را در بخش Publishing نشان میدهد.
آزمایش — مرحله سوم. برای بررسی از adb استفاده کنید: دستور adb shell am start -W -a android.intent.action.VIEW -d "https://example.com/product/42" برنامه را باز میکند. اگر به جای برنامه مرورگر باز شد — assetlinks.json و autoVerify را بررسی کنید. Android Studio App Links Assistant شامل یک تستر داخلی است: وضعیت تأیید را برای هر دامنه و مسیر نشان میدهد. برای آزمایش خودکار از Android Testing Library با Intent Matcher استفاده کنید.
Android 12 (API 31) تغییراتی در پردازش App Link ایجاد کرد. تأیید جدید مخصوص دامنه اضافه شده است: سیستم هر لینک را جداگانه بررسی میکند، نه کل Intent Filter را. این امنیت را افزایش میدهد، اما هنگام افزودن مسیرهای جدید نیاز به بهروزرسانی فایل assetlinks.json دارد. Android 12 همچنین Android App Links Assistant را در کنار ADB معرفی کرد — دستوراتی برای مدیریت تأیید از طریق shell.
چند دامنه — سناریوی معمول برای تولید. برنامه میتواند لینکهای example.com، m.example.com و example.org را پردازش کند. برای هر دامنه یک assetlinks.json جداگانه روی سرور مربوطه نیاز است. در مانیفست چند Intent Filter اضافه میشود — یکی برای هر دامنه. همه دامنهها باید از طریق HTTPS در دسترس باشند و به طور مستقل تأیید شوند.
App Link و Jetpack Navigation — روش توصیه شده برای پردازش App Link در برنامههای مدرن Android. Jetpack Navigation از deep linkهای اعلامی در nav_graph.xml یا از طریق NavDeepLinkRequest پشتیبانی میکند. این کار ناوبری را ساده میکند: توسعهدهنده توضیح میدهد که کدام صفحه با یک URL خاص باز میشود و کامپوننت Navigation خود Intent را پردازش کرده و پشته ناوبری را بازیابی میکند. Google استفاده از Jetpack Navigation را برای App Link توصیه میکند.
// پردازش App Link از طریق Jetpack Navigation
class MainActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
handleDeepLink(intent)
}
override fun onNewIntent(intent: Intent) {
super.onNewIntent(intent)
handleDeepLink(intent)
}
private fun handleDeepLink(intent: Intent) {
intent.data?.let { uri ->
navController.handleDeepLink(NavDeepLinkRequest
.Builder
.fromUri(uri)
.build()
)
}
}
}
Google Play Store هنگام انتشار App Link را بررسی میکند. اگر در مانیفست Intent Filter با autoVerify مشخص شده باشد، اما assetlinks.json در دسترس نباشد یا نادرست باشد، Google Play میتواند بهروزرسانی را با هشدار رد کند. در کنسول توسعهدهنده (Policy and Programs → App Links) وضعیت تأیید هر دامنه نمایش داده میشود. قبل از انتشار حتماً وضعیت را بررسی کنید — رفع مشکل پس از رد بهروزرسانی انتشار را به تأخیر میاندازد.
سوالات متداول
App Link — Deep Link با تأیید از طریق Digital Asset Links است. تفاوتهای اصلی: App Link از طرح HTTPS به جای طرح سفارشی استفاده میکند، گفتگوی انتخاب را نشان نمیدهد و توسط Google نمایهسازی میشود. Deep Link معمولی در همه نسخههای Android کار میکند، اما نیاز به انتخاب دستی برنامه دارد.
فایل در ریشه سرور HTTPS در مسیر /.well-known/assetlinks.json قرار میگیرد. سرور باید Content-Type: application/json را برگرداند. فایل باید هنگام تغییر گواهی امضا یا افزودن دامنههای جدید بهروزرسانی شود.
دلایل اصلی: عدم وجود android:autoVerify="true" در Intent Filter، عدم دسترسی assetlinks.json از طریق HTTPS، اثر انگشت SHA256 نادرست، گواهی امضای متفاوت (debug در مقابل release). وضعیت تأیید را از طریق adb shell dumpsync domain_verification بررسی کنید.
خیر — App Link به سرور HTTPS با assetlinks.json در دسترس نیاز دارد. اگر دامنه ندارید، از Firebase Hosting یا GitHub Pages برای میزبانی فایل استفاده کنید. جایگزین: Custom URL Scheme (بدون تأیید) یا Firebase Dynamic Links.
خیر — App Link در Android 6.0 (API 23) و بالاتر پشتیبانی میشود. در Android 5 Intent Filter با android:autoVerify="true" ویژگی را نادیده میگیرد و به عنوان Deep Link معمولی با گفتگوی انتخاب کار میکند. برای سازگاری معکوس توصیه میشود هر دو مکانیزم را پشتیبانی کنید.
خلاصه
ما یک اپلیکیشن موبایل به صورت کلید در دست توسعه خواهیم داد
IT Sectr از سال 2017 برنامههای iOS و Android را برای استارتاپها و کسبوکارها ایجاد میکند. ما به شما مشاوره میدهیم و بهترین راهحل را پیشنهاد خواهیم کرد.
همچنین بخوانید