لینک‌های عمیق

با لینک‌های throne:// اشتراک‌ها، نمایه‌های مسیریابی و نمایه‌های پروکسی را با یک کلیک در دسکتاپ و Android اضافه کنید.

لینک عمیق یک URL از نوع throne:// است که به Throne می‌گوید یک کار مشخص را انجام دهد: افزودن یک اشتراک، وارد کردن یک نمایهٔ مسیریابی، افزودن نمایه‌های مسیریابی راه‌دور یا افزودن یک نمایهٔ پروکسی. ارائه‌دهندگان، لینک‌های عمیق را در وب‌سایت‌ها و کدهای QR قرار می‌دهند. شما هم می‌توانید از آن‌ها برای به‌اشتراک‌گذاشتن نمایه‌های مسیریابی خودتان استفاده کنید.

Throne چگونه لینک عمیق را دریافت می‌کند

سیستم شما باید بداند که لینک‌های throne:// را Throne باز می‌کند. Throne خودش را فقط برای حساب کاربری شما ثبت می‌کند و این کار به دسترسی مدیر (administrator) نیاز ندارد.

سیستم ثبت پیش‌فرض
Linux بله
macOS بله، وقتی Throne را از Throne.app اجرا می‌کنید
Windows، نصب‌شده با نصب‌کننده بله
Windows، استخراج‌شده از فایل ZIP خیر

برای روشن کردن ثبت، برای مثال در یک نسخهٔ ZIP در Windows:

  1. تنظیمات (Settings) ← تنظیمات پایه (Basic Settings) را باز کنید.
  2. در زبانهٔ متداول (Common)، زیر Links and Files، گزینهٔ Register throne:// links at startup را تیک بزنید.
  3. تایید (OK) را بزنید. Throne بی‌درنگ خودش را ثبت می‌کند.

تا وقتی این گزینه روشن است، Throne در هر بار اجرا ثبت را بررسی و ترمیم می‌کند، برای مثال پس از جابه‌جا کردن پوشهٔ Throne. اگر چند نسخه در Windows یا Linux نگه می‌دارید، لینک‌ها در آخرین نسخه‌ای باز می‌شوند که با این گزینهٔ روشن اجرا شده است.

وضعیت کنار این گزینه، وقتی لینک‌ها در همین نسخهٔ Throne باز می‌شوند، Installed را نشان می‌دهد. دکمهٔ Install یک بار ثبت می‌کند، بدون اینکه گزینه را روشن کند. Uninstall ثبت را حذف و گزینه را خاموش می‌کند. برداشتن تیک گزینه به‌تنهایی، ثبت موجود را نگه می‌دارد.

macOS: کنترل‌کنندهٔ لینک بخشی از Throne.app است؛ بنابراین دکمه‌های Install و Uninstall وجود ندارند. اگر Throne از بستهٔ برنامه (app bundle) اجرا نشود، این گزینه Not available for this installation را نشان می‌دهد.

Throne لینک عمیق را به این روش‌ها می‌پذیرد:

  • کلیک روی لینک در مرورگر، برنامهٔ گفت‌وگو یا یک سند. اگر Throne در حال اجرا نباشد، ابتدا اجرا می‌شود و سپس لینک را پردازش می‌کند.
  • کپی کردن لینک و زدن Ctrl+V در پنجرهٔ اصلی، که همان برنامه (Program) ← افزودن نمایه از کلیپ بورد (Add profile from clipboard) است. این روش حتی وقتی ثبت خاموش است کار می‌کند.
  • کشیدن متن لینک و رها کردن آن روی پنجرهٔ اصلی.
  • دادن لینک به‌عنوان آرگومان هنگام اجرای Throne. خط فرمان را ببینید.

ساختار لینک

همهٔ لینک‌های عمیق شکل یکسانی دارند:

