پیوندهای برنامه، پیوندهای عمیقی هستند که از طرح HTTP یا HTTPS استفاده میکنند و توسط اندروید به عنوان مرتبط با وبسایت شما تأیید میشوند. برای ثبت نام جهت مدیریت پیوندهای برنامه، این مراحل را دنبال کنید:
- یک یا چند فیلتر Intent به مانیفست برنامه خود اضافه کنید که دامنه یا URL های وب سایت شما را مشخص کند.
-
autoVerify="true"attributeبه عناصر فیلتر Intent اضافه کنید. این به سیستم سیگنال میدهد که باید سعی کند طرح و دامنه میزبان را در برابر پیکربندیassetlinks.jsonوبسایت شما تأیید کند. - انجمنهای وبسایت را اعلام کنید.
در زیر مثالی از اعلان App Link به همراه schemes و hosts و همچنین autoVerify="true " آمده است:
<activity
android:name=".MainActivity"
android:exported="true"
...>
<!-- Make sure you explicitly set android:autoVerify to "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" />
<!-- If a user clicks on a link that uses the "http" scheme, your
app should be able to delegate that traffic to "https". -->
<!-- Do not include other schemes, as this will prevent verification. -->
<data android:scheme="http" />
<data android:scheme="https" />
<!-- Include one or more domains that should be verified. -->
<data android:host="www.example.com" />
<data android:host="*.example.com" />
</intent-filter>
</activity>
نکات کلیدی در مورد کد
- AutoVerify : ویژگی
android:autoVerify="true" برای App Links الزامی است. این ویژگی به سیستم سیگنال میدهد که باید تلاش کند تا ارتباط بین برنامه شما و طرحها و دامنه(های) مشخص شده در تگهای<data>را تأیید کند. توصیه میشودautoVerify="true" را به هر فیلتر Intent که میخواهید قابل تأیید باشد، اضافه کنید. - عناصر داده : هر فیلتر App Links Intent باید شامل یک یا چند عنصر
<data>باشد که طرحها و قالبهای میزبان منطبق با دامنه وبسایت قابل تأیید شما را مشخص میکنند. - طرحها : فیلتر intent باید شامل عناصر
<data>برای هر دو طرحhttpوhttpsباشد. میزبانها : میتوانید به صورت اختیاری عناصر
<data>را برای مطابقت با یک یا چند میزبان اضافه کنید. از علامت*برای مطابقت با چندین زیر دامنه (مانند*.example.com) استفاده کنید. سیستم تلاش میکند تا هر میزبان را با فایل assetlinks.json در وبسایت شما تأیید کند. توجه داشته باشید که هرگونه مسیریابی در سطح مسیر باید توسط فایل assetlinks.json انجام شود (به بخش بهترین شیوهها در زیر مراجعه کنید).میزبانهای چندگانه : اگر چندین دامنه میزبان تعریف کنید، سیستم (در اندروید ۱۲+) سعی میکند هر کدام را تأیید کند. اگر هر میزبان تأیید شود، برنامه به عنوان کنترلکننده پیشفرض لینکها از آن میزبان تأیید شده عمل میکند. در اندروید ۱۱ و پایینتر، اگر حتی یک میزبان هم نتواند تأیید شود، تأیید ناموفق خواهد بود.
فیلترهای چندگانهی Intent : وقتی قصد دارید URLهای منحصر به فردی (مانند ترکیبی خاص از scheme و host) تعریف کنید، ایجاد فیلترهای جداگانه مهم است، زیرا چندین عنصر
<data>در یک فیلتر Intent با هم ادغام میشوند تا تمام تغییرات ویژگیهای ترکیبی آنها را در نظر بگیرند.
ملاحظات مربوط به قوانین فیلتر مانیفست
اگر در حال تنظیم فیلترها برای استفاده با پیوندهای پویای برنامه در اندروید ۱۵ و بالاتر هستید، مهم است به یاد داشته باشید که قوانین پویای اعلام شده در فایل assetlinks.json سمت سرور نمیتوانند دامنه قوانین URL را که به صورت ایستا در مانیفست برنامه خود اعلام میکنید، گسترش دهند.
به همین دلیل، توصیه میکنیم از این روش استفاده کنید:
- در مانیفست برنامه خود، وسیعترین محدوده ممکن را تعیین کنید، مثلاً فقط طرح و دامنه را تعریف کنید.
- برای اصلاحات بیشتر، مانند مسیریابی در سطح مسیر، به قوانین سمت سرور assetlinks.json تکیه کنید.
با این پیکربندی ایدهآل، شما قادر خواهید بود در صورت نیاز، مسیرهای جدید App Links را به صورت پویا در فایل assetlinks.json اضافه کنید، با این آگاهی که آنها در محدوده وسیعی که در مانیفست برنامه تعیین کردهاید، قرار خواهند گرفت.
پشتیبانی از لینکهای برنامه برای چندین میزبان
سیستم باید بتواند میزبان مشخص شده در عناصر داده فیلترهای هدف URL برنامه را در برابر فایلهای پیوندهای دارایی دیجیتال که در دامنههای وب مربوطه در آن فیلتر هدف میزبانی میشوند، تأیید کند. اگر تأیید با شکست مواجه شود، سیستم به طور پیشفرض به رفتار استاندارد خود برای حل هدف، همانطور که در ایجاد پیوندهای عمیق به محتوای برنامه توضیح داده شده است، عمل میکند. با این حال، برنامه همچنان میتواند به عنوان یک کنترلکننده پیشفرض برای هر یک از الگوهای URL تعریف شده در سایر فیلترهای هدف برنامه تأیید شود.
برای مثال، یک برنامه با فیلترهای intent زیر، فقط در صورتی که فایل assetlinks.json در https://www.example.com/.well-known/assetlinks.json https://www.example.com شود، اما در https://www.example.net/.well-known/assetlinks.json یافت نشود، از تأیید عبور میکند:
<application>
<activity android:name=”MainActivity”>
<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="http" />
<data android:scheme="https" />
<data android:host="www.example.com" />
</intent-filter>
</activity>
<activity android:name="SecondActivity">
<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="https" />
<data android:host="www.example.net" />
</intent-filter>
</activity>
</application>
پشتیبانی از لینکدهی برنامه برای چندین زیردامنه
پروتکل پیوندهای دارایی دیجیتال، زیردامنهها را در فیلترهای هدف شما به عنوان میزبانهای منحصر به فرد و جداگانه در نظر میگیرد. بنابراین اگر فیلتر هدف شما چندین میزبان با زیردامنههای مختلف را فهرست میکند، باید یک assetlinks.json معتبر را در هر دامنه منتشر کنید. به عنوان مثال، فیلتر هدف زیر شامل www.example.com و mobile.example.com به عنوان میزبانهای URL هدف پذیرفته شده است. بنابراین یک assetlinks.json معتبر باید هم در https://www.example.com/.well-known/assetlinks.json و هم در https://mobile.example.com/.well-known/assetlinks.json منتشر شود.
<application>
<activity android:name="MainActivity">
<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" />
<data android:scheme="https" />
<data android:host="www.example.com" />
<data android:host="mobile.example.com" />
</intent-filter>
</activity>
</application>
از طرف دیگر، اگر نام میزبان خود را با یک wildcard (مانند *.example.com ) اعلام کنید، باید فایل assetlinks.json خود را در نام میزبان ریشه ( example.com ) منتشر کنید. برای مثال، برنامهای با فیلتر intent زیر، برای هر زیرنام example.com (مانند foo.example.com ) تا زمانی که فایل assetlinks.json در https://example.com/.well-known/assetlinks.json منتشر شده باشد، تأیید را پشت سر میگذارد:
<application>
<activity android:name="MainActivity">
<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" />
<data android:host="*.example.com" />
</intent-filter>
</activity>
</application>
بررسی چندین برنامه مرتبط با یک دامنه مشابه
اگر چندین برنامه منتشر کنید که هر کدام به یک دامنه مرتبط هستند، میتوان هر کدام را با موفقیت تأیید کرد. با این حال، اگر برنامهها بتوانند دقیقاً میزبان و مسیر دامنه یکسانی را شناسایی کنند، همانطور که ممکن است در مورد نسخههای سبک و کامل یک برنامه اتفاق بیفتد، فقط برنامهای که اخیراً نصب شده است میتواند اهداف وب را برای آن دامنه شناسایی کند.
در چنین مواردی، در صورتی که قابلیت مشاهده بسته لازم را داشته باشید، برنامههای دارای تداخل احتمالی را در دستگاه کاربر بررسی کنید. سپس، در برنامه خود، یک کادر محاورهای انتخاب سفارشی نمایش دهید که شامل نتایج حاصل از فراخوانی queryIntentActivities باشد. کاربر میتواند برنامه مورد نظر خود را از لیست برنامههای منطبق که در کادر محاورهای ظاهر میشوند، انتخاب کند.