App Link: ما هو، مبدأ العمل والإعداد

المؤلف: IT Sectr نُشر: 2026-05-14 وقت القراءة: 9 دق

App Link هي آلية Android (Android 6.0+) تفتح تلقائياً روابط الويب في التطبيق المثبت، متجاوزة حوار الاختيار. قدمت Google المصطلح في 2015 مع Android 6.0 Marshmallow. وفقاً لـ Android Developers، يستخدم App Link Digital Asset Links — التحقق التشفيري من خلال ملف على الخادم، يؤكد أن المجال ملك لمطور التطبيق.

النقاط الرئيسية

  • App Link — رابط https يفتح التطبيق تلقائياً دون حوار اختيار
  • Digital Asset Links — ملف JSON assetlinks.json على الخادم يتحقق من ارتباط المجال بالتطبيق
  • بصمة SHA256 للشهادة — عنصر التحقق الرئيسي الذي يربط المطور بالمجال
  • Intent Filter — مكون Android يعلن عن الروابط التي يعالجها التطبيق
  • الأمان — App Link يلغي حوار «فتح في التطبيق أو المتصفح»، مما يزيد التحويل

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 كالمعتاد ولكن دون ميزة الانتقال التلقائي.

Digital Asset Links (assetlinks.json)

Asset Links هو ملف JSON يُوضع على الخادم على الرابط https://domain/.well-known/assetlinks.json. يحتوي الملف على مصفوفة كائنات مع حقول: relation (مصفوفة سلاسل تصف نوع العلاقة)، target (كائن مع namespace و package_name للتطبيق، بالإضافة إلى sha256_cert_fingerprints — مصفوفة بصمات SHA256 لشهادة التوقيع).

json
// 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 تُستخرج من الشهادة التي وُقع بها التطبيق. لإصدارات التصحيح يُستخدم شهادة تصحيح Android القياسية، للإصدارات النهائية — الشهادة من Google Play Console أو شهادتك الخاصة. مهم: عند تغيير شهادة التوقيع (مثلاً عند الانتقال إلى App Signing by Google Play)، يجب تحديث assetlinks.json على الخادم، وإلا سيتوقف App Link عن العمل.

Intent Filter والتحقق

Android يتحقق من App Link عند أول نقرة على رابط. يقوم النظام بتنزيل assetlinks.json من الخادم، ويقارن package_name وبصمة SHA256 مع شهادة التطبيق المثبت. إذا تطابقت البيانات، يضع علامة على Intent Filter كموثوق، وجميع الروابط اللاحقة لهذا المجال تفتح تلقائياً، دون حوار.

xml
// 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 كاحتياطي للإصدارات القديمة. Intent Filter مع autoVerify="true" لا يكسر التوافق العكسي — على Android < 6 يتم تجاهل السمة.

الخاصيةDeep LinkApp Link
النظاممخصص (myapp://)HTTPS (https://domain)
التحققلاassetlinks.json
حوار الاختياريُعرضإعادة توجيه تلقائي
إصدار AndroidAPI 1+API 23+ (6.0+)
فهرسة Googleلانعم (URL https)

إعداد App Link يتطلب ثلاث خطوات: تكوين Intent Filter في البيان، وضع assetlinks.json على الخادم، والتحقق من التحقق. الخطوة الأولى هي إضافة Intent Filter مع android:autoVerify="true" في AndroidManifest.xml. من المهم تحديد نظام https والمضيف والمسارات التي يجب أن يعالجها التطبيق. يمكن أن تحتوي المسارات على أحرف بدل (*) للمجلدات الفرعية.

الخطوة الثانية هي إنشاء assetlinks.json. يمكن إنشاء الملف من خلال Android Studio (Tools → App Links Assistant). يساعد المساعد أيضاً في التصحيح والاختبار. يُوضع الملف على الخادم في /.well-known/assetlinks.json. يجب أن يعيد الخادم Content-Type: application/json وأن يكون متاحاً عبر HTTPS بدون إعادة توجيه. يعرض Google Play Console أيضاً حالة التحقق من App Link في قسم Publishing.

  1. إضافة Intent Filter مع android:autoVerify="true" في AndroidManifest.xml
  2. الحصول على بصمة SHA256 للشهادة (keytool أو App Links Assistant)
  3. إنشاء assetlinks.json مع package_name و sha256_cert_fingerprints
  4. وضع الملف في /.well-known/assetlinks.json على خادم HTTPS
  5. التحقق من التحقق عبر adb: adb shell dumpsync domain_verification

الاختبار — الخطوة الثالثة. استخدم 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. هذا يبسط التنقل: يصف المطور أي شاشة تُفتح لرابط معين، ويقوم مكون Navigation بمعالجة Intent واستعادة مكدس التنقل بنفسه. توصي Google باستخدام Jetpack Navigation لـ App Link.

kotlin
// معالجة 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 على Android؟

App Link هو Deep Link مع تحقق عبر Digital Asset Links. الاختلافات الرئيسية: App Link يستخدم نظام https بدلاً من النظام المخصص، لا يعرض حوار اختيار، ويتم فهرسته بواسطة Google. Deep Link العادي يعمل على جميع إصدارات Android لكنه يتطلب اختياراً يدوياً للتطبيق.

أين يتم وضع assetlinks.json؟

الملف يُوضع في جذر خادم HTTPS في المسار /.well-known/assetlinks.json. يجب أن يعيد الخادم Content-Type: application/json. يجب تحديث الملف عند تغيير شهادة التوقيع أو إضافة مجالات جديدة.

لماذا لا يفتح App Link التطبيق تلقائياً؟

الأسباب الرئيسية: عدم وجود android:autoVerify="true" في Intent Filter، عدم توفر assetlinks.json عبر HTTPS، بصمة SHA256 غير صحيحة، شهادة توقيع مختلفة (debug vs release). تحقق من حالة التحقق عبر adb shell dumpsync domain_verification.

هل يمكن استخدام App Link بدون مجال خاص؟

لا — App Link يتطلب خادم HTTPS مع assetlinks.json متاح. إذا لم يكن لديك مجال، استخدم Firebase Hosting أو GitHub Pages لاستضافة الملف. البديل: Custom URL Scheme (بدون تحقق) أو Firebase Dynamic Links.

هل يعمل App Link على Android 5؟

لا — AppLink مدعوم على Android 6.0 (API 23) وما فوق. على Android 5، Intent Filter مع android:autoVerify="true" يتجاهل السمة ويعمل كـ Deep Link عادي مع حوار اختيار. يُنصح بدعم كلا الآليتين للتوافق العكسي.

الخلاصة

  • App Link — تطور Deep Link لـ Android: رابط https مع انتقال تلقائي إلى التطبيق
  • Digital Asset Links — التحقق التشفيري عبر assetlinks.json على الخادم
  • بصمة SHA256 لشهادة التوقيع — العنصر الرئيسي الذي يربط المطور بالمجال
  • android:autoVerify="true" — سمة Intent Filter إلزامية لتفعيل App Link
  • الأمان — App Link يمنع اعتراض الروابط بواسطة تطبيقات الطرف الثالث
  • Google Play Store يتحقق من App Link عند النشر ويرفض في حالة وجود أخطاء
  • Jetpack Navigation — الطريقة الموصى بها لمعالجة App Link مع روابط deep link تصريحية

سنقوم بتطوير تطبيق جوال جاهز

تقدم IT Sectr تطبيقات iOS وAndroid للشركات الناشئة والشركات منذ عام 2017. سوف نقدم لك النصح ونقترح أفضل حل.

مناقشة المشروع

اقرأ أيضًا