Một tự động hóa kết nối ổn định suốt nhiều tháng bỗng ngừng hoạt động sau khi ứng dụng khách cập nhật, trong khi cùng hồ sơ đó vẫn kết nối thủ công được. Kiểu biểu hiện đó chỉ vào hợp đồng điều khiển chứ không phải máy chủ VPN. Ai đó đã đổi thao tác mà ứng dụng chấp nhận, hoặc đổi định danh mà nó chờ, còn tác vụ vẫn gửi cái cũ. Dựng lại ràng buộc tốn ít thời gian hơn là kiểm tra lại máy chủ.

Hợp đồng thuộc về một ứng dụng và một khoảng phiên bản

OpenVPN Connect và OpenVPN for Android là hai ứng dụng khác nhau, và một intent nêu tên gói này sẽ không làm gì trong gói kia. Trước khi chạm vào tác vụ, hãy xác nhận ứng dụng khách nào đang được cài và phiên bản nào tạo ra hành vi bạn đang so sánh. Với Connect trên Android 3.3.2 trở lên,tích hợp Tasker được tài liệu hóa chờ một ID hồ sơ. Những hướng dẫn cũ đặt AS hoặc PC trước tên hiển thị mô tả một hợp đồng trước đó, và sao chép chúng vào tác vụ hiện tại là lý do thường gặp khiến không có gì xảy ra.

Ranh giới phiên bản đó giải thích phần lớn báo cáo kiểu trước đây vẫn chạy. Ứng dụng không làm hỏng tính năng; nó đổi thứ mà tính năng chấp nhận. Hãy coi khoảng phiên bản là một phần của hợp đồng bạn đang viết.

Định danh đến từ đâu

Mở hồ sơ mong muốn bên trong Connect và sao chép ID hồ sơ từ phần chi tiết của chính hồ sơ đó. Hãy dùng giá trị đó thay vì một cái tên bạn nhận ra trong danh sách, vì tên chỉ là nhãn còn định danh mới là thứ ứng dụng đối chiếu. Các trường kết nối trong thao tác Send Intent của Tasker trông như khối bên dưới, chỉ thay mỗi định danh. Giữ cả bản thể ứng dụng của hồ sơ cá nhân hoặc hồ sơ công việc cho nhất quán.

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

Một bản sao trong hồ sơ công việc có cùng tên gói và một hồ sơ đã lưu khác sẽ nhận intent rồi không tìm thấy hồ sơ nào khớp, trông như tác vụ hỏng chứ không phải lỗi phạm vi. Nếu hồ sơ được nhập lại hoặc thay thế, hãy coi định danh là đáng ngờ và kiểm tra lại. Việc nhập lại thường tạo ra một mục hồ sơ mới kể cả khi tên hiển thị không đổi. Kiểm tra định danh trước khi bạn thay đổi bất cứ thứ gì khác.

Để trống những trường không liên quan như tài liệu hướng dẫn. Các trường danh mục, kiểu MIME và dữ liệu mà hướng dẫn không yêu cầu có thể thay đổi cách Android phân giải intent, và một intent được phân giải khác đi có thể mở ứng dụng mà không khởi động hồ sơ của bạn.

Thao tác đó làm gì và để lại gì cho bạn

Gửi intent kết nối yêu cầu ứng dụng khởi động một hồ sơ. Nó không bỏ qua sự cho phép mà hồ sơ đó đòi hỏi. Connect vẫn có thể hiển thị một lời nhắc, vì thế trường hợp tự động có tài liệu giả định không có sự cho phép thêm và không có thông tin kết nối đã lưu. Cám dỗ là xóa bỏ ranh giới đó bằng cách nhúng mật khẩu hoặc bí mật khóa riêng vào một bản xuất Tasker được chia sẻ.

Đừng làm vậy. Một bản xuất tác vụ là tệp văn bản mà người ta sao chép vào các luồng trò chuyện, và bí mật đặt trong đó bị lộ ngay khi tệp được chia sẻ. Hãy dùng thông tin kết nối đã lưu của chính ứng dụng nếu hồ sơ cần, và để các lời nhắc MFA vẫn là lời nhắc. Bất cứ thứ gì né lời nhắc bằng cách lưu câu trả lời đều đã di chuyển bí mật chứ không giải quyết vấn đề.

Phía ngắt kết nối có thao tác được tài liệu hóa riêng, và đó không phải mẹo chơi ứng dụng khách:

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

Kết nối tới một hồ sơ cố tình không tồn tại để ép ngắt kết nối là kiểu lách mà ta thấy trong các luồng cũ rồi lặng lẽ thất bại sau một lần cập nhật. Hãy dùng thao tác tường minh.

Kiểm tra trạng thái trước khi bước tiếp theo chạy

Một lần khởi chạy intent thành công chứng minh yêu cầu đã được gửi đi, không chứng minh có đường hầm. Nếu tác vụ sau đó mở một ứng dụng nội bộ,bước đó cần một điều kiện sẵn sàng với thời gian chờ có giới hạn. Một thao tác tức thì sau khi gửi rồi sẽ đụng phải một lời nhắc.

$ 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

Truy vấn resolve xác nhận rằng gói và activity bạn nhắm tới tồn tại trên thiết bị đó, điều này loại trừ một lỗi gõ trong trường lớp. Bản kết xuất activity cho thấy thứ thực sự ở tiền cảnh sau khi tác vụ của bạn chạy, và đó là cách rẻ nhất để xem ứng dụng đã mở một lời nhắc thay vì kết nối hay chưa. Hãy chạy cả hai sau một tác vụ thất bại thay vì đoán trường nào sai. Việc lệch tên lớp gây lỗi ngay lập tức, còn hồ sơ thiếu thì không gây ra lỗi nhìn thấy được nào.

Quyết định quyền sở hữu việc ngắt kết nối trước khi bạn phát hành tác vụ. Một lối tắt phá đường hầm mà tác vụ công việc khác phụ thuộc vào sẽ tạo ra một phiếu hỗ trợ trông chẳng giống nguyên nhân của nó chút nào. Giữ hai tự động hóa cùng điều khiển một ứng dụng khách sẽ tạo ra một cuộc đua mà bạn không thể gỡ lỗi từ nhật ký, nên hãy xóa thao tác lỗi thời khi cái mới đã chạy được.

Bài viết liên quan