การแจ้งเตือนหยุดมาถึงบนโทรศัพท์ที่ยังคงท่องเว็บผ่าน VPN ขององค์กรได้ดี เว็บโหลดได้ แอปเปิดได้ และข้อความจะปรากฏเฉพาะที่บ้านหรือหลังจากปิดอุโมงค์ สำหรับแอปที่สร้างบน Firebase Cloud Messaging ช่องทางพุชคือการเชื่อมต่อขาออกแยกต่างหากที่มีอายุยาวนาน ไม่ใช่เส้นทาง HTTPS ที่เบราว์เซอร์เพิ่งพิสูจน์ ไล่ตรวจสอบเหล่านี้ตามลำดับและหยุดที่ข้อแรกที่ล้มเหลว

ยืนยันว่าแอปใช้ FCM จริง

ไม่ใช่ทุกการแจ้งเตือนจะเป็นพุช บางอย่างแอปตั้งเวลาไว้ในเครื่อง บางอย่างถูกดึงผ่าน HTTPS และบางอย่างมาจากช่องทางของผู้ให้บริการที่ไม่มีส่วนเกี่ยวข้องกับ Firebase หากแมนนิเฟสต์และ dependencies ของแอปมี Firebase Messaging การแจ้งเตือนมักเดินทางผ่านการเชื่อมต่อ FCM และไลบรารีไคลเอนต์บันทึกการลงทะเบียนภายใต้แท็กที่คาดเดาได้

adb logcat -s FirebaseMessaging:V
adb shell dumpsys package <package> | grep -i firebase

โทเค็นการลงทะเบียนในล็อกยืนยันการขนส่ง หากไม่มี แสดงว่าคุณกำลังดีบักไปป์ไลน์การแจ้งเตือนระดับแอป และการแก้ไฟร์วอลล์จะไม่ช่วย ความแตกต่างนี้สำคัญเพราะข้อความที่ส่งถึงแต่ไม่เคยแสดงและข้อความที่ไม่เคยมาถึงดูเหมือนกันสำหรับผู้ใช้

ตรวจสอบพอร์ตขาออก ไม่ใช่เว็บไซต์

การเชื่อมต่อของอุปกรณ์กับ FCM เป็น TCP ที่อุปกรณ์เป็นผู้เริ่มไปยังพอร์ต 5228 โดยมี 5229 และ 5230 เป็นทางเลือกสำรอง และ 443 เป็นทางสุดท้าย ไฟร์วอลล์ที่อนุญาต 443 สำหรับการท่องเว็บยังทำให้พุชเสียได้ และกฎที่อนุญาตโดเมน API ของแอปไม่ได้ครอบคลุมปลายทางการรับส่งข้อความซึ่งเป็นบริการแยกต่างหาก

นี่คือการเชื่อมต่อขาออกจากโทรศัพท์ คุณไม่ได้เผยแพร่พอร์ตขาเข้าบนอุปกรณ์หรือเกตเวย์ VPN ดังนั้นหากมีคนเสนอให้ทำพอร์ตฟอร์เวิร์ด การออกแบบก็ผิดตั้งแต่ต้นแล้ว เช่นเดียวกับกฎที่เปิดพอร์ตหนึ่งให้ทุกที่อยู่ในอินเทอร์เน็ต ควรจำกัดให้เฉพาะปลายทางที่บันทึกไว้

PortRoleWhat to verify
5228Primary FCM connectionOutbound allowed and session state kept
5229, 5230Fallback portsOften missing from hand-written allowlists
443Last-resort fallbackWorks only if the client actually falls back
HTTP proxyNot a supported FCM transportProxy exclusion or bypass, not a port rule

คำแนะนำด้านเครือข่ายของ Firebase ยังระบุว่าโปรโตคอลการส่งของ FCM ไม่สามารถขนส่งผ่านพร็อกซี HTTP ทั่วไปได้ ดังนั้นการที่เบราว์เซอร์ทำงานผ่านพร็อกซีเว็บขององค์กรจึงไม่ได้พิสูจน์อะไรเกี่ยวกับซ็อกเก็ตพุช ทั้งสองเป็นไคลเอนต์ต่างกันที่มีเส้นทางต่างกัน

ตรวจสอบเวลาหมดอายุขณะว่างที่ฆ่าซ็อกเก็ต

การเชื่อมต่อ FCM เปิดค้างไว้ระหว่างข้อความ ทำให้ไวต่อเวลาหมดอายุของ NAT และการตรวจสอบสถานะ คำแนะนำของ Firebase ขอให้ทนต่อการว่างอย่างน้อย 30 นาทีในที่ที่มีนโยบายดังกล่าว เวลาหมดอายุเซสชันห้านาทีจะลบแมปปิ้งอย่างเงียบ ๆ และโทรศัพท์จะเชื่อมต่อใหม่เมื่อมีสิ่งใดปลุกเท่านั้น ข้อความจึงมาทีละระลอกหรือไม่มาเลย