throne://<command>/<payload>
  • throne:// را با حروف کوچک بنویسید. دستور به بزرگی و کوچکی حروف حساس نیست: throne://AddSub/… کار می‌کند.
  • پس از دستور باید یک اسلش و محتوا (payload) بیاید. بدون اسلش، بیشتر لینک‌ها کاری انجام نمی‌دهند.
  • Throne هر چیزی را که پس از ? یا # در لینک بیاید نادیده می‌گیرد. هر چه لینک حمل می‌کند درون محتوا است.
  • اگر محتوا percent-encode شده باشد (برای مثال %2B به‌جای +)، Throne ابتدا آن را رمزگشایی می‌کند.
دستور کاربرد اول می‌پرسد؟
addsub یک گروه اشتراک اضافه و آن را به‌روز می‌کند بله
route یک نمایهٔ مسیریابی را که درون لینک است وارد می‌کند بله
remoteroute نمایه‌های مسیریابی راه‌دور را با URL اضافه می‌کند بله
add یک نمایهٔ پروکسی به گروه فعلی اضافه می‌کند خیر. در Android، وقتی روی لینک در برنامهٔ دیگری بزنید، بله.

قوانین Base64

محتوا متنی با کدگذاری Base64 است. اینکه کدام الفبای Base64 کار کند به دستور بستگی دارد:

دستور محتوای پذیرفته‌شده
addsub، remoteroute فقط Base64 استاندارد: حروف، ارقام، + و /. padding با = در انتها اختیاری است.
route، add Base64 سازگار با URL (- و _) یا Base64 استاندارد، با یا بدون padding. خود Throne، Base64 سازگار با URL و بدون padding می‌نویسد.

برای addsub و remoteroute، محتوای سازگار با URL که - یا _ داشته باشد ناموفق می‌شود. محتوا را در یک خط و بدون فاصله نگه دارید.

برای کدگذاری محتوا در Linux، یا در Git Bash روی Windows:

printf '%s' 'https://example.com/sub/abc123#MyProvider' | base64 -w 0

در macOS، -w 0 را حذف کنید. در PowerShell:

[Convert]::ToBase64String([Text.Encoding]::UTF8.GetBytes('https://example.com/sub/abc123#MyProvider'))

هر دو فرمان، Base64 استاندارد با padding چاپ می‌کنند.

addsub: افزودن اشتراک

یک گروه اشتراک جدید اضافه می‌کند و بی‌درنگ آن را به‌روز می‌کند.

throne://addsub/<base64>

محتوا، Base64 یک خط است:

<subscription_url>#<group_name>
بخش الزامی توضیح
<subscription_url> بله URL اشتراک، بدون تغییر. نویسه‌های ?، & و / آن درون Base64 بی‌خطرند؛ بنابراین لازم نیست آن را percent-encode کنید.
#<group_name> خیر نام گروه جدید. بدون آن، نام گروه از میزبان (host) URL گرفته می‌شود. percent-encode کردن نام اختیاری است: یک فاصلهٔ ساده هم کار می‌کند.

برای مثال، برای افزودن https://example.com/sub/abc123 به‌عنوان گروهی با نام MyProvider، متن https://example.com/sub/abc123#MyProvider را کدگذاری کنید:

throne://addsub/aHR0cHM6Ly9leGFtcGxlLmNvbS9zdWIvYWJjMTIzI015UHJvdmlkZXI=

Throne پرسش «Add this subscription?» (این اشتراک اضافه شود؟) را با نام گروه، URL و یک کادر انتخاب Auto update تیک‌خورده نشان می‌دهد. پس از تأیید شما، Throne گروه را می‌سازد و آن را به‌روز می‌کند.

route: وارد کردن نمایهٔ مسیریابی

یک نمایهٔ مسیریابی کامل (خروجی پیش‌فرض و قوانین) را که درون لینک است وارد می‌کند.

throne://route/<base64>

لازم نیست این لینک‌ها را دستی بسازید. در تنظیمات مسیریابی (Routing Settings)، در زبانهٔ مسیر (Route)، نمایه را انتخاب کنید و استخراج (Export) را بزنید، یا در فهرست Ctrl+C را بزنید. Throne یک لینک throne://route/… را در کلیپ‌بورد کپی می‌کند.

