Android设备的GCM推送通知替代方案?

Android设备的GCM推送通知替代方案?,android,push-notification,google-cloud-messaging,Android,Push Notification,Google Cloud Messaging,目前,为了在android操作系统上向android应用程序推送通知,该应用程序似乎需要集成谷歌云消息(GCM)API。应用服务器当前通过GCM推送数据,GCM将数据推送至特定设备 这是一个愚蠢的问题,但我想知道是否有可能在这个过程中取代GCM?换言之,是否可能有一个与GCM相反的替代服务器?目的是对GCM服务器隐藏数据 之前: 应用服务器==>GCM==>Android应用 新建: 应用程序服务器==>自定义云消息==>Android应用程序您可以使用应用程序导向的短消息/port导向的短消息

目前,为了在android操作系统上向android应用程序推送通知,该应用程序似乎需要集成谷歌云消息(GCM)API。应用服务器当前通过GCM推送数据,GCM将数据推送至特定设备

这是一个愚蠢的问题,但我想知道是否有可能在这个过程中取代GCM?换言之,是否可能有一个与GCM相反的替代服务器?目的是对GCM服务器隐藏数据

之前: 应用服务器==>GCM==>Android应用

新建: 应用程序服务器==>自定义云消息==>Android应用程序您可以使用应用程序导向的短消息/port导向的短消息

将短信从服务器(短信网关)发送到应用程序将侦听的特定端口。此短信将充当GCM消息

使用这种方法,您不必担心长期运行的服务会耗尽电池。此外,短信几乎是实时的,不需要互联网连接

但是,有些手机不支持端口定向短信

对于端口定向sms,您需要注册广播接收器,如下所示:

<receiver
android:name = ".SmsReceiver">
<intent-filter>
    <action android:name="android.intent.action.DATA_SMS_RECEIVED" />
    <data 
        android:scheme="sms"
        android:host="*"
        android:port="8095" />
    </intent-filter>


如果手机正确支持,端口定向的sms不会出现在用户的sms收件箱中。

更换GCM实际上不是一项简单的任务。我不得不强烈建议不要像前面建议的那样采用长时间的投票机制——事实是,沿着这条路走下去会在资源(电池寿命)方面极其昂贵,管理它将是一场噩梦。您需要解决大量的错误情况—从网络中断到管理有保证的交付

充分披露:我为磁铁系统工作,该系统有一个产品-磁铁信息-提供这些功能和更多

我们所做的是为服务器创建一个持久套接字。(顺便说一句,这就是GCM和苹果的APN一样的功能)。此套接字用于将消息“推送”到设备。通过了解套接字上的连接,您将了解设备的存在,并知道是否可以向设备发送消息

尽管如此,解决诸如推送离线或终止的应用程序之类的问题仍然是一个挑战——跨平台(可能不想忘记其他40%的iOS用户)——因此存在不同的挑战。为了解决这个问题,我们通过GCM发送一个“信号”来通知有一个挂起的消息,并且有一个广播接收器,可以去我们的服务器安全地获取消息

因为我们允许您在您的环境中部署服务器代码,所以我们不必查看您发送的任何内容。(当然,我们也有SaaS模型)


无论如何,你可以看看我们在这方面做了些什么。它是免费的,我们有很多开源的东西。

不建议绕过GCM,因为您可能使用的任何其他机制都需要从手机到服务器的持久连接,这会消耗电池。GCM已经有一个连接一直处于打开状态,因此应该尽可能多地重用它

但是,您想要隐藏GCM服务器的数据是可以理解的。在这种情况下,它应该简单地加密。Chrome团队(使用GCM)也决定这样做(从GCM服务器隐藏有效负载),也许他们的加密解决方案也适用于您。你可以看到他们在这方面做了什么 $20至$20芯片$3A$20推送$20消息$20有效负载/闪烁开发/Vga32co0YMQ/4i6qXvfeAwAJ

同一个链接包含一个及其对应的


请注意,这些示例的目的是在chrome中实现它,而这并不是您想要的。但是,实际的加密方法可以在Android上重复使用。

当然欢迎您集成自己的“长轮询”机制,如MQTT。如果关注的是“从GCM服务器隐藏数据”,您可以考虑只加密它。谢谢@公共SWARE。正如您所建议的,如果我决定集成自己的长轮询机制,那么所有这些逻辑是否会以轮询应用服务器以获取通知的服务的形式发生在android应用程序内部?我假设服务路由将允许应用程序运行某些代码,即使应用程序未运行。只是担心这是否会耗尽电池寿命…“所有这些逻辑是否会以轮询应用程序服务器以获取通知的服务的形式出现在android应用程序内部?”--是的,或者是单独进程中的服务。“只是担心这是否会耗尽电池寿命”——一般来说,会的。让这些东西在电池消耗最少的情况下工作应该是相当棘手的,因为你依靠移动数据连接上的传入数据包来唤醒设备脱离睡眠模式等等。其他人已经这样做了,所以这显然是可行的。谢谢,很高兴知道这是可能的服务路线,即使它是棘手的保持最低限度的电池消耗。我认为在电池消耗方面,走GCM路线是最有效的。由于目标是隐藏数据,我认为对有效负载进行加密是最好的选择,正如您所建议的,对于独立MQTT推送通知服务的现成商业实现,请查看Pushy(),它可以自托管以满足数据安全和隐私要求。充分披露-我创建了Pushy。谢谢@rupesh jain。有趣的解决方案!这是否意味着应用服务器基本上会根据电话号码向设备发送短信?这是否假定设备有电话线(例如:Verizon)?该信息是否会在手机上显示为文字信息?使用这种方法,我假设应用程序需要创建一个服务来侦听SMS端口,然后能够处理负载。虽然SMS路径有一些潜力,但实际上这是一种非常古老的方式。首先,短信的成本加起来是真实的