【问题标题】:GCM demo won't accept messages on server & app restartGCM 演示将不接受服务器和应用程序重新启动上的消息
【发布时间】:2013-03-14 15:13:56
【问题描述】:
我遵循了 Android 文档提供的演示客户端/服务器教程 (http://developer.android.com/google/gcm/demo.html)。当我第一次尝试时,一切都和宣传的一样。 servlet 首先提出“未注册设备!”屏幕,然后在我的设备上启动演示应用程序,我能够将演示消息发送到设备就好了。
然后我关闭了部署 gcm-demo 战争的 Tomcat 服务器,并关闭了我的设备(不是模拟器,Nexus 7)上的演示客户端应用程序。我启动了 tomcat 服务器备份,我看到它确实按预期部署了 gcm-demo 战争但是当我转到 servlet 的 URL(最初说“没有设备注册!”的那个)时,它现在说没有设备挂号的。我在我的设备上打开了该应用程序,它说该设备已在服务器上注册。为什么 servlet 看不到我已注册的设备?
感谢您的帮助,谢谢。
【问题讨论】:
标签:
android
tomcat
servlets
google-cloud-messaging
【解决方案1】:
我自己没有采用 Tomcat/servlet 方法,而是选择了 Apache/PHP/MySQL 方式,所以我没有直接经验,但是阅读了我在服务器的 Datastore.java 中看到的示例代码作为注释,这个:
/**
* Simple implementation of a data store using standard Java collections.
* <p>
* This class is thread-safe but not persistent (it will lost the data when the
* app is restarted) - it is meant just as an example.
*/
所以基本上当你重新启动 Tomcat 时,它会忘记你的 regId。
【解决方案2】:
@NickT 是对的。如果您想要 regId 的持久存储,您可以使用 java.util.Properties 将数据存储到属性文件中进行备份,或者自己编写一个简单的文件存储。
通过删除缓存或重新安装应用来重置客户端应用的状态。