وقتی کسی لینک را باز کند، Throne پرسش «Add this routing profile?» (این نمایهٔ مسیریابی اضافه شود؟) را همراه با نام نمایه و یادداشت‌هایی دربارهٔ هر چیزی که نتوانسته وارد کند نشان می‌دهد. پس از تأیید، نمایه به فهرست او اضافه می‌شود. اگر نمایه نقطه‌های پایانی (endpoint) VPN داشته باشد، Throne پیش از پرسیدن، آن نمایه‌های OpenVPN یا OpenConnect را می‌سازد و حتی اگر وارد کردن لغو شود آن‌ها را نگه می‌دارد. نمایهٔ واردشده فعال نمی‌شود: آن را در فهرست پایین منوی مسیریابی (Routing) انتخاب کنید.

محتوا، Base64 یک شیء JSON کوچک مانند این است:

{
  "kind": "throne-route-profile",
  "v": 1,
  "name": "Example",
  "default_outbound": "proxy",
  "rules": []
}

این لینک همان JSON را حمل می‌کند:

throne://route/eyJraW5kIjoidGhyb25lLXJvdXRlLXByb2ZpbGUiLCJ2IjoxLCJuYW1lIjoiRXhhbXBsZSIsImRlZmF1bHRfb3V0Ym91bmQiOiJwcm94eSIsInJ1bGVzIjpbXX0

default_outbound یکی از proxy، direct، block یا warp-bypass است. یک نمایهٔ خام (بخش route دست‌نویس sing-box) به‌جای rules، مقدار "raw": true و یک شیء route دارد. Throne سرورهایی را که قوانین استفاده می‌کنند از روی نام پیدا می‌کند و دربارهٔ هر سروری که پیدا نکند به شما اطلاع می‌دهد. برای اطلاعات بیشتر دربارهٔ اشتراک‌گذاری، مسیریابی را ببینید.

وارد کردن در تنظیمات مسیریابی

همچنین می‌توانید لینک را در زبانهٔ مسیر (Route) از تنظیمات مسیریابی (Routing Settings) جای‌گذاری کنید: Import را بزنید، یا در فهرست Ctrl+V را بزنید. در پنجرهٔ اصلی، فقط متنی که با throne:// شروع شود لینک عمیق به حساب می‌آید. اینجا Throne محتوای Base64 به‌تنهایی، JSON ساده و فهرست JSON قوانین به سبک قدیمی را هم می‌پذیرد؛ فهرست قدیمی در ویرایشگر باز می‌شود تا برایش نام بگذارید. نمایه‌ای که از یک لینک route، Base64 آن یا JSON آن وارد شود، وقتی تایید (OK) را بزنید، نمایه مسیریابی (Routing Profile) انتخاب‌شده در زبانهٔ متداول (Common) هم می‌شود.

لینک remoteroute که اینجا جای‌گذاری شود، نمایه‌هایش را با به‌روزرسانی خودکار خاموش اضافه می‌کند، چون این پرسش کادر انتخاب Auto update ندارد. بعداً می‌توانید Auto update را در ویرایشگر هر نمایه تیک بزنید.

remoteroute: افزودن نمایه‌های مسیریابی راه‌دور

یک یا چند نمایهٔ مسیریابی راه‌دور اضافه می‌کند. لینک route کل نمایه را حمل می‌کند. لینک remoteroute فقط URLها را حمل می‌کند: Throne هر نمایه را دانلود می‌کند و می‌تواند آن را به‌روز نگه دارد. از آن برای توزیع نمایهٔ مسیریابی‌ای که خودتان نگهداری می‌کنید استفاده کنید.

throne://remoteroute/<base64>

محتوا، Base64 یک فهرست سادهٔ URL است، هر کدام در یک خط. JSON نیست:

<profile_url_1>#<name_1>
<profile_url_2>#<name_2>
بخش الزامی توضیح
<profile_url> بله یک URL با http:// یا https://. خط‌هایی که با یکی از این‌ها شروع نشوند نادیده گرفته می‌شوند.
#<name> خیر نام نمایه. بدون آن، نام نمایه از میزبان (host) URL گرفته می‌شود.

