2014-11-06 180 views
3

我一直在web服務和Windows服務中使用PushSharp for Apple通知一段時間,沒有任何問題。PushSharp GCM「身份驗證失敗」

在爲Google GCM添加​​代碼時,它在我的Web服務和我轉換服務的控制檯應用程序上工作得很好,但即使在同一臺服務器上運行,它也無法在Windows服務中失敗(Amazon EC2實例)

以下代碼給出GCM通知的「驗證失敗」錯誤,並且Apple通知沒有錯誤。但是,如果我在我的Web服務或同一臺服務器上的控制檯應用程序中運行相同的代碼,則它工作正常。

Dim push As PushBroker = New PushBroker 

Try 
     AddHandler push.OnNotificationSent, AddressOf NotificationSent 
     AddHandler push.OnNotificationFailed, AddressOf NotificationFailed 

     Dim appleCert = File.ReadAllBytes("FILENAME") 
     push.RegisterAppleService(New ApplePushChannelSettings(False, appleCert, "PASSWORD")) 
     push.RegisterGcmService(New GcmPushChannelSettings("API_KEY")) 
     push.QueueNotification(New GcmNotification().ForDeviceRegistrationId("ANDROID-TOKEN").WithJson("{""alert"":""Hello World!"",""badge"":1,""sound"":""sound.caf""}")) 
     push.QueueNotification(New AppleNotification().ForDeviceToken("IOS-TOKEN").WithContentAvailable(1)) 

    Catch ex As Exception 

    End Try 

如果我刪除行:

push.QueueNotification(New GcmNotification().ForDeviceRegistrationId("ANDROID-TOKEN").WithJson("{""alert"":""Hello World!"",""badge"":1,""sound"":""sound.caf""}")) 

它完美的Windows服務和Web服務並重。

任何人都可以看到我做錯了什麼?這不是防火牆問題。我關掉了防火牆,但仍然無法工作。我有很多其他的代碼,並將其解釋爲上面的代碼,以確保沒有隱藏的問題。

編輯。我設置了一個控制檯應用程序,從Windows服務複製代碼並使用瀏覽器API密鑰而不是服務器API密鑰。

這對我的本地計算機和服務器計算機都是完美的。但是,無論使用哪個API密鑰,Windows服務仍會得到相同的錯誤。

更新:儘管Windows服務正在接收錯誤,但它確實發送了兩個通知,但沒有更多。如果我停止服務並再次啓動它,即使通知錯誤仍在返回,我仍會收到另外兩個通知。

我真的被卡住了。我現在可以連續運行控制檯應用程序,但它並不完美。任何幫助將受到感謝。

+0

我收到了類似的問題。 Apple推送通知作爲服務正常工作,但不是GCM端。任何解決方案呢? – 2014-11-22 19:15:44

+0

您是否認爲在調用QueueNotification之前服務尚未註冊的時間問題?我正在考慮添加等待語句來試圖確定這一點。 – 2014-11-22 19:17:17

+0

一個很好的想法,但我不確定,因爲我沒有添加任何東西到我的推隊列(數據庫存儲通知),直到服務啓動後大約5分鐘。上面的代碼是一個簡化。 Mu代碼實際上並沒有調用QueueNotification,直到我說5分鐘而不少於30秒。 – grayson 2014-11-23 20:31:29

回答

0

我有一個類似的問題 - 在Visual Studio中一切正常,但在生產服務器AndroidGcm身份驗證失敗。

我覺得這與'Key for server applications'中的IP列表有關,所以我試着用我的服務器的IP地址重新生成一個IP列表。這沒有奏效。

最終響應的上述評論一個,而另一個線程在其他地方我登錄到谷歌從服務器 Play開發者控制檯並創建一個新的關鍵,沒有指定任何IP地址。

使用此密鑰,然後解決我的問題