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

tom*_*ozb 3 google-app-engine android certificate ssl-certificate google-cloud-endpoints

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

应用程序实例的默认根路径如下:

xxx.appspot.com
Run Code Online (Sandbox Code Playgroud)

这两个实例都可以访问(或应该)使用:

https://1.xxx.appspot.com    // version 1
https://2.xxx.appspot.com    // version 2
Run Code Online (Sandbox Code Playgroud)

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

NET::ERR_CERT_COMMON_NAME_INVALID
Run Code Online (Sandbox Code Playgroud)

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

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

builder.setRootUrl(https://2.xxx.appspot.com);
Run Code Online (Sandbox Code Playgroud)

那失败了:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

最后的结果是:

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)
Run Code Online (Sandbox Code Playgroud)

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

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

tom*_*ozb 5

显然解决方案是在文档中:

请注意,在2013年4月,谷歌停止发放的SSL证书在appspot.com托管双通配符域(即 . .appspot.com的).如果您依赖此类URL来访问您的应用程序,请更改任何应用程序逻辑以使用"-dot-"而不是".".例如,要访问应用程序"myapp"的版本"1",请使用" https://1-dot-myapp.appspot.com "而不是" https://1.myapp.appspot.com".如果继续使用" https://1.myapp.appspot.com ",则证书将不匹配,这将导致任何期望URL和证书完全匹配的User-Agent出错.

总之我不得不更换2.2-dot-