هر URL باید یک نمایهٔ مسیریابی ساخت‌یافته ارائه کند: یک لینک throne://route/، محتوای Base64 آن یا JSON درون آن. نمایه‌های خام را نمی‌توان به‌عنوان نمایهٔ راه‌دور استفاده کرد.

برای مثال، این دو خط را کدگذاری کنید:

printf '%s\n%s' 'https://example.com/routes/bypass-iran.json#BypassIran' 'https://example.com/routes/ads.json' | base64 -w 0

نتیجه این لینک است:

throne://remoteroute/aHR0cHM6Ly9leGFtcGxlLmNvbS9yb3V0ZXMvYnlwYXNzLWlyYW4uanNvbiNCeXBhc3NJcmFuCmh0dHBzOi8vZXhhbXBsZS5jb20vcm91dGVzL2Fkcy5qc29u

Throne نشانی‌ها را زیر پرسش «Add these remote routing profiles?» (این نمایه‌های مسیریابی راه‌دور اضافه شوند؟) فهرست می‌کند، با یک کادر انتخاب Auto update برای همهٔ آن‌ها. این کادر تیک خورده است. پس از تأیید، Throne نمایه‌ها را اضافه و دانلود می‌کند. گزارش‌ها نشان می‌دهند چند نمایه دریافت شده است.

  • Throne نمایه‌هایی را که Auto update آن‌ها روشن است، فقط وقتی تازه‌سازی می‌کند که تنظیمات پایه (Basic Settings) ← اشتراک (Subscription) ← Routing profiles auto update ← فعال کردن (Enable) تیک خورده باشد. این گزینه به‌طور پیش‌فرض خاموش است. برای به‌روزرسانی دستی، از Update در زبانهٔ مسیر (Route) از تنظیمات مسیریابی (Routing Settings) استفاده کنید. نمایه‌های راه‌دور را ببینید.
  • هر به‌روزرسانی، قوانین و خروجی پیش‌فرض نمایه را با موارد دانلودشده جایگزین می‌کند. نام نمایه تغییر نمی‌کند.
  • URLهای روی raw.githubusercontent.com از راه Remote Rule-set Mirror که در زبانهٔ متداول (Common) از تنظیمات مسیریابی انتخاب شده دانلود می‌شوند (به‌طور پیش‌فرض یک آینهٔ jsDelivr). یک آینه ممکن است تا مدتی پس از تغییر فایل، نسخهٔ قدیمی‌تری را ارائه کند.
  • مسیریابی (Routing) ← Download Profiles هم به همین شکل کار می‌کند: یک لینک remoteroute را از مخزن نمایه‌های مسیریابی Throne دانلود می‌کند و همان پرسش را نشان می‌دهد.

add: افزودن یک نمایهٔ پروکسی

یک نمایهٔ پروکسی به گروه فعلی اضافه می‌کند.

throne://add/<base64>

محتوا، Base64 تنظیمات خروجی نمایه به‌صورت JSON است. در دسکتاپ این لینک تأیید نمی‌خواهد: نمایه بی‌درنگ اضافه می‌شود، درست مانند اینکه یک لینک vless:// یا ss:// را جای‌گذاری کرده باشید.

Throne این لینک‌ها را برای شما می‌سازد:

  • روی نمایه‌ها در فهرست راست‌کلیک کنید ← اشتراک گذاری (Share) ← Copy links of selected (Deep Links) (Ctrl+Alt+C).
  • روی یک نمایه راست‌کلیک کنید ← اشتراک گذاری (Share) ← کد QR و پیوند (QR Code and link). پنجره یا لینک اشتراک‌گذاری معمولی را نشان می‌دهد یا لینک عمیق را. برای جابه‌جایی میان آن‌ها، Deep Link را تیک بزنید.
  • گروه ها (Groups) ← Edit current Group → Copy profile share links (Deep Links).

