在Android中使用自定义版本的App Engine应用

时间:2014-12-14 23:44:17

标签: android google-app-engine certificate ssl-certificate google-cloud-endpoints

我正在尝试在Android应用中使用非默认的App Engine应用版本。默认的App Engine应用版本为1,我上传了新版本2并希望使用Android应用进行测试。

app实例的默认根路径如下:

xxx.appspot.com

两个实例都可以使用:

访问(或应该)
https://1.xxx.appspot.com    // version 1
https://2.xxx.appspot.com    // version 2

第一个问题是通过浏览器测试它。在Chrome中,由于错误消息Your connection is not private,您无法对其进行测试。看起来像*.appspot.com的证书问题:

NET::ERR_CERT_COMMON_NAME_INVALID

您可以使用Firefox解决此问题,并将指定的网站添加为可信任的网站。因此,假设第二个版本是通过浏览器测试的,有时间使用Android应用程序进行测试。

我更改了将新URL传递给构建器的端点根URL:

builder.setRootUrl(https://2.xxx.appspot.com);

失败了:

java.io.IOException: Hostname '2.xxx.appspot.com' was not verified
     at com.android.okhttp.Connection.upgradeToTls(Connection.java:1026)
     at com.android.okhttp.Connection.connect(Connection.java:963)
     at com.android.okhttp.internal.http.HttpEngine.connect(HttpEngine.java:405)

快速搜索SO并且有一个快速而肮脏的解决方案(我不会在生产中使用它,甚至不测试应用程序。当然应该执行主机名检查,例如使用默认验证程序然后如果默认返回false使用我的后备验证程序):

HttpsURLConnection.setDefaultHostnameVerifier(new HostnameVerifier() {
    @Override
    public boolean verify(String hostname, SSLSession session) {
        return true;
    }
});

最终结果:

com.google.api.client.googleapis.json.GoogleJsonResponseException: 404 Not Found
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.newExceptionOnError(ProGuard:113)
    at com.google.api.client.googleapis.services.json.AbstractGoogleJsonClientRequest.set(ProGuard:40)
    at com.google.api.client.googleapis.services.AbstractGoogleClientRequest$1.interceptResponse(ProGuard:312)

无论我使用哪个版本,最终都是404.唯一有效的URL是https://xxx.appspot.com我确定我尝试调用的方法存在于端点上,因为我可以使用Firefox调用它。

有关如何使用Android应用测试新App Engine应用版本的任何建议吗?证书验证失败是否为错误,或者这是*.appspot.com仅匹配xxx.appspot.com但与x.xxx.appspot.com不匹配的正确行为?

1 个答案:

答案 0 :(得分:5)

显然解决方案在文档中:

  

请注意,2013年4月,Google停止发布SSL   appspot.com上托管的双通配符域的证书(即    .appspot.com的)。如果您依赖此类URL来访问您的应用程序,请更改任何应用程序逻辑以使用“-dot-”   代替 ”。”。例如,要访问应用程序的版本“1”   “myapp”使用“https://1-dot-myapp.appspot.com”代替   “https://1.myapp.appspot.com”。如果继续使用   “https://1.myapp.appspot.com”证书不匹配,哪个   将导致任何需要URL和的User-Agent出错   证书完全匹配。

简而言之,我必须将2.替换为2-dot-