5

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

但是,既然我有实际用户,我希望能够在将任何应用程序引擎 API 更改部署到生产之前在本地测试这一切,而且我还没有弄清楚如何让 Android 应用程序与我的本地开发服务器通信任何地方。测试建议建议我只是对API Explorer 进行一些手动修改,但由于我使用 Endpoints Proto Datastore 作为我的 API,这使得 Android 开发变得容易,它也使 API Explorer 基本上没用,因为我需要的调用制作比我手工生成的要复杂得多。

这个问题的一个答案表明有一种方法可以将 Android 客户端指向本地服务器,但是虽然我可以使用 --host 参数让 dev_appserver 的默认服务器侦听 localhost 以外的其他东西,但我似乎无法找到一种对 API 服务器执行相同操作的方法。即使我能做到这一点,它也可能只是为我的 Android 应用程序建立完整的端到端本地测试设置的第一步。

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

4

2 回答 2

8

好的,终于成功了,谢谢你的提示,丹!以下是可以节省我几个小时的剩余细节 - 希望这对其他人有帮助。

1)正如我之前所预料和提到的,dev_appserver.py 需要使用 --host=0.0.0.0 运行,以便它可以在本地网络上监听。

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

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

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

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

于 2013-04-19T04:33:43.480 回答
2

在本地环境中,dev_appserver 是 API 服务器。如果您已将其配置为可以从 localhost 以外的机器(即网络上的另一台机器/设备)访问它,那么 API 请求也应该可以访问。

但是,当前本地服务器和 gzip 请求存在问题。在解决此问题之前,您需要在 Android 应用程序的客户端库中禁用 gzipping(请参阅这篇文章)。

于 2013-04-18T18:17:09.207 回答