อ่านตารางเซสชันบนไฟร์วอลล์หรือเกตเวย์ VPN แล้วหาการเชื่อมต่อของโทรศัพท์ไปยัง 5228-5230 เปรียบเทียบอายุที่เหลือกับค่าที่บันทึกไว้ หากสั้นกว่า ให้เพิ่มเวลาหมดอายุสำหรับพอร์ตเหล่านั้นแทนการเปลี่ยนนโยบายทั้งหมดบนอุปกรณ์ เพราะการเปลี่ยนเวลาหมดอายุแบบทั่วโลกนั้นยากที่จะให้เหตุผลและยากกว่าที่จะย้อนกลับ

การส่งพุชยังขึ้นอยู่กับว่าแมปปิ้งปลายทางอยู่รอดจากการโรมมิ่งระหว่าง Wi-Fi และเครือข่ายมือถือ แมปปิ้งที่ผูกกับอินเทอร์เฟซเดียวอาจถูกทิ้งเมื่อส่งต่อแม้ทั้งสองเครือข่ายอนุญาตพอร์ต

ตัดสินใจว่าการข้าม VPN เป็นที่ยอมรับได้หรือไม่

ไคลเอนต์ VPN บน Android สามารถอนุญาตให้ทราฟฟิกข้ามอุโมงค์ได้ และ FCM อาจใช้เครือข่ายที่อยู่ใต้เมื่ออนุญาตการข้ามนั้น ในกรณีนั้นช่องทางพุชยังคงเข้ารหัสอยู่ แต่ไม่ได้พาแอดเดรสของอุโมงค์อีกต่อไป การปิดบัง IP ของ VPN จึงไม่ใช้กับช่องทางนี้ เป็นการแลกเปลี่ยนเชิงนโยบาย ไม่ใช่ความผิดปกติ

หากนโยบายของคุณห้ามการข้าม เส้นทางอุโมงค์ต้องขนการเชื่อมต่อไว้: เปิดพอร์ต เวลาหมดอายุยาวพอ และพร็อกซีไม่ขวางทาง อย่าตัดบริการที่จัดการออกอย่างเงียบ ๆ และอย่าผ่อนล็อกเพียงเพราะการแจ้งเตือนทำงานบนเครือข่ายที่ไม่ได้จัดการ ไอคอน VPN ไม่ได้บอกว่าบริการใดเลือกเส้นทางใด

แยกการส่งออกจากการแสดงผล แล้วทดสอบเพียงครั้งเดียว

สิทธิ์ การตั้งค่าช่องทาง ห้ามรบกวน และสวิตช์ต่อแอปเป็นตัวกำหนดว่าจะแสดงข้อความที่ส่งถึงหรือไม่ บน Android 13 และใหม่กว่า สิทธิ์การแจ้งเตือนเป็นการให้สิทธิ์ขณะรัน และการให้สิทธิ์ที่ถูกปฏิเสธทำให้เกิดความเงียบที่ดูเหมือนพอร์ตถูกบล็อกทุกประการ ข้อความที่มาถึงแต่ไม่แสดงเป็นปัญหาเรื่องการนำเสนอ ควรจัดการแยก

ทำการทดสอบแบบควบคุมหนึ่งครั้งแทนการส่งข้อความตามอำเภอใจ คงอุปกรณ์ บัญชี และแอปให้เหมือนเดิม ส่งข้อความเดียวที่มีการประทับเวลาที่รู้ แล้วเปรียบเทียบสภาวะ VPN กับเครือข่ายที่ไม่ใช้ VPN ที่อนุมัติแล้ว บันทึกเวลารับใน logcat และเวลาแสดงสำหรับแต่ละรอบ หากการส่งต่างกันแต่การแสดงไม่ต่าง แสดงว่าเส้นทางเครือข่ายเป็นตัวแปร หากทั้งสองเหมือนกัน ให้ดูที่แอปต่อไป

มอบพอร์ต ข้อจำกัดของพร็อกซี เวลาหมดอายุที่วัดได้ และการตัดสินใจเรื่องการข้ามให้เจ้าของเครือข่ายในบันทึกเดียว «ปิด VPN» ไม่ใช่ข้อค้นพบ และการอนุญาตทราฟฟิก Google ทั้งหมดไม่ใช่การแก้ไขที่จำกัดขอบเขต

บทความที่เกี่ยวข้อง