خودکارسازی‌ای که ماه‌ها با اطمینان وصل می‌شد، پس از به‌روزرسانی کلاینت از کار می‌افتد، در حالی که همان نمایه هنوز به‌صورت دستی وصل می‌شود. این الگو به قرارداد کنترل اشاره دارد، نه به سرور VPN. کسی تغییر داده است که برنامه کدام کنش را می‌پذیرد یا کدام شناسه را انتظار دارد، و وظیفه هنوز همان قدیمی را می‌فرستد. بازسازی پیوند زمان کمتری از بازبینی دوبارهٔ سرور می‌گیرد.

این قرارداد از آنِ یک برنامه و یک بازهٔ نسخه است

OpenVPN Connect و OpenVPN for Android دو برنامهٔ متفاوت‌اند و intentی که یک بسته را نام می‌برد در دیگری هیچ کاری نمی‌کند. پیش از دست زدن به وظیفه، تأیید کنید کدام کلاینت نصب است و کدام نسخه رفتاری را ساخته که با آن مقایسه می‌کنید. برای Connect روی اندروید 3.3.2 یا جدیدتر،یکپارچه‌سازی مستند تسکر شناسهٔ نمایه را انتظار دارد. دستورهای قدیمی‌تر که AS یا PC را پیش از نام نمایشی می‌گذارند قرارداد پیشینی را توصیف می‌کنند، و رونویسی آن‌ها در یک وظیفهٔ کنونی همان دلیل معمول بی‌اثر بودن است.

این مرز نسخه بیشتر گزارش‌های «قبلاً کار می‌کرد» را توضیح می‌دهد. برنامه ویژگی را نشکسته است؛ تغییر داده است که ویژگی چه چیزی را می‌پذیرد. بازهٔ نسخه را بخشی از قراردادی بدانید که برایش می‌نویسید.

شناسه از کجا می‌آید

نمایهٔ موردنظر را در Connect باز کنید و شناسهٔ نمایهٔ آن را از جزئیات خودِ نمایه بردارید. از آن مقدار استفاده کنید، نه از نامی که از فهرست می‌شناسید، چون نام فقط یک برچسب است و شناسه چیزی است که برنامه با آن تطبیق می‌دهد. فیلدهای اتصال در کنش Send Intent در تسکر مانند بلوک زیر است، با این تفاوت که فقط شناسه جایگزین می‌شود. نمونهٔ برنامهٔ نمایهٔ شخصی یا کاری را هم سازگار نگه دارید.

Action: net.openvpn.openvpn.CONNECT
Extra: net.openvpn.openvpn.AUTOSTART_PROFILE_ID:'PROFILE_ID'
Extra: net.openvpn.openvpn.AUTOCONNECT:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity

نسخه‌ای در نمایهٔ کاری با همان نام بسته و نمایهٔ ذخیره‌شدهٔ دیگر، intent را می‌پذیرد و هیچ نمایهٔ منطبقی پیدا نمی‌کند، که شبیه وظیفهٔ خراب است نه خطای دامنه. اگر نمایه دوباره وارد یا جایگزین شود، شناسه را مشکوک بدانید و دوباره بررسی کنید. وارد کردن دوباره اغلب ورودی نمایهٔ تازه‌ای می‌سازد، حتی وقتی نام نمایشی تغییر نمی‌کند. پیش از تغییر هر چیز دیگری شناسه را بررسی کنید.

فیلدهای نامرتبط را همان‌گونه که مستند شده خالی بگذارید. فیلدهای دسته، نوع MIME و داده‌هایی که راهنما نمی‌خواهد می‌توانند نحوهٔ حل intent توسط اندروید را تغییر دهند، و intentی که جور دیگری حل شود ممکن است برنامه را بدون راه‌اندازی نمایهٔ شما باز کند.

کنش چه می‌کند و چه چیزی را به شما وا می‌گذارد

