使用适用于Google App Engine的Cloud Endpoints对Android App进行本地测试

时间:2013-04-18 03:06:31

标签: android google-app-engine google-cloud-endpoints endpoints-proto-datastore

我正在开发一款Android应用,它在Google App Engine上使用Google Cloud Endpoints(在Python中)作为后端。 Android应用程序授权用户在Android设备上使用Google Play服务,这一切都非常有效。

但是,现在我有实际用户,我希望能够在将任何应用引擎API更改部署到生产环境之前在本地进行全部测试,而且我还没想出如何让Android应用与我交流本地开发服务器。 testing recommendations建议我只是对API资源管理器进行一些手动修改,但由于我正在使用端点Proto数据存储区来实现我的API,这使得Android开发变得简单,这也使得API Explorer基本上无用,因为我需要做的电话比我手工制作的要复杂得多。

this question的一个答案表明有一种方法可以将Android客户端指向本地服务器,但是我可以使用--host参数让dev_appserver的默认服务器侦听除localhost之外的其他内容,我似乎找不到为API服务器做同样的方法。即使我能做到这一点,它可能只是我的Android应用程序完整的端到端本地测试设置的第一步。

有人可以发布有关我如何执行此操作的更多详细信息,或者说没有,请告诉我有关在App Engine上测试使用Google Cloud Endpoints的Android应用的最佳做法吗?提前感谢您的任何答案。

2 个答案:

答案 0 :(得分:8)

好吧,终于搞定了,感谢提示,丹!这些剩余的细节可以让我节省几个小时 - 希望这对其他人有帮助。

1)正如我前面提到的那样,dev_appserver.py需要运行--host = 0.0.0.0才能在本地网络上监听。

2)为了正确解析ID令牌以使用户身份验证工作,您需要安装PyCrypto库 - 默认情况下不会安装它,所以只在app.yaml中使用它是不够的。我找到了Windows here的二进制文件。

3)然后,在我生成的Tictactoe.java等效类中,我不得不将DEFAULT_ROOT_URL更改为http://<my-local-machine>:8080/_ah/api/(我的本地计算机正在运行的地方),以便请求转到本地网络。或者(也许可以更少侵入性),您可以使用builder.setRootUrl从初始化构建器的任何位置使用相同的地址。这样就不会破坏生成的类。

4)我还必须做出Dan提到的改变here

完成这四件事后,现在一切似乎都在运行,我可以在本地测试我的应用程序 - 万岁!

答案 1 :(得分:2)

在本地环境中,dev_appserver是API服务器。如果您已对其进行配置,以便可以从localhost以外的计算机(即网络上的其他计算机/设备)访问它,则也可以访问API请求。

但是,目前有issue本地服务器和gzip压缩请求。在修复之前,您需要在Android应用中的客户端库中禁用gzipping(请参阅此post)。