我正在尝试在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
不匹配的正确行为?
答案 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-