فرستادن intent اتصال از برنامه می‌خواهد نمایه‌ای را راه‌اندازی کند. این کار مجوز موردنیاز آن نمایه را دور نمی‌زند. Connect ممکن است هنوز درخواستی نشان دهد، و به همین دلیل حالت خودکار مستند فرض می‌کند مجوز بیشتری و اعتبارنامهٔ اتصال ذخیره‌شده‌ای وجود ندارد. وسوسه آن است که این مرز را با جای‌دادن گذرواژه‌ها یا رازهای کلید خصوصی در یک خروجی مشترک تسکر برداریم.

این کار را نکنید. خروجی وظیفه یک فایل متنی است که مردم در رشته‌های گفتگو کپی می‌کنند، و رازهای گذاشته‌شده در آن همان لحظه‌ای که به اشتراک گذاشته شود آشکار می‌شوند. اگر نمایه به آن‌ها نیاز دارد از اعتبارنامه‌های اتصال ذخیره‌شدهٔ خود برنامه استفاده کنید، و بگذارید درخواست‌های MFA درخواست بمانند. هر چیزی که با ذخیرهٔ پاسخ از درخواست بگریزد، راز را جابه‌جا کرده است نه مشکل را حل.

سمت قطع اتصال کنش مستند خودش را دارد، و این حقه‌ای نیست که به کلاینت زده شود:

Action: net.openvpn.openvpn.DISCONNECT
Extra: net.openvpn.openvpn.STOP:true
Package: net.openvpn.openvpn
Class: net.openvpn.unified.MainActivity
Target: Activity

وصل شدن به نمایه‌ای که عمداً وجود ندارد تا قطع اتصال را تحمیل کند، همان دور زدنی است که در رشته‌های قدیمی پیدا می‌شود و سپس پس از به‌روزرسانی بی‌صدا شکست می‌خورد. از کنش صریح استفاده کنید.

پیش از اجرای گام بعدی وضعیت را بررسی کنید

راه‌اندازی موفق intent ثابت می‌کند که درخواست تحویل شده است، نه اینکه تونلی وجود دارد. اگر وظیفه سپس برنامه‌ای داخلی باز کند،آن گام به شرط آمادگی با مهلت محدود نیاز دارد. کنش بی‌درنگ پس از ارسال سرانجام به یک درخواست برخورد می‌کند.

$ adb shell cmd package resolve-activity --brief net.openvpn.openvpn
net.openvpn.openvpn/net.openvpn.unified.MainActivity
$ adb shell dumpsys activity activities | grep -i openvpn

پرس‌وجوی resolve تأیید می‌کند که بسته و فعالیتی که هدف گرفته‌اید روی آن دستگاه وجود دارند، که خطای تایپی در فیلد کلاس را رد می‌کند. خروجی فعالیت نشان می‌دهد پس از اجرای وظیفهٔ شما واقعاً چه چیزی در پیش‌زمینه است، و ارزان‌ترین راه برای دیدن اینکه برنامه درخواستی باز کرده یا وصل شده است. هر دو را پس از یک وظیفهٔ ناموفق اجرا کنید، نه اینکه حدس بزنید کدام فیلد غلط است. ناهمخوانی در نام کلاس خطای فوری می‌دهد، در حالی که نمایهٔ غایب هیچ خطای دیدنی نمی‌دهد.

پیش از تحویل وظیفه دربارهٔ مالکیت قطع اتصال تصمیم بگیرید. میان‌بری که تونلی را که وظیفهٔ کاری دیگری به آن وابسته است خراب می‌کند، تیکتی پشتیبانی می‌سازد که اصلاً شبیه علتش نیست. نگه داشتن دو خودکارسازی که هر دو یک کلاینت را کنترل می‌کنند مسابقه‌ای می‌سازد که از گزارش‌ها نمی‌توانید اشکال‌زدایی کنید، پس کنش منسوخ را به‌محض کار کردن کنش تازه حذف کنید.

مقالات مرتبط