لینک عمیق پیکربندی کامل نمایه را حمل می‌کند؛ بنابراین برای نوع‌ها و گزینه‌هایی از نمایه که لینک اشتراک‌گذاری استاندارد ندارند هم کار می‌کند. برای چنین نمایه‌هایی، لینک های انتخاب شده را کپی کنید (Copy links of selected) با میانبر Ctrl+C معمولاً به‌طور خودکار یک لینک عمیق کپی می‌کند و پنجرهٔ QR با Deep Link تیک‌خورده باز می‌شود. اگر چنین نمایه‌ای گزینه‌های اتصال پیشرفته داشته باشد، مانند bind interface، به‌جای آن از Copy links of selected (Deep Links) استفاده کنید.

لینک‌های add هر جا که لینک‌های اشتراک‌گذاری معمولی کار می‌کنند هم کار می‌کنند: درون اشتراک‌ها، در فایل‌ها و در کدهای QR.

در Android

Throne برای Android نسخهٔ 2.0.0 همین چهار دستور را پردازش می‌کند. همچنین لینک‌های clash://install-config?url=…&name=… را می‌پذیرد که مانند addsub یک اشتراک اضافه می‌کنند. در این لینک‌ها، مقدار url را percent-encode کنید. طرح (scheme) throne:// هنگام نصب برنامه ثبت می‌شود؛ تنظیمی برای آن وجود ندارد.

روی لینک در برنامهٔ دیگری بزنید، یا در صفحهٔ پیکربندی (Profiles) از اضافه‌کردن پراکسی جدید (Add profile) ← وارد کردن از بریده‌دان (Import from clipboard) یا اسکن از کد QR (Scan QR code) استفاده کنید. در Android، کدهای QR برای هر چهار دستور کار می‌کنند. لینک‌های route و remoteroute با Import در صفحهٔ مسیریابی (Routing) هم کار می‌کنند.

تفاوت‌ها با دسکتاپ:

  • لینک add که در برنامهٔ دیگری روی آن بزنید، ابتدا می‌پرسد «تأیید می‌کنید که می‌خواهید پراکسی … اضافه شود؟» (Confirm you want to import profile …?). لینک‌هایی مانند vless:// که در برنامهٔ دیگری روی آن‌ها بزنید هم همین را می‌پرسند. از کلیپ‌بورد یا کد QR، نمایه بدون پرسش وارد می‌شود.
  • نمایهٔ مسیریابی واردشده اضافه می‌شود اما فعال نمی‌شود. برای استفاده، روی آن در صفحهٔ مسیریابی (Routing) بزنید.
  • نمایه‌های مسیریابی خام از دسکتاپ ("raw": true) با پیام «raw routing profiles are not supported on Android» (نمایه‌های مسیریابی خام در Android پشتیبانی نمی‌شوند) رد می‌شوند. نقطه‌های پایانی در یک نمایهٔ مسیریابی اشتراکی با یک یادداشت کنار گذاشته می‌شوند.
  • دستور ناشناخته پیام «Ignored deeplink with unknown command: …» (لینک عمیق با دستور ناشناخته نادیده گرفته شد) را روی صفحه نشان می‌دهد، نه فقط در گزارش.
  • به‌روزرسانی‌های زمان‌بندی‌شده برای اشتراک‌ها به تنظیمات (Settings) ← اشتراک‌ها (Subscriptions) ← Subscription auto update و برای نمایه‌های مسیریابی راه‌دور به تنظیمات ← Routing → Auto update remote profiles نیاز دارند. هر دو به‌طور پیش‌فرض خاموش‌اند.

برنامهٔ Android هم می‌تواند این لینک‌ها را بسازد: لینک‌های add برای نمایه‌ها و لینک‌های route برای نمایه‌های مسیریابی.

عیب‌یابی

