【问题标题】:Gcm not being Recivied未收到 Gcm
【发布时间】:2013-04-16 09:33:43
【问题描述】:

我正在开发一个使用 Google Cloud Messaging 使用推送通知来通知 android 应用程序的项目。我已经用 PHP 实现了应用程序服务器。当我运行 android 应用程序时,设备从 GCM 服务器获取注册 ID,并将注册 ID 发送到 PHP 服务器(应用程序服务器)。但我从服务器得到以下 httpresponse :

{
    "multicast_id": 7015234441922271670,
    "success": 1,
    "failure": 0,
    "canonical_ids": 0,
    "results": [{
        "message_id": "0:1344007383866721%2adac3a0ad8b3148"
    }]
}

但消息未传递到设备。请有任何建议。

如果有人遇到上述问题,请在下面查看它可能对您有帮助

我终于找到了解决方案在服务器端,只要应用程序运行良好,一切都应该正常工作。但是,如果应用程序中的错误触发同一设备的多个注册,则可能很难协调状态,并且您最终可能会收到重复的消息。

GCM 提供了一种称为“规范注册 ID”的工具,可以轻松地从这些情况中恢复。规范注册 ID 定义为您的应用程序请求的最后一次注册的 ID。这是服务器在向设备发送消息时应使用的 ID。

如果稍后您尝试使用不同的注册 ID 发送消息,GCM 将照常处理请求,但它会在响应的 registration_id 字段中包含规范注册 ID。请务必使用此规范 ID 替换存储在您服务器中的注册 ID,因为最终您使用的 ID 将停止工作。

【问题讨论】:

  • 看我的回答这可能会有所帮助stackoverflow.com/questions/14017176/…
  • 来自gcm guide 注意:“如果您的组织有防火墙限制进出 Internet 的流量,您需要将其配置为允许与 GCM 连接,以便您的 Android 设备接收消息. 要打开的端口是:5228、5229 和 5230。GCM 通常只使用 5228,但有时会使用 5229 和 5230。GCM 不提供特定 IP,因此您应该允许防火墙接受来自所有 IP 地址的传入连接包含在 Google 的 ASN 15169 中列出的 IP 块中。”检查您的防火墙。
  • 以前可以用,现在不行了怎么办?
  • 禁用防火墙。您提到它已经起作用,请确保消息仍然相同,并且您在 canonical_id 上没有收到任何其他数字,该字段上的数字表示设备具有多个注册 ID,您应该更新您的数据库和将未来的消息发送到该号码。
  • 我的应用没有收到任何通知,我收到了我的帖子请求的响应:{"multicast_id":6870303680709824663,"success":1,"failure":0,"canonical_ids":0, "results":[{"message_id":"0:1354074200871681%978fee92f9fd7ecd"}]} 可能是什么问题?我检查了一切没关系

标签: android


【解决方案1】:

如果有人遇到上述问题,请在下面查看它可能对您有帮助

我终于找到了解决方案在服务器端,只要应用程序表现良好,一切都应该正常工作。但是,如果应用程序中的错误触发同一设备的多个注册,则可能难以协调状态,并且您最终可能会收到重复的消息。

GCM 提供了一种称为“规范注册 ID”的工具,可以轻松地从这些情况中恢复。规范注册 ID 定义为您的应用程序请求的最后一次注册的 ID。这是服务器在向设备发送消息时应使用的 ID。

如果稍后您尝试使用不同的注册 ID 发送消息,GCM 将照常处理请求,但它会在响应的 registration_id 字段中包含规范注册 ID。确保用此规范 ID 替换存储在您服务器中的注册 ID,因为最终您使用的 ID 将停止工作。

【讨论】:

    【解决方案2】:

    这可能会帮助你PushNotification 检查你的Androidmanifest.xml你的GCM通知和你的包名

     <uses-permission android:name="yourpackege.permission.C2D_MESSAGE" />
    
        <receiver
                android:name="com.google.android.gcm.GCMBroadcastReceiver"
                android:permission="com.google.android.c2dm.permission.SEND" >
                <intent-filter>
    
                    <!-- Receives the actual messages. -->
                    <action android:name="com.google.android.c2dm.intent.RECEIVE" />
                    <!-- Receives the registration id. -->
                    <action android:name="com.google.android.c2dm.intent.REGISTRATION" />
                    <category android:name="yourpackege" />
                </intent-filter>
            </receiver>
    

    【讨论】:

    • 我已签入 androidManifest.xml 。我已正确输入包名称但我不知道会发生什么
    猜你喜欢
    • 2014-05-21
    • 1970-01-01
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 2012-10-27
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多