我一直在Web服务和Windows服务中使用PushSharp进行Apple通知一段时间没有任何问题。
在添加Google GCM的代码时,它在我的网络服务和我将服务转换为的控制台应用程序上完美运行,但即使在同一台服务器(Amazon EC2实例)上运行,它也无法在Windows服务中失败< / p>
以下代码为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服务上都能很好地工作。
谁能看到我做错了什么?这不是防火墙问题。我关闭了防火墙,它仍然无法正常工作。我有很多其他代码,并将其提炼到上面的代码,以确保没有隐藏的问题。
EDIT。我设置了一个控制台应用程序,从Windows服务复制代码,并使用浏览器API密钥而不是服务器API密钥。
这适用于我的本地计算机和服务器计算机。但是,无论我使用哪个API密钥,Windows服务仍会出现相同的错误。
更新:虽然Windows服务收到错误,但它实际上发送了两个通知,然后不再发送。如果我停止服务并再次启动它,即使仍然返回通知错误,我还会收到另外两个通知。
我真的被困住了。我现在可以继续运行控制台应用程序,但它几乎不完美。我们将非常感激地提供任何帮助。
答案 0 :(得分:0)
我遇到了类似的问题 - 在Visual Studio中一切正常但在生产服务器上AndroidGcm身份验证失败。
我认为这与服务器应用程序的密钥中的IP列表有关&#39;所以我尝试用我的服务器的IP地址重新生成一个。这没用。
最后,在回复上述评论之一和其他地方的其他帖子后,我从服务器登录了Google Play开发者控制台并创建了一个新密钥,没有指定任何IP地址。
使用此密钥然后解决了我的问题