如何从 Google App Engine 推送 Android 应用程序中的事件流
Posted
技术标签:
【中文标题】如何从 Google App Engine 推送 Android 应用程序中的事件流【英文标题】:How to push stream of events in Android app from Google App Engine 【发布时间】:2014-07-22 13:30:07 【问题描述】:我对 android 开发和 Google App 引擎的东西还很陌生。我仍在处理有关它的文档和教程。
我有一个 Android 游戏概念,基于 2 名玩家的回合制战斗,但回合非常短(
应用程序有没有办法警告客户其他玩家已经玩过,并做出相应的反应?由于是“小”计时器,因此预计不会在战斗期间离开应用程序。
到目前为止,我已经找到了 Channel API,但它不适用于 Android 客户端。
提前谢谢你!
【问题讨论】:
看看:developer.android.com/google/gcm/index.html 哦,所以它不仅限于通知。我会进一步研究那个。但是如果用户禁用了推送,为了节省电池寿命,它就不能再工作了,对吧? 其他问题:100 条正在进行的消息限制是每个设备还是整个应用程序?如果它是整个应用程序,它将无法很好地扩展。 【参考方案1】:Google Cloud Messaging for Android 仅用于从服务器推送到 Android 客户端。 您将需要 Messages with payload 并在您的 Android 应用程序中处理它。
对于大量推送消息,您还应该考虑使用Socket API 保持专用实时连接
【讨论】:
好的,这就是这样做的方法。然而,我仍然想知道 100 条消息的限制:是每个设备还是整个 API 密钥?如果是每个 API 密钥,它看起来很小。 100 是设备不消费(离线)时可以存储在 GCM 中的消息的限制。当用户玩多人游戏时,情况不应该如此 GCM 索引页 (developer.android.com/google/gcm/index.html) 第一段说:“无论您的消息传递需求有多大,GCM 都是完全免费的,并且没有配额”【参考方案2】:我个人建议使用 PubNub 库 http://www.pubnub.com/docs/java/android/android-sdk.html,它比 GCM 更强大。
当一个游戏由 x 个玩家创建时,每个玩家都会以编程方式订阅一个 pubnub 频道。
当玩家 X 在游戏中做某事时,该动作会立即发布到频道中,所有订阅该频道的玩家都会立即收到通知 (在代码中)该操作,因此您可以采用该指示并可见通知等待的玩家轮到她了。
这是在客户端使用 Pubnub id 库的 sn-p,以接收特定 chan 上的传入消息:
public void Startpubnub(String channel)
Toast.makeText(this, channelName+"TransportLine activated...", Toast.LENGTH_LONG).show();
Log.i("PUBNUB", channelName+"TransportLine activated...");
try
pubnub.subscribe(new String[] channel, new Callback()
public void connectCallback(String channel)
notifyUser("CONNECT on channel:" + channel);
public void disconnectCallback(String channel)
notifyUser("DISCONNECT on channel:" + channel);
public void reconnectCallback(String channel)
notifyUser("RECONNECT on channel:" + channel);
@Override
public void successCallback(String channel, Object message)
Log.i("tag","broadcast is sent!");
notifyUser(channel + " " + message.toString());
Log.i("afterBroadcastisSent", message.toString());
try
Message m = Message.obtain();
Bundle b = new Bundle();
b.putString("message", message.toString());
m.setData(b);
mMessageHandler.sendMessage(m);
catch (Exception e)
e.printStackTrace();
@Override
public void errorCallback(String channel, Object message)
notifyUser(channel + " " + message.toString());
);
catch (PubnubException e)
然后在您的后端订阅该频道http://www.pubnub.com/docs/java/javase/javase-sdk.html, https://github.com/pubnub/python, 然后根据传入的 msg 将 msg 发布回 chan。
您甚至可以通过 PubNub 与 GCM 通信。
如果您计划支持设备,尤其是基于国际的设备,由于许可问题而没有安装 google play 服务,那么 PubNub 是终极的快速实时推送/拉取机制。 PubNub 本质上是上面@Ashish 描述的 Socket 通信,但在 Google 基础架构之外。
【讨论】:
以上是关于如何从 Google App Engine 推送 Android 应用程序中的事件流的主要内容,如果未能解决你的问题,请参考以下文章
是否可以在 Google App Engine 应用程序中实现 iPhone 推送通知?
用于开发 iPhone 推送通知服务的 Google App Engine 的 Java 替代方案是啥?
如何在 Google Cloud App Engine 上使用 PubSub 创建订阅者,该订阅者通过 Publisher 从 Google Cloud App Engine Flex 收听消息?
Google App Engine“解析./app.yaml时出错:未知的url处理程序类型”