این پیام‌ها مربوط به Throne دسکتاپ هستند.

  • کلیک روی لینک کاری نمی‌کند، یا مرورگر می‌پرسد از کدام برنامه استفاده شود. کنترل‌کنندهٔ لینک برای این نسخه ثبت نشده است. در نسخهٔ ZIP در Windows، Register throne:// links at startup را روشن کنید (Throne چگونه لینک عمیق را دریافت می‌کند را ببینید). در macOS، Throne را از Throne.app اجرا کنید. در غیر این صورت، Throne را یک بار اجرا کنید. اگر چند نسخه نگه می‌دارید، در نسخه‌ای که باید لینک‌ها را باز کند Install را بزنید. همیشه می‌توانید به‌جای آن، لینک را کپی کنید و در Throne Ctrl+V را بزنید.
  • Linux: لینک‌ها هنوز باز نمی‌شوند. ثبت، ابزار update-desktop-database از بستهٔ desktop-file-utils را اجرا می‌کند. اگر این ابزار نصب نبود، آن را نصب کنید، سپس Install را در کنار Register throne:// links at startup بزنید.
  • هیچ اتفاقی نمی‌افتد و گزارش خالی می‌ماند. Throne این لینک‌ها را بدون پیام کنار می‌گذارد:
    • لینک addsub که محتوای آن Base64 استاندارد معتبر نیست، برای مثال Base64 سازگار با URL با - یا _، یا محتوایی با فاصله یا شکست خط؛
    • لینکی بدون اسلش پس از دستور، به‌جز لینک‌های add و remoteroute؛
    • لینکی با دستور ناشناخته که محتوای آن رمزگشایی نمی‌شود.
  • «Ignored deeplink with unknown command: …» (لینک عمیق با دستور ناشناخته نادیده گرفته شد) در گزارش. واژهٔ پس از throne:// یکی از addsub، route، remoteroute یا add نیست. املای آن را بررسی کنید.
  • «The link did not contain a subscription URL.» (لینک، URL اشتراک نداشت.) محتوای addsub رمزگشایی شد، اما پیش از #، URL وجود ندارد. <url>#<name> را کدگذاری کنید، نه فقط #<name>.
  • «Deep link has no data» (لینک عمیق داده ندارد) یا «Base64 is invalid.» (Base64 نامعتبر است.) این پیام‌ها از لینک‌های remoteroute هستند: پس از throne://remoteroute/ چیزی نیامده، یا محتوا Base64 استاندارد نیست.
  • «The link did not contain any valid http(s) routing profile URLs.» (لینک هیچ URL معتبر http(s) برای نمایهٔ مسیریابی نداشت.) محتوای remoteroute رمزگشایی شد، اما هیچ خطی با http:// یا https:// شروع نمی‌شود. محتوا باید فهرستی از URLها باشد، هر کدام در یک خط، نه JSON.
  • «The link did not contain any valid remote routing profiles.» (لینک هیچ نمایهٔ مسیریابی راه‌دور معتبری نداشت.) لینک پس از remoteroute اسلش ندارد.
  • «The link could not be parsed:» (لینک قابل تجزیه نبود:) همراه با یک دلیل. این پیام از لینک‌های route است:
    • «Empty input» (ورودی خالی): پس از throne://route/ چیزی نیامده است.
    • «Input is not valid JSON, base64, or a Throne route link» (ورودی، JSON، base64 یا لینک route معتبر Throne نیست): محتوا آسیب دیده یا ناقص است.
    • «Unrecognized route object» (شیء route ناشناخته): JSON مقدار "kind": "throne-route-profile" را ندارد.
  • «0 نمایه وارد شد» (Imported 0 profile(s)) در گزارش. محتوای یک لینک add آسیب دیده یا ناقص است. یا کد QR اسکن‌شده یک لینک addsub، route یا remoteroute دارد: متن پس از QR Code Result: را از گزارش کپی کنید و Ctrl+V را بزنید.
  • «Remote routing profile … failed: …» (نمایهٔ مسیریابی راه‌دور … ناموفق بود: …) در گزارش. نمایه اضافه شد، اما URL آن دانلود نشد یا نمایهٔ مسیریابی ساخت‌یافته‌ای ارائه نمی‌کند. URL یا فایل را اصلاح کنید، سپس از Update در زبانهٔ مسیر (Route) از تنظیمات مسیریابی (Routing Settings) استفاده کنید.