برای پشتیبانی از App Links، باید یک فایل JSON از نوع Digital Asset Links با نام assetlinks.json ایجاد کنید و آن را در یک مکان شناختهشده در وبسایت خود منتشر کنید. این فایل بهطور عمومی اعلام میکند که کدام برنامهها مجاز به مدیریت لینکها برای دامنه شما هستند و دستگاههای اندروید این فایل را از سرور شما بازیابی میکنند تا لینکهای عمیق شما را تأیید کنند.
 برای پیوندهای پویای برنامه در اندروید ۱۵+، فایل assetlinks.json همچنین جایی است که شما پیکربندی قوانین پویای خود، مانند تطبیقدهندههای الگو برای پارامترهای مسیر، قطعه و پرسوجو را تعریف میکنید . دستگاههای اندرویدی که اندروید ۱۵ (سطح API ۳۵) یا بالاتر را اجرا میکنند و سرویسهای گوگل را نصب کردهاند، به صورت دورهای این فایل را بازیابی کرده و پیکربندی پویای شما را با پیکربندی استاتیک در مانیفست برنامه ادغام میکنند.
 این راهنما نحوهی آمادهسازی فایل assetlinks.json و انتشار آن در وبسایت شما را شرح میدهد. در صورت تمایل، میتوانید فایل assetlinks.json را از ابزار Play Deep Links یا Android Studio App Links Assistant ایجاد کنید. برای اطلاعات بیشتر، به ابزارهای توسعهدهندهی App Links مراجعه کنید.
انجمنهای وبسایت را اعلام کنید
شما باید یک فایل JSON با عنوان Digital Asset Links در وبسایت خود منتشر کنید تا برنامههای اندروید مرتبط با وبسایت را مشخص کرده و اهداف URL برنامه را تأیید کنید. فایل JSON از فیلدهای زیر برای شناسایی برنامههای مرتبط استفاده میکند:
-  package_name: شناسه برنامه که در فایلbuild.gradleبرنامه تعریف شده است.
-  sha256_cert_fingerprints: اثر انگشتهای SHA256 گواهی امضای برنامه شما. میتوانید از دستور زیر برای تولید اثر انگشت با استفاده از ابزار کلید جاوا استفاده کنید:
 keytool -list -v -keystore my-release-key.keystore
