OpenVPN Connect وTasker: معرّف الملف الشخصي، لا الاسم
يقبل OpenVPN Connect على Android 3.3.2 أو أحدث معرّف الملف الشخصي، لا اسم العرض. أعد بناء intent الخاص بـ Tasker واجعل الخطوة التالية معتمدة على حالة الاتصال الفعلية.
أتمتة كانت تتصل بثبات لشهور تتوقف عن العمل بعد تحديث العميل، بينما لا يزال الملف الشخصي نفسه يتصل يدويًا. يشير هذا النمط إلى عقد التحكم لا إلى خادم VPN. غيّر أحدهم الإجراء الذي يقبله التطبيق أو المعرّف الذي ينتظره، وما زالت المهمة ترسل القديم. إعادة بناء الارتباط تستغرق وقتًا أقل من إعادة فحص الخادم.
العقد ملك لتطبيق واحد ونطاق إصدارات واحد
OpenVPN Connect وOpenVPN for Android تطبيقان مختلفان، وintent يسمّي حزمة واحدة لا يفعل شيئًا في الأخرى. قبل لمس المهمة، تأكد من العميل المثبّت ومن الإصدار الذي أنتج السلوك الذي تقارن به. بالنسبة إلى Connect على Android 3.3.2 أو أحدث، فإن تكامل Tasker الموثّق يتوقع معرّف ملف شخصي. التعليمات الأقدم التي تضع AS أو PC قبل اسم العرض تصف عقدًا سابقًا، ونسخها في مهمة حالية هو السبب المعتاد في ألا يحدث شيء.
يفسّر حد الإصدار هذا معظم التقارير التي تقول إنه كان يعمل سابقًا. لم يكسر التطبيق الميزة؛ بل غيّر ما تقبله الميزة. تعامل مع نطاق الإصدارات كجزء من العقد الذي تكتب ضده.
من أين يأتي المعرّف
افتح الملف الشخصي المقصود داخل Connect وانسخ معرّف الملف الشخصي من تفاصيل الملف نفسه. استخدم تلك القيمة بدلًا من اسم تتعرف عليه من القائمة، لأن الاسم مجرد تسمية والمعرّف هو ما يطابقه التطبيق. تبدو حقول الاتصال في إجراء Send Intent في Tasker كالكتلة أدناه، مع استبدال المعرّف فقط. حافظ أيضًا على اتساق نسخة التطبيق للملف الشخصي الشخصي أو ملف العمل.
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 والبيانات التي لا يطلبها الدليل طريقة تحليل Android لـ intent، وقد يشغّل intent يُحلّ بشكل مختلف التطبيق دون بدء ملفك الشخصي.
ما يفعله الإجراء وما يتركه لك
إرسال intent الاتصال يطلب من التطبيق بدء ملف شخصي. وهو لا يتجاوز التفويض الذي يتطلبه ذلك الملف. قد يعرض Connect مطالبة رغم ذلك، ولهذا تفترض الحالة المستقلة الموثّقة عدم وجود تفويض إضافي ولا بيانات اعتماد اتصال محفوظة. الإغراء هو إزالة هذا الحد بتضمين كلمات المرور أو أسرار المفتاح الخاص في تصدير Tasker مشترك.
لا تفعل ذلك. تصدير المهمة ملف نصي ينسخه الناس في سلاسل المحادثات، والأسرار الموضوعة فيه تُكشف في اللحظة التي يُشارك فيها. استخدم بيانات اعتماد الاتصال المحفوظة في التطبيق نفسه إذا احتاجها الملف الشخصي، ودع مطالبات 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 أن الحزمة والنشاط اللذين تستهدفهما موجودان على ذلك الجهاز، وهذا يستبعد خطأ كتابيًا في حقل الفئة. يعرض تفريغ النشاط ما هو فعلًا في المقدمة بعد تشغيل مهمتك، وهو أرخص طريقة لمعرفة ما إذا فتح التطبيق مطالبة بدلًا من الاتصال. شغّل كليهما بعد مهمة فاشلة بدلًا من تخمين أي حقل خاطئ. يُنتج عدم تطابق اسم الفئة خطأ فوريًا، بينما لا يُنتج ملف شخصي مفقود أي خطأ مرئي على الإطلاق.
قرّر ملكية قطع الاتصال قبل تسليم المهمة. الاختصار الذي يهدم نفقًا تعتمد عليه مهمة عمل أخرى سيولّد تذكرة دعم لا تشبه سببه إطلاقًا. الإبقاء على أتمتتين تتحكمان في العميل نفسه يخلق سباقًا لا يمكنك تنقيحه من السجلات، فاحذف الإجراء المتقادم بمجرد أن يعمل الجديد.