簡體   English   中英

Google Cloud Messaging無法在公司網絡上使用4.1.2設備

[英]Google Cloud Messaging not working on 4.1.2 devices on a corporate network

我已經實現了一個簡單的GCM客戶端和服務器。 客戶端使用當前的GCM客戶端API (而不是已棄用的幫助程序庫 )。 服務器(C#和.NET)遵循相應的服務器准則 (使用HTTP )。 我的服務器在公司域內的計算機上運行,​​因此我將客戶端設備連接到公司網絡內的Wi-Fi接入點,但可以訪問Internet。

簡而言之,我的問題是在4.3+手機上收到通知,但在連接到公司Wi-Fi網絡時,4.1.2手機上從未收到通知 如果我將4.1.2設備連接到我們的公共訪客Wi-Fi網絡,則會按預期接收GCM消息,但該應用程序無法連接到公司服務器。

我看到一些跡象表明,當企業網絡具有過度保護的防火牆時,GCM可能會失敗(例如此處 )。 但如果它只是一個防火牆問題,那么4.3+設備肯定不會收到任何消息?

一些額外的細節

我的測試手機如下:

  • 華碩Nexus 7(4.4.2)
  • 三星Galaxy S4(4.4.2)
  • HTC One(4.3)
  • 三星Galaxy S3(4.1.2)
  • 摩托羅拉Razr HD(4.1.2)

服務器已從所有五個設備接收到有效的注冊ID。 在一個15秒的計時器上,它發出一條發往所有五個注冊IDS的消息。 響應始終顯示發送了5條消息,沒有錯誤,也沒有更改注冊ID。 但是,它始終在上面列出的前三個設備上接收,而從不在最后兩個設備上接收(運行4.1.2)。 當我調試它們時,根本沒有調用廣播接收器。

我還驗證了所有五種設備:

  • 擁有Google Play服務4.3.25
  • 沒有SIM,因此沒有蜂窩數據,並且在同一個WiFi網絡上
  • 有正確的日期和時間
  • 已在同一Gmail測試帳戶中注冊
  • 我正在運行相同版本的客戶端應用
  • 為其Google帳戶啟用所有同步設置

我終於弄明白了問題所在。 公司防火牆阻止5228的本機GCM端口上的流量。(5229和5230 也與GCM有關,但我們根本沒有看到這些端口上的任何嘗試流量。)這在其他地方有很好的記錄(只有Google) GCM端口5228 )。

我無法在任何地方找到清楚記錄的內容,但我們已經從我們的服務器日志和手機上運行的連接跟蹤器中發現,Android的較新版本可以回退到使用大多數防火牆的端口443(標准HTTPS端口)默認允許流量通過。 這就是我們運行較新Android版本的設備即使在防火牆后面工作的方式。 我不知道究竟是什么Android版本引入了這個端口443后備,但它介於4.1.2(不工作)和4.3(工作)之間。

我沒有看到上面的清單條目,但幾天前我遇到了確切的問題,清單必須與C2D_MESSAGE權限包匹配。 即。

    <?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.foo.bar"
    android:versionCode="8"
    android:versionName="3.1">

...

<uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/>
<uses-permission android:name="android.permission.GET_ACCOUNTS"/>
<permission android:name="com.foo.bar.permission.C2D_MESSAGE"
    android:protectionLevel="signature" />
<uses-permission android:name="com.foo.bar.permission.C2D_MESSAGE" />

在我的情況下,聲明的包不匹配,以便為以前版本的應用程序提供升級路徑。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM