Hi các bạn, Trong quá trình develop của mình chắc hẳn các bạn đã sử dụng đến chức năng kiểm tra tình trạng kết nối của device. Đơn giản như việc kiểm tra internet khi call API hay download một cái gì đó.
Trước đây thông thường chúng ta sử dụng Network Reachability.
Network Reachability ở đây hiểu nôm na là trạng thái kết nối mạng của device. Chúng ta có thể sử dụng để xác định rằng device đang online hay offline, thậm chí là đang dùng mạng wifi hay gói dữ liệu data từ nhà mạng. Tuy nhiên đây không phải một thư viện chính thống từ Apple và chúng ta phải nhúng vào source code của mình trước khi sử dụng.
Với iOS 12, Apple giới thiệu tới các developer một framework mới để kiểm tra tình trạng kết nối của device. NWPathMonitor có lẽ đây là một sự thay thế hoàn hảo cho Reachability.
Trong sự kiện WWDC tháng 6 năm 2018, một framework mới có tên Network framework được giới thiệu dành cho iOS 12 trở đi. Một đối tượng có tên NWPathMonitor, framework này đem đến cho chúng ta một cách chính thống để xác định trạng thái kết nối mạng thay vì phải dùng thư viện của bên thư ba như từ trước tới nay.
Dưới đây là cách sử dụng của NWPathMonitor
Để sử dụng NWPathMonitor chúng ta chỉ cần import Network và sau đó tạo một đối tượng của NWPathMonitor như sau. Tất nhiên ứng dụng của các bạn phải hỗ trợ từ iOS 12 trở lên nhé.
Với khởi tạo như ở trên thì chúng ta đang kiểm tra connect của tất cả tất cả các Interface type. Nếu chúng ta chỉ quan tâm đến Nếu chỉ quan tâm đến những thay đổi của một network adapter cụ thể ví dụ như Wifi chẳng hạn, chúng ta có thể khởi tạo bằng phương thức init(requiredInterfaceType:) với tham số truyền vào là một kiểu dữ liệu NWInterface.InterfaceType như sau:
Đây là các interface type mà NWPathMonitor hỗ trợ theo dõi:
cellular
loopback
wifi
wiredEthernet
- other
Để nhận được các thay đổi về network state, chúng ta chỉ cần gán callback cho một thuộc tính có tên pathUpdateHandler
, callback này sẽ được gọi đến bất cứ khi nào có sự thay đổi đối với network, ví dụ như khi điện thoại chuyển từ sử dụng cellular sang wifi. Trong callback có một giá trị trả về có kiểu NWPath giúp chúng ta có thể dễ dàng xác định được trạng thái đã connect hay chưa:
Đối tượng NWPath
có các thuộc tính mà qua đó chúng ta thể dùng để xác định khá nhiều trạng thái của network. Một trong số đó là một thuộc tính khá thú vị mang tên isExpensive
dùng để xác định xem network hiện tại có được coi là đắt tiền hay không. Chúng ta cũng có thể kiểm tra xem có hỗ trợ DNS, IPv4 hoặc IPv6 hay không. Ngoài ra nếu muốn xem network trước khi bị thay đổi sang network hiện tại là gì chúng ta có thể sử dụng thuộc tính usedInterfaceType
.
Để bắt đầu lắng nghe trạng thái connect của device, chúng ta gọi phương thức start(). Và gọi stop() khi muốn kết thúc việc lắng nghe.
Khi đã hoàn tất quá trình lắng nghe sự thay đổi, chúng ta chỉ cần đơn giản gọi phương thức cancel()
. Lưu ý rằng một khi đã gọi phương thức cancel()
chúng ta không thể gọi phương thức start()
được nữa. Thay vào đó chúng ta cần khởi tạo một biến NWPathMonitor mới.
Trên đây mình đã giới thiệu đến các bạn về NWPathMonitor một framework hỗ trợ từ iOS 12 của Apple, cũng như cách sử dụng của nó.
Mình hi vọng bài viết có thể giúp ích được cho các bạn. Chúc các bạn thành công!