Một quản lý sản phẩm yêu cầu một nút bật VPN của công ty, và yêu cầu nghe có vẻ tầm thường. Trên iOS đây không phải tính năng nhỏ; nó nằm ngoài hợp đồng công khai, và mọi cách vòng tránh hoặc trượt khâu đánh giá hoặc hỏng ở bản phát hành sau. Hãy dẫn yêu cầu qua những gì nền tảng thực sự cho phép, và thiết kế phần lớn tự viết ra. Ứng dụng có thể sở hữu một cấu hình VPN và khởi động nó. Ứng dụng không thể chạm tới công tắc của hệ thống, không thể đọc trạng thái của một hồ sơ mà nó không tự tạo, và không thể giữ người dùng kết nối trái với ý muốn của họ.

Hãy bắt đầu từ ba điều người dùng muốn nói

Tách các nghĩa trước khi tách các API. Đôi khi người dùng muốn đường hầm của ứng dụng bạn được kết nối, đôi khi họ muốn bật công tắc trong Cài đặt cho một hồ sơ do người khác cài, và đôi khi họ muốn điện thoại không thể duyệt web nếu thiếu đường hầm. Những điều đó ứng với ba cơ chế khác nhau, và chỉ cơ chế đầu tiên là mở cho ứng dụng thông thường.

Nghĩa thứ hai chính là thứ sinh ra các câu hỏi trên Stack Overflow, và nó không có câu trả lời được hỗ trợ. Công tắc trong Cài đặt thuộc về người dùng và, trên thiết bị được quản lý, thuộc về hồ sơ. Không API công khai nào liệt kê cấu hình VPN, báo cáo đường hầm hệ thống có hoạt động hay không, hay chuyển đổi nó.

Ứng dụng thực sự có thể tạo ra gì

NetworkExtension cấp cho ứng dụng cấu hình của riêng nó thông qua NEVPNManager. Với quyền Personal VPN và sự đồng ý của người dùng, ứng dụng lưu một cấu hình xuất hiện trong Cài đặt dưới tên của chính nó, và nó có thể khởi động hoặc dừng đúng kết nối đó. Đó là năng lực thật và có thể đánh giá, đồng thời là toàn bộ phạm vi: trình quản lý chỉ đọc và ghi những gì nó đã tạo.

Quyền này không tự động. Bạn yêu cầu Apple cấp và giải trình vì sao ứng dụng cần đường hầm, và một khách hàng có mục đích duy nhất là bật hồ sơ của người khác không có câu trả lời hay. Các nhà cung cấp đường hầm gói tuân theo cùng quy tắc với một lớp khác: NETunnelProviderManager sở hữu các cấu hình dựa trên nhà cung cấp mà chính ứng dụng đã cài. Không con đường nào chạm tới hồ sơ do MDM giao.

Sự đồng ý cũng áp dụng tại thời điểm lưu. Việc ghi cấu hình hỏi người dùng, và lời hỏi đó không phải thứ ứng dụng được phép dập tắt vì tiện lợi.

Việc đọc trạng thái cũng đâm vào bức tường đó

Trạng thái trông thân thiện hơn điều khiển và cũng đóng kín như vậy. NEVPNStatus báo không hợp lệ, đã ngắt, đang kết nối, đã kết nối, đang xác nhận lại hoặc đang ngắt cho cấu hình riêng của ứng dụng, và thông báo được kích hoạt mỗi lần thay đổi. Nó không nói gì về một đường hầm do hồ sơ quản lý cài đặt, và đó chính là trạng thái mà bộ phận hỗ trợ muốn thấy.

Giám sát đường dẫn mạng và thay đổi giao diện được đề xuất làm phương án thay thế trong các buổi đánh giá thiết kế. Chúng mô tả đường đi của lưu lượng ứng dụng, thứ thay đổi vì lý do không liên quan đến trạng thái VPN, và dùng chúng làm chỉ số VPN cho ra giao diện nói dối cả hai chiều.

On Demand và Always On là những đòn bẩy thật sự

Các đòn bẩy được hỗ trợ sống trong hồ sơ chứ không trong ứng dụng. Quy tắc On Demand nói cho hệ thống biết khi nào kết nối: một danh sách điều kiện có hành động được sắp xếp, do hệ điều hành đánh giá chứ không phải mã của bạn. Một quy tắc kết nối trên bất kỳ giao diện nào tạo cảm giác luôn kết nối mà không trao quyền điều khiển nào cho ứng dụng.

Always On VPN là cơ chế cưỡng chế, và nó gắn với giám sát. Trên thiết bị được giám sát, MDM cài hồ sơ giữ đường hầm hoạt động; trên điện thoại cá nhân không được giám sát, cùng những khóa đó không tạo ra cùng hành vi. Sự bất đối xứng đó là có chủ đích, và không tổ hợp khóa tải trọng nào loại bỏ nó. Khi yêu cầu thực sự là VPN phải bật, thì yêu cầu thực ra là thiết bị phải được quản lý.

Giữa hai bên là người anh em họ yếu hơn: một quy tắc kết nối lại sau khi người dùng ngắt. Nó kết nối lại khi quy tắc được đánh giá lần sau, điều này không giống với ngay lập tức, và người dùng cố ý ngắt sẽ nhận ra khác biệt. Hãy thiết kế giao diện quanh khoảng trống đó thay vì hứa hẹn một ổ khóa.

Hãy giao con đường được hỗ trợ

Bốn câu hỏi quyết định cơ chế trước khi có bất kỳ mã nào: thiết bị thuộc về ai, nó có được giám sát không, ứng dụng khách nào kết thúc đường hầm, và hồ sơ đến từ đâu. Nếu bất kỳ điều nào chưa rõ, yêu cầu tính năng chưa sẵn sàng để ước lượng.

Một API riêng tư chọc vào VPN hệ thống sẽ qua được bản demo và trượt khâu đánh giá, và nếu được giao bằng cách khác thì nó hỏng ở bản iOS sau. Không có phiên bản nào của sự đánh đổi đó đáng giá cho một công tắc.

Dữ liệu đo từ xa của quản lý là một kênh riêng: nó báo rằng một hồ sơ đã được cài và thiết bị có tuân thủ hay không, đó là báo cáo chứ không phải bề mặt điều khiển cho từng ứng dụng. Hãy thử luồng trên thiết bị thật sau mỗi bản cập nhật, vì hành vi được hỗ trợ sống trong hệ điều hành và hệ điều hành luôn chuyển động.

Bài viết liên quan