-  این فیلد از چندین اثر انگشت پشتیبانی میکند که میتوانند برای پشتیبانی از نسخههای مختلف برنامه شما، مانند اشکالزدایی و ساختهای تولید، استفاده شوند. اگر از امضای برنامه Play برای برنامه خود استفاده میکنید، اثر انگشت گواهی تولید شده با اجرای keytoolبه صورت محلی معمولاً با اثر انگشت موجود در دستگاههای کاربران مطابقت نخواهد داشت. میتوانید تأیید کنید که آیا از امضای برنامه Play برای برنامه خود در حساب توسعهدهنده Play Console خود در قسمتRelease > Setup > App signingاستفاده میکنید یا خیر؛ اگر این کار را انجام دهید، قطعه JSON پیوندهای دارایی دیجیتال صحیح را برای برنامه خود نیز در همان صفحه خواهید یافت.
 فایل assetlinks.json مثال زیر، حق باز کردن لینک را به یک برنامه اندروید com.example اعطا میکند:
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
یک وبسایت را با چندین برنامه مرتبط کنید
 یک وبسایت میتواند ارتباط با چندین برنامه را در یک فایل assetlinks.json اعلام کند. فهرست فایلهای زیر نمونهای از یک فایل دستوری را نشان میدهد که ارتباط با دو برنامه را به طور جداگانه اعلام میکند و در آدرس https://www.example.com/.well-known/assetlinks.json قرار دارد:
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.puppies.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
  },
  {
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.monkeys.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
 برنامههای مختلف ممکن است لینکها را برای منابع مختلف تحت یک میزبان وب مدیریت کنند. برای مثال، app1 ممکن است یک فیلتر intent برای https://example.com/articles و app2 ممکن است یک فیلتر intent برای https://example.com/videos اعلام کند.
مرتبط کردن چندین وبسایت با یک برنامه واحد
 چندین وبسایت میتوانند ارتباط خود را با یک برنامهی یکسان در فایلهای assetlinks.json مربوطه اعلام کنند. فهرست فایلهای زیر مثالی از نحوهی اعلام ارتباط example.com و example.net با app1 را نشان میدهد. فهرست اول ارتباط example.com با app1 را نشان میدهد:
https://www.example.com/.well-known/assetlinks.json
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
 لیست بعدی ارتباط example.net با app1 را نشان میدهد. فقط مکانی که این فایلها میزبانی میشوند متفاوت است ( com و net ):
https://www.example.net/.well-known/assetlinks.json
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
پیکربندی قوانین پویا
 پیوندهای پویای برنامه در اندروید ۱۵+ به شما امکان میدهد از قوانین تطبیق پیوند عمیق سمت سرور استفاده کنید که با قوانینی که به صورت ایستا در مانیفست برنامه خود تعریف کردهاید، کار میکنند. فایل assetlinks.json شما جایی است که قوانین پویا را تعریف میکنید. گنجاندن این مورد اختیاری است.
 دستگاههای اندروید که اندروید ۱۵ (سطح API 35) یا بالاتر را اجرا میکنند و سرویسهای گوگل را نصب دارند، به صورت دورهای این فایل را از سرور شما بازیابی کرده و پیکربندی قوانین پویای شما را با پیکربندی استاتیک در مانیفست برنامه ادغام میکنند. در زیر مثالی از یک فایل assetlinks.json با قوانین پویا آمده است:
[
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.app",
      "sha256_cert_fingerprints": [...]
    },
    "relation_extensions": {
      "delegate_permission/common.handle_all_urls": {
        "dynamic_app_link_components": [
          {"?": {"dl": "*"}},
          {"#": "app"},
          {"/": "/products/*"},
          {"/": "/shoes", "?": {"in_app": "true"}},
          {"/": "*", "exclude": true}
        ]
      }
    }
  }
]
نکات کلیدی در مورد کد
-  پیوندهای پویای برنامه یک افزونهی جدید برای پیوندهای داراییهای دیجیتال به نام dynamic_app_link_componentsاضافه میکند که در آن میتوانید قوانین پویای خود را پیکربندی کنید.
- قوانین پویا میتوانند شامل تطبیقدهندههای الگو برای پارامترهای مسیر، قطعه و پرسوجو باشند.
- همچنین میتوانید هر تطبیقدهندهی الگو را به عنوان مستثنی علامتگذاری کنید، تا URLهای منطبق، برنامهی شما را باز نکنند.
-  این مثال نمونههایی از تطبیقدهندهها برای مسیر ( "/") ، قطعه ("#") و پارامترهای پرسوجو ("?") و همچنین تطبیقدهندههای حذفشده ("exclude") را نشان میدهد.
- اگر هر یک از فیلدهای موجود در فایل ناقص یا خالی باشند، اندروید قوانین پویا را نادیده میگیرد و دستگاه به قوانینی که به صورت ایستا در مانیفست برنامه تعریف شدهاند، برمیگردد.
قوانین پویا فقط میتوانند قوانینی را مشخص کنند که در محدوده دامنههایی که در فایل مانیفست برنامه خود اعلام میکنید، اعمال میشوند. به زیر مراجعه کنید.
اعلام قوانین پویا
 پیوندهای پویای برنامه از یک افزونهی رابطهی جدید dynamic_app_link_components پشتیبانی میکند که آرایهای از اشیاء قوانین را در خود جای میدهد. هر قانون با استفاده از تطبیقدهندههای الگو برای مسیرها، قطعات و پارامترهای پرسوجو که برنامهی شما را باز میکنند، تعریف میشود. تطبیقدهندهها همچنین میتوانند به صورت جداگانه حذف شوند تا برنامهی شما را باز نکنند. همه اینها اختیاری هستند.
-  تطبیق مسیر- کلید: "/"
- مقدار: یک رشته، عبارت منطبق با مسیر URL
 
-  تطبیق قطعه- کلید: "#"
- مقدار: یک رشته، عبارت منطبق با قطعه URL
 
