【问题标题】:PushSharp GCM "Authentication Failed"PushSharp GCM“身份验证失败”
【发布时间】: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


【解决方案1】:

我遇到了类似的问题 - 在 Visual Studio 中一切正常,但在生产服务器上 AndroidGcm 身份验证失败。

我认为这与“服务器应用程序密钥”中的 IP 列表有关,因此我尝试使用服务器的 IP 地址重新生成一个。这不起作用。

最终,为了响应上述其中一个 cmets 和其他地方的另一个线程,我从服务器登录到 Google Play 开发者控制台并创建了一个新密钥,没有指定任何IP 地址。

使用此密钥解决了我的问题

【讨论】:

    猜你喜欢
    • 2017-03-28
    • 2014-01-24
    • 2017-11-27
    • 1970-01-01
    • 1970-01-01
    • 2022-01-11
    • 2014-05-23
    相关资源
    最近更新 更多