【发布时间】:2015-01-02 11:55:21
【问题描述】:
我已经在 Web 服务和 Windows 服务中使用 PushSharp for Apple 通知一段时间了,没有任何问题。
在为 Google GCM 添加代码时,它在我的 Web 服务和我将服务转换为的控制台应用程序上运行良好,但即使在同一台服务器(Amazon EC2 实例)上运行,它在 Windows 服务中也惨遭失败
以下代码为 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 服务收到错误,但它确实发送了两个通知,然后不再发送。如果我停止服务并重新启动它,即使仍然返回通知错误,我也会收到另外两个通知。
我真的被困住了。我现在可以连续运行控制台应用程序,但它并不完美。任何帮助将不胜感激。
【问题讨论】:
-
我遇到了同样的类似问题。 Apple 推送通知作为一项服务运行良好,但在 GCM 端却不行。有什么解决办法吗?
-
你是否认为这是一个时间问题,在调用之前尚未注册服务:QueueNotification。我正在考虑添加等待语句来尝试确定这一点。
-
一个很好的想法,但我不相信,因为直到服务启动后大约 5 分钟我才向我的推送队列(数据库存储通知)添加任何内容。上面的代码是一个简化。 Mu 代码实际上不会调用 QueueNotification,直到我说最多 5 分钟且不少于 30 秒。
-
...注册服务后。而且,上面的代码可以在控制台应用程序中完美运行。我希望我是错的,但你会找到解决方案。
-
我会尝试更改时间。这是github上的一个相关问题。 github.com/Redth/PushSharp/issues/445
标签: asp.net push-notification pushsharp