Vì tôi đang cung cấp thêm chi tiết, tôi đang viết câu trả lời của riêng mình dựa trên bản gốc (thay vì chỉnh sửa nó).
Vâng, có một cách để làm điều này, nhưng phương pháp này chỉ hoạt động cho Facebook và Messenger dựa trên web; bạn không thể làm điều gì đó tương tự cho các ứng dụng di động.
Về cơ bản, Facebook sử dụng các yêu cầu được hẹn giờ ở phía máy chủ để kiểm tra xem máy khách có còn khả dụng hay không. Vì vậy, giao diện người dùng (trang web Facebook đã tải) sẽ định kỳ gửi yêu cầu HTTP ( XHR ) với thời gian nhàn rỗi đến máy chủ của họ.
Đây là một ví dụ về yêu cầu như vậy:
https://1-edge-chat.facebook.com/pull?channel=p_<UserID>&seq=0&partition=-2&clientid=18ae8ecc&cb=ie3k&idle=117&qp=y&cap=8&msgs_recv=0&uid=userid&viewer_uid=userid&msgr_region=FRC&state=offline
Lưu ý: Tôi đã thay thế ID người dùng thường là số.
Nếu bạn đọc URL ở trên, bạn sẽ thấy phần nói idle = 117 . Điều này biểu thị tổng số giây mà tài khoản không hoạt động. Các trạng thái = ẩn tượng trưng cho dù trò chuyện được bật hoặc tắt.
Vì vậy, để tắt tính năng này, chỉ cần thêm quy tắc sau vào danh sách bộ lọc tùy chỉnh của trình chặn quảng cáo của bạn:
||*-edge-chat.facebook.com^$xmlhttprequest
Để tắt cả hai, Facebook và Messenger, bạn có thể thêm hai dòng sau:
||*-edge-chat.facebook.com^$xmlhttprequest
||*-edge-chat.messenger.com^$xmlhttprequest
Hoặc dòng đơn, sử dụng regex :
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/?/$xmlhttprequest
Một vài nhược điểm của phương pháp này là bạn sẽ không thể nhận tin nhắn trong thời gian thực và bạn sẽ không xuất hiện trực tuyến ngay cả khi trò chuyện được bật. Bạn sẽ phải làm mới trang để nhận tin nhắn mới.
Để tránh cả hai nhược điểm này, đây là một cách giải quyết. Bạn có thể thêm dòng này thay thế:
/^https?\:\/\/\d+-edge-chat\.facebook\.com\/pull\?.*state=offline/$xmlhttprequest
Hoặc, thêm cái này cho cả hai, Facebook và Messenger:
/^https?\:\/\/\d+-edge-chat\.(facebook|messenger)\.com\/pull\?.*state=offline/$xmlhttprequest
Kết quả cuối cùng của việc này sẽ là như sau:
- Khi trò chuyện của bạn bị tắt, bạn sẽ không xuất hiện trực tuyến, hoạt động cuối cùng của bạn sẽ không được báo cáo và bạn sẽ không thể nhận được tin nhắn trong thời gian thực.
- Khi trò chuyện của bạn được bật, bạn sẽ xuất hiện trực tuyến, hoạt động cuối cùng của bạn sẽ được báo cáo và bạn sẽ có thể nhận được tin nhắn trong thời gian thực.
Thật không may, dường như không có giải pháp nào khác vì giao diện người dùng của Facebook chỉ có thể tìm nạp thư khi khách hàng báo cáo định kỳ rằng họ đang hoạt động, do đó quá trình tìm nạp được thực hiện khi hoạt động cuối cùng được báo cáo. Cả hai hành động này đều được thực hiện bằng một tập lệnh back-end duy nhất ( * -edge-chat.facebook.com / pull ), thông qua cùng một yêu cầu; do đó, bạn không thể có cái này mà không có cái kia.