-  تطبیق پارامتر پرس و جو- کلید: "؟"
- مقدار: دیکشنری برای تطبیق جفتهای کلید/مقدار در پارامترهای کوئری URL.
-  برای مثال، دیکشنری {" ?", {"dl": "*", "in_app":"true"} با رشتهی جستجوی "?in_app=true&dl=abc" مطابقت خواهد داشت.
- ترتیب جفتهای کلید/مقدار در دیکشنری نیازی به مطابقت با ترتیب جفتها در رشته پرسوجو ندارد. علاوه بر این، دیکشنری نیازی به مطابقت با تمام جفتهای کلید/مقدار در رشته پرسوجو ندارد، اما باید برای هر ورودی دیکشنری یک تطابق پیدا شود.
-  برای مثال، دیکشنری با رشتهی جستجوی " ?lang=en&in_app=true&tz=pst&dl=abc" نیز مطابقت دارد، اما با رشتهی جستجوی "?lang=en&tz=pst&dl=abc" مطابقت ندارد.
 
-  مستثنی شده- کلید: "استثنا"
-  مقدار: مقدار صحیح/غلط اختیاری برای هر قانون تعریف شده در dynamic_app_link_components(به مثال مراجعه کنید).
 
میتوانید از این کاراکترهای ویژه در تطبیقدهندههای الگو استفاده کنید:
- «*» با صفر یا چند کاراکتر تا زمانی که کاراکتر بعد از کاراکتر جایگزین در الگو در رشته منطبق پیدا شود، مطابقت دارد.
- «؟» با هر کاراکتر واحدی مطابقت دارد.
- "?*" با یک یا چند کاراکتر مطابقت دارد.
هیچ محدودیت کاراکتری دیگری برای مقادیر وجود ندارد.
قوانین پویا را مرتب کنید
ترتیب اعلام قوانین مهم است. اندروید هر قانون را به ترتیب ارزیابی میکند تا زمانی که یک مورد منطبق پیدا کند.
مثال زیر نشان میدهد که چگونه ترتیب میتواند بر نحوهی مدیریت تأثیر بگذارد. قانون اول با تمام مسیرها مطابقت دارد ("*") اما موارد منطبق را حذف میکند (exclude: true)، به این معنی که تمام URLها را از باز شدن برنامه مستثنی میکند. در این حالت، قانون دوم که "/path1" را مجاز میداند، هرگز ارزیابی نخواهد شد.
dynamic_app_link_components: [
  {"/": "*", "exclude": true},
  {"/": "/path1"}
]
با این حال، در مثال بعدی، قانون "/path1" ابتدا تعریف شده است، بنابراین ابتدا ارزیابی میشود و برنامه را برای URL منطبق با "/path1" باز میکند. قانون دوم، که همه URL ها را از باز شدن برنامه مستثنی میکند، در مرحله دوم ارزیابی خواهد شد، اما تنها در صورتی که قانون اول مطابقت نداشته باشد.
dynamic_app_link_components: [
  {"/": "/path1"},
  {"/": "*", "exclude": true}
]
اگر هیچ تطابقی در لیست اجزای اعلام شده پیدا نشود، URL برنامه را باز نمیکند. در مثال زیر، هیچ یک از مسیرها با "/path3" مطابقت ندارند، بنابراین دستگاه این مسیر را به عنوان مسیر حذف شده در نظر میگیرد.
dynamic_app_link_components: [
  {"/": "/path1"},
  {"/": "/path2"}
]
 این رفتار در صورتی مهم است که بخواهید dynamic_app_link_components فقط بخشهای خاصی از URL را حذف کند و به سایر قسمتها اجازه دسترسی بدهد. در مثال زیر، حذف قانون نهایی برای مجاز کردن تمام مسیرهای باقیمانده به این معنی است که تمام URLها از برنامه حذف میشوند.
dynamic_app_link_components: [
  {"/": "/path1", "exclude": true},
  {"/": "*"}
]
قوانین پویای خود را به درستی تعریف کنید
هنگام تعریف قوانین سمت سرور برای استفاده با Dynamic App Links در اندروید ۱۵ و بالاتر، مهم است که آنها را به طور مناسب تعریف کنید، به طوری که با فیلترهای intent استاتیک اعلام شده در مانیفست برنامه شما کار کنند و آنها را تکمیل کنند.
 قوانین پویا که در فایل assetlinks.json تعریف میشوند، فقط میتوانند قوانینی را برای میزبانهایی که در فایل AndroidManifest.xml برنامه خود تعریف کردهاید، مشخص کنند. قوانین پویا نمیتوانند دامنه قوانین URL را که به صورت ایستا در مانیفست برنامه خود تعریف میکنید، گسترش دهند .
به همین دلیل، توصیه میکنیم از این رویکرد در قوانین پویا و ایستا خود استفاده کنید:
- در مانیفست برنامه خود، قوانینی با گستردهترین دامنه ممکن تنظیم کنید، مثلاً فقط طرح و دامنه را تعریف کنید.
- برای اصلاحات بیشتر، مانند مسیریابی در سطح مسیر، به قوانین پویای سمت سرور تکیه کنید.
با این پیکربندی ایدهآل، شما قادر خواهید بود در صورت نیاز، مسیرهای جدید App Links را به صورت پویا در فایل assetlinks.json اضافه کنید، با این آگاهی که آنها در محدوده وسیعی که در مانیفست برنامه تعیین کردهاید، قرار خواهند گرفت.
فقط یک بار dynamic_app_link_components را تعریف کنید
برای مدیریت صحیح قوانین خود، فقط یک شیء dynamic_app_link_components را در بین دستورات مربوط به یک سایت، رابطه و برنامه مشخص تعریف کنید.
- به دنبال چندین دستور برای یک سایت، رابطه و برنامه بگردید که یک شیء dynamic_app_link_components را تعریف میکنند.
- به دنبال چندین شیء dynamic_app_link_components باشید که در یک دستور واحد تعریف شدهاند.
در مواردی مانند این، اندروید تضمین نمیکند که از کدام پیکربندی قوانین پویا استفاده خواهد شد.
سازگاری پویای قوانین با پیکربندیهای قبلی App Links
اگر از قبل از App Links پشتیبانی میکنید، میتوانید مستقیماً در فایل assetlinks.json موجود خود، پشتیبانی از Dynamic App Links را اضافه کنید. فیلدهای رابطه برای تأیید App Links شما ثابت میمانند و میتوانید فیلدهای افزونه رابطه جدید را برای قوانین پویا بدون هیچ تغییر دیگری اضافه کنید.
دستگاههای اندرویدی که اندروید ۱۴ (سطح API ۳۴ یا قبلتر) را اجرا میکنند، فیلدهای جدید افزونه رابطه را برای قوانین پویا نادیده میگیرند، در حالی که دستگاههایی که اندروید ۱۵ و بالاتر را اجرا میکنند، این قوانین را با قوانین تعریفشده در مانیفست شما ادغام میکنند.
فایل تأیید JSON را منتشر کنید
شما باید فایل تأیید JSON خود را در مکان زیر منتشر کنید:
 https://domain.name/.well-known/assetlinks.json
از موارد زیر مطمئن شوید:
-  فایل assetlinks.jsonبا نوع محتوایapplication/jsonارائه میشود.
-  فایل assetlinks.jsonباید از طریق اتصال HTTPS قابل دسترسی باشد، صرف نظر از اینکه فیلترهای intent برنامه شما HTTPS را به عنوان طرح داده اعلام کرده باشند یا خیر.
-  فایل assetlinks.jsonباید بدون هیچ گونه ریدایرکتی (بدون ریدایرکت 301 یا 302) قابل دسترسی باشد.
-  اگر لینکهای برنامه شما از چندین دامنه میزبان پشتیبانی میکنند، باید فایل assetlinks.jsonرا در هر دامنه منتشر کنید. برای پشتیبانی از لینکدهی برنامه برای چندین میزبان، به بخش «پشتیبانی از لینکدهی برنامه برای چندین میزبان» مراجعه کنید.
- برنامه خود را با URL های آزمایشی در فایل مانیفست که ممکن است برای عموم قابل دسترسی نباشند (مانند هر URL که فقط با VPN قابل دسترسی است) منتشر نکنید. یک راه حل در چنین مواردی پیکربندی نسخههای ساخت برای تولید یک فایل مانیفست متفاوت برای نسخههای توسعه است.
به راهنماهای مرتبط زیر مراجعه کنید:
، برای پشتیبانی از App Links، باید یک فایل JSON از نوع Digital Asset Links با نام assetlinks.json ایجاد کنید و آن را در یک مکان شناختهشده در وبسایت خود منتشر کنید. این فایل بهطور عمومی اعلام میکند که کدام برنامهها مجاز به مدیریت لینکها برای دامنه شما هستند و دستگاههای اندروید این فایل را از سرور شما بازیابی میکنند تا لینکهای عمیق شما را تأیید کنند.
 برای پیوندهای پویای برنامه در اندروید ۱۵+، فایل assetlinks.json همچنین جایی است که شما پیکربندی قوانین پویای خود، مانند تطبیقدهندههای الگو برای پارامترهای مسیر، قطعه و پرسوجو را تعریف میکنید . دستگاههای اندرویدی که اندروید ۱۵ (سطح API ۳۵) یا بالاتر را اجرا میکنند و سرویسهای گوگل را نصب کردهاند، به صورت دورهای این فایل را بازیابی کرده و پیکربندی پویای شما را با پیکربندی استاتیک در مانیفست برنامه ادغام میکنند.
 این راهنما نحوهی آمادهسازی فایل assetlinks.json و انتشار آن در وبسایت شما را شرح میدهد. در صورت تمایل، میتوانید فایل assetlinks.json را از ابزار Play Deep Links یا Android Studio App Links Assistant ایجاد کنید. برای اطلاعات بیشتر، به ابزارهای توسعهدهندهی App Links مراجعه کنید.
انجمنهای وبسایت را اعلام کنید
شما باید یک فایل JSON با عنوان Digital Asset Links در وبسایت خود منتشر کنید تا برنامههای اندروید مرتبط با وبسایت را مشخص کرده و اهداف URL برنامه را تأیید کنید. فایل JSON از فیلدهای زیر برای شناسایی برنامههای مرتبط استفاده میکند:
-  package_name: شناسه برنامه که در فایلbuild.gradleبرنامه تعریف شده است.
-  sha256_cert_fingerprints: اثر انگشتهای SHA256 گواهی امضای برنامه شما. میتوانید از دستور زیر برای تولید اثر انگشت با استفاده از ابزار کلید جاوا استفاده کنید:
 keytool -list -v -keystore my-release-key.keystore
-  این فیلد از چندین اثر انگشت پشتیبانی میکند که میتوانند برای پشتیبانی از نسخههای مختلف برنامه شما، مانند اشکالزدایی و ساختهای تولید، استفاده شوند. اگر از امضای برنامه Play برای برنامه خود استفاده میکنید، اثر انگشت گواهی تولید شده با اجرای keytoolبه صورت محلی معمولاً با اثر انگشت موجود در دستگاههای کاربران مطابقت نخواهد داشت. میتوانید تأیید کنید که آیا از امضای برنامه Play برای برنامه خود در حساب توسعهدهنده Play Console خود در قسمتRelease > Setup > App signingاستفاده میکنید یا خیر؛ اگر این کار را انجام دهید، قطعه JSON پیوندهای دارایی دیجیتال صحیح را برای برنامه خود نیز در همان صفحه خواهید یافت.
 فایل assetlinks.json مثال زیر، حق باز کردن لینک را به یک برنامه اندروید com.example اعطا میکند:
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
یک وبسایت را با چندین برنامه مرتبط کنید
 یک وبسایت میتواند ارتباط با چندین برنامه را در یک فایل assetlinks.json اعلام کند. فهرست فایلهای زیر نمونهای از یک فایل دستوری را نشان میدهد که ارتباط با دو برنامه را به طور جداگانه اعلام میکند و در آدرس https://www.example.com/.well-known/assetlinks.json قرار دارد:
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.puppies.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
  },
  {
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.example.monkeys.app",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
 برنامههای مختلف ممکن است لینکها را برای منابع مختلف تحت یک میزبان وب مدیریت کنند. برای مثال، app1 ممکن است یک فیلتر intent برای https://example.com/articles و app2 ممکن است یک فیلتر intent برای https://example.com/videos اعلام کند.
مرتبط کردن چندین وبسایت با یک برنامه واحد
 چندین وبسایت میتوانند ارتباط خود را با یک برنامهی یکسان در فایلهای assetlinks.json مربوطه اعلام کنند. فهرست فایلهای زیر مثالی از نحوهی اعلام ارتباط example.com و example.net با app1 را نشان میدهد. فهرست اول ارتباط example.com با app1 را نشان میدهد:
https://www.example.com/.well-known/assetlinks.json
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
 لیست بعدی ارتباط example.net با app1 را نشان میدهد. فقط مکانی که این فایلها میزبانی میشوند متفاوت است ( com و net ):
https://www.example.net/.well-known/assetlinks.json
[{
  "relation": ["delegate_permission/common.handle_all_urls"],
  "target": {
    "namespace": "android_app",
    "package_name": "com.mycompany.app1",
    "sha256_cert_fingerprints":
    ["14:6D:E9:83:C5:73:06:50:D8:EE:B9:95:2F:34:FC:64:16:A0:83:42:E6:1D:BE:A8:8A:04:96:B2:3F:CF:44:E5"]
  }
}]
پیکربندی قوانین پویا
 پیوندهای پویای برنامه در اندروید ۱۵+ به شما امکان میدهد از قوانین تطبیق پیوند عمیق سمت سرور استفاده کنید که با قوانینی که به صورت ایستا در مانیفست برنامه خود تعریف کردهاید، کار میکنند. فایل assetlinks.json شما جایی است که قوانین پویا را تعریف میکنید. گنجاندن این مورد اختیاری است.
 دستگاههای اندروید که اندروید ۱۵ (سطح API 35) یا بالاتر را اجرا میکنند و سرویسهای گوگل را نصب دارند، به صورت دورهای این فایل را از سرور شما بازیابی کرده و پیکربندی قوانین پویای شما را با پیکربندی استاتیک در مانیفست برنامه ادغام میکنند. در زیر مثالی از یک فایل assetlinks.json با قوانین پویا آمده است:
[
  {
    "relation": [
      "delegate_permission/common.handle_all_urls"
    ],
    "target": {
      "namespace": "android_app",
      "package_name": "com.example.app",
      "sha256_cert_fingerprints": [...]
    },
    "relation_extensions": {
      "delegate_permission/common.handle_all_urls": {
        "dynamic_app_link_components": [
          {"?": {"dl": "*"}},
          {"#": "app"},
          {"/": "/products/*"},
          {"/": "/shoes", "?": {"in_app": "true"}},
          {"/": "*", "exclude": true}
        ]
      }
    }
  }
]
نکات کلیدی در مورد کد
-  پیوندهای پویای برنامه یک افزونهی جدید برای پیوندهای داراییهای دیجیتال به نام dynamic_app_link_componentsاضافه میکند که در آن میتوانید قوانین پویای خود را پیکربندی کنید.
- قوانین پویا میتوانند شامل تطبیقدهندههای الگو برای پارامترهای مسیر، قطعه و پرسوجو باشند.
- همچنین میتوانید هر تطبیقدهندهی الگو را به عنوان مستثنی علامتگذاری کنید، تا URLهای منطبق، برنامهی شما را باز نکنند.
-  این مثال نمونههایی از تطبیقدهندهها برای مسیر ( "/") ، قطعه ("#") و پارامترهای پرسوجو ("?") و همچنین تطبیقدهندههای حذفشده ("exclude") را نشان میدهد.
- اگر هر یک از فیلدهای موجود در فایل ناقص یا خالی باشند، اندروید قوانین پویا را نادیده میگیرد و دستگاه به قوانینی که به صورت ایستا در مانیفست برنامه تعریف شدهاند، برمیگردد.
قوانین پویا فقط میتوانند قوانینی را مشخص کنند که در محدوده دامنههایی که در فایل مانیفست برنامه خود اعلام میکنید، اعمال میشوند. به زیر مراجعه کنید.
اعلام قوانین پویا
 پیوندهای پویای برنامه از یک افزونهی رابطهی جدید dynamic_app_link_components پشتیبانی میکند که آرایهای از اشیاء قوانین را در خود جای میدهد. هر قانون با استفاده از تطبیقدهندههای الگو برای مسیرها، قطعات و پارامترهای پرسوجو که برنامهی شما را باز میکنند، تعریف میشود. تطبیقدهندهها همچنین میتوانند به صورت جداگانه حذف شوند تا برنامهی شما را باز نکنند. همه اینها اختیاری هستند.
-  تطبیق مسیر- کلید: "/"
- مقدار: یک رشته، عبارت منطبق با مسیر URL
 
-  تطبیق قطعه- کلید: "#"
- مقدار: یک رشته، عبارت منطبق با قطعه URL
 
-  تطبیق پارامتر پرس و جو- کلید: "؟"
- مقدار: دیکشنری برای تطبیق جفتهای کلید/مقدار در پارامترهای کوئری URL.
-  برای مثال، دیکشنری {" ?", {"dl": "*", "in_app":"true"} با رشتهی جستجوی "?in_app=true&dl=abc" مطابقت خواهد داشت.
- ترتیب جفتهای کلید/مقدار در دیکشنری نیازی به مطابقت با ترتیب جفتها در رشته پرسوجو ندارد. علاوه بر این، دیکشنری نیازی به مطابقت با تمام جفتهای کلید/مقدار در رشته پرسوجو ندارد، اما باید برای هر ورودی دیکشنری یک تطابق پیدا شود.
-  برای مثال، دیکشنری با رشتهی جستجوی " ?lang=en&in_app=true&tz=pst&dl=abc" نیز مطابقت دارد، اما با رشتهی جستجوی "?lang=en&tz=pst&dl=abc" مطابقت ندارد.
 
-  مستثنی شده- کلید: "استثنا"
-  مقدار: مقدار صحیح/غلط اختیاری برای هر قانون تعریف شده در dynamic_app_link_components(به مثال مراجعه کنید).
 
میتوانید از این کاراکترهای ویژه در تطبیقدهندههای الگو استفاده کنید:
- «*» با صفر یا چند کاراکتر تا زمانی که کاراکتر بعد از کاراکتر جایگزین در الگو در رشته منطبق پیدا شود، مطابقت دارد.
- «؟» با هر کاراکتر واحدی مطابقت دارد.
- "?*" با یک یا چند کاراکتر مطابقت دارد.
هیچ محدودیت کاراکتری دیگری برای مقادیر وجود ندارد.
قوانین پویا را مرتب کنید
ترتیب اعلام قوانین مهم است. اندروید هر قانون را به ترتیب ارزیابی میکند تا زمانی که یک مورد منطبق پیدا کند.
مثال زیر نشان میدهد که چگونه ترتیب میتواند بر نحوهی مدیریت تأثیر بگذارد. قانون اول با تمام مسیرها مطابقت دارد ("*") اما موارد منطبق را حذف میکند (exclude: true)، به این معنی که تمام URLها را از باز شدن برنامه مستثنی میکند. در این حالت، قانون دوم که "/path1" را مجاز میداند، هرگز ارزیابی نخواهد شد.
dynamic_app_link_components: [
  {"/": "*", "exclude": true},
  {"/": "/path1"}
]
با این حال، در مثال بعدی، قانون "/path1" ابتدا تعریف شده است، بنابراین ابتدا ارزیابی میشود و برنامه را برای URL منطبق با "/path1" باز میکند. قانون دوم، که همه URL ها را از باز شدن برنامه مستثنی میکند، در مرحله دوم ارزیابی خواهد شد، اما تنها در صورتی که قانون اول مطابقت نداشته باشد.
dynamic_app_link_components: [
  {"/": "/path1"},
  {"/": "*", "exclude": true}
]
اگر هیچ تطابقی در لیست اجزای اعلام شده پیدا نشود، URL برنامه را باز نمیکند. در مثال زیر، هیچ یک از مسیرها با "/path3" مطابقت ندارند، بنابراین دستگاه این مسیر را به عنوان مسیر حذف شده در نظر میگیرد.
dynamic_app_link_components: [
  {"/": "/path1"},
  {"/": "/path2"}
]
 این رفتار در صورتی مهم است که بخواهید dynamic_app_link_components فقط بخشهای خاصی از URL را حذف کند و به سایر قسمتها اجازه دسترسی بدهد. در مثال زیر، حذف قانون نهایی برای مجاز کردن تمام مسیرهای باقیمانده به این معنی است که تمام URLها از برنامه حذف میشوند.
dynamic_app_link_components: [
  {"/": "/path1", "exclude": true},
  {"/": "*"}
]
قوانین پویای خود را به درستی تعریف کنید
هنگام تعریف قوانین سمت سرور برای استفاده با Dynamic App Links در اندروید ۱۵ و بالاتر، مهم است که آنها را به طور مناسب تعریف کنید، به طوری که با فیلترهای intent استاتیک اعلام شده در مانیفست برنامه شما کار کنند و آنها را تکمیل کنند.
 قوانین پویا که در فایل assetlinks.json تعریف میشوند، فقط میتوانند قوانینی را برای میزبانهایی که در فایل AndroidManifest.xml برنامه خود تعریف کردهاید، مشخص کنند. قوانین پویا نمیتوانند دامنه قوانین URL را که به صورت ایستا در مانیفست برنامه خود تعریف میکنید، گسترش دهند .
به همین دلیل، توصیه میکنیم از این رویکرد در قوانین پویا و ایستا خود استفاده کنید:
- در مانیفست برنامه خود، قوانینی با گستردهترین دامنه ممکن تنظیم کنید، مثلاً فقط طرح و دامنه را تعریف کنید.
- برای اصلاحات بیشتر، مانند مسیریابی در سطح مسیر، به قوانین پویای سمت سرور تکیه کنید.
با این پیکربندی ایدهآل، شما قادر خواهید بود در صورت نیاز، مسیرهای جدید App Links را به صورت پویا در فایل assetlinks.json اضافه کنید، با این آگاهی که آنها در محدوده وسیعی که در مانیفست برنامه تعیین کردهاید، قرار خواهند گرفت.
فقط یک بار dynamic_app_link_components را تعریف کنید
برای مدیریت صحیح قوانین خود، فقط یک شیء dynamic_app_link_components را در بین دستورات مربوط به یک سایت، رابطه و برنامه مشخص تعریف کنید.
- به دنبال چندین دستور برای یک سایت، رابطه و برنامه بگردید که یک شیء dynamic_app_link_components را تعریف میکنند.
- به دنبال چندین شیء dynamic_app_link_components باشید که در یک دستور واحد تعریف شدهاند.
در مواردی مانند این، اندروید تضمین نمیکند که از کدام پیکربندی قوانین پویا استفاده خواهد شد.
سازگاری پویای قوانین با پیکربندیهای قبلی App Links
اگر از قبل از App Links پشتیبانی میکنید، میتوانید مستقیماً در فایل assetlinks.json موجود خود، پشتیبانی از Dynamic App Links را اضافه کنید. فیلدهای رابطه برای تأیید App Links شما ثابت میمانند و میتوانید فیلدهای افزونه رابطه جدید را برای قوانین پویا بدون هیچ تغییر دیگری اضافه کنید.
دستگاههای اندرویدی که اندروید ۱۴ (سطح API ۳۴ یا قبلتر) را اجرا میکنند، فیلدهای جدید افزونه رابطه را برای قوانین پویا نادیده میگیرند، در حالی که دستگاههایی که اندروید ۱۵ و بالاتر را اجرا میکنند، این قوانین را با قوانین تعریفشده در مانیفست شما ادغام میکنند.
فایل تأیید JSON را منتشر کنید
شما باید فایل تأیید JSON خود را در مکان زیر منتشر کنید:
 https://domain.name/.well-known/assetlinks.json
از موارد زیر مطمئن شوید:
-  فایل assetlinks.jsonبا نوع محتوایapplication/jsonارائه میشود.
-  فایل assetlinks.jsonباید از طریق اتصال HTTPS قابل دسترسی باشد، صرف نظر از اینکه فیلترهای intent برنامه شما HTTPS را به عنوان طرح داده اعلام کرده باشند یا خیر.
-  فایل assetlinks.jsonباید بدون هیچ گونه ریدایرکتی (بدون ریدایرکت 301 یا 302) قابل دسترسی باشد.
-  اگر لینکهای برنامه شما از چندین دامنه میزبان پشتیبانی میکنند، باید فایل assetlinks.jsonرا در هر دامنه منتشر کنید. برای پشتیبانی از لینکدهی برنامه برای چندین میزبان، به بخش «پشتیبانی از لینکدهی برنامه برای چندین میزبان» مراجعه کنید.
- برنامه خود را با URL های آزمایشی در فایل مانیفست که ممکن است برای عموم قابل دسترسی نباشند (مانند هر URL که فقط با VPN قابل دسترسی است) منتشر نکنید. یک راه حل در چنین مواردی پیکربندی نسخههای ساخت برای تولید یک فایل مانیفست متفاوت برای نسخههای توسعه است.
به راهنماهای مرتبط زیر مراجعه کنید:
