目前,为了将通知推送到Android操作系统上的Android应用程序,应用程序需要集成Google Cloud Messaging(GCM)API。 App Server当前通过GCM推送数据,GCM将数据推送到特定设备。
这是一个愚蠢的问题,但我想知道在这个过程中是否有可能取代GCM?换句话说,是否可以使用替代服务器而不是GCM?动机是隐藏GCM服务器中的数据。
之前: App Server ==> GCM ==> Android应用
新 App Server ==>自定义云消息传递==> Android应用
答案 0 :(得分:3)
您可以 使用应用导向的 短信 /端口导向的短信。
将短信从服务器(短信网关)发送到您的应用将要监听的特定端口。此短信将充当GCM消息。
使用这种方法,您不必担心长时间运行的服务耗尽电池。短信几乎是实时的,不需要互联网连接。
但有些手机不支持端口定向短信。
对于端口指示的短信,您需要注册如下的广播接收器:
<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>
如果手机正确支持,端口定向的短信不会出现在用户的短信收件箱中。
答案 1 :(得分:3)
更换GCM实际上并不是一件轻而易举的事。我不得不强烈建议不要像前面所说的做一个长轮询机制 - 事实是,沿着这条路走下去将在资源(电池寿命)方面非常昂贵,而管理它将是一场噩梦。您将需要解决大量的错误情况 - 从网络丢弃到管理有保证的交付。
完全披露:我为Magnet Systems工作,该公司有一个产品 - 磁铁信息 - 提供这些功能和更多功能。
我们所做的是为服务器创建一个持久套接字。 (顺便说一句,这就是GCM和Apple的APNS一样)。这个插座用于能够推动&#34;消息到设备。通过了解套接字上的连接,您将了解设备的存在并知道您是否可以向其发送消息。
尽管如此,解决诸如推送离线或被杀的应用程序以及跨平台(可能不想忘记其他40%的iOS用户)这样的问题仍然是一个挑战 - 所以那里有不同的挑战。为了解决这个问题,我们发送一个&#34;信号&#34;通过GCM通知有一条待处理的消息,并且有一个广播接收器可以转到我们的服务器并安全地获取消息。
由于我们允许您在您的环境中部署我们的服务器代码,因此我们不必查看您发送的任何内容。 (当然,我们也有SaaS模型。)
无论如何,您可以查看我们在http://developer.magnet.com处完成的工作。它可以免费玩,我们有很多开源软件。
答案 2 :(得分:3)
建议不要绕过GCM,因为您可能使用的任何其他机制都需要从手机到您的服务器的持久连接,这将是电池耗尽。 GCM已经有一个连接始终打开,因此应该尽可能多地重复使用。
但是,您想要隐藏GCM服务器中的数据是可以理解的。在这种情况下,它应该简单加密。 Chrome团队(使用GCM)决定采用相同的方法(隐藏来自GCM服务器的有效负载),也许他们的加密解决方案也适用于您。你可以看到他们做了什么 https://groups.google.com/a/chromium.org/forum/#!searchin/blink-dev/Intent $ $ 20to $ 20Ship 3A $ $ 20Push $ 20Messaging 20Payloads /闪烁-dev的/ Vga32co0YMQ / 4i6qXvfeAwAJ
请注意,这些示例的目的是在chrome中实现它,这不是您想要的。但是,实际的加密方法可以重用于Android。