【发布时间】:2016-05-25 06:32:13
【问题描述】:
在Android 上初始化Parse 时,我能够在以下情况下成功连接到 Parse 服务器:
1) 我没有指定服务器 URL,或者
2) 我将服务器 URL 设置为 Parse 服务器。
因为我们打算最终将我们的数据从 Parse 迁移到不同的主机,所以我们希望连接到不同的服务器 URL。
但是,当我尝试指定重定向(用作代理)到 Parse 服务器的不同服务器 URL (https://api.ourhostname.com/1/) 时,应用程序无法完全连接到服务器。从 iOS 项目实现时,此服务器 URL 可以正常工作。但是,当在 Android 等效设备上实现时:
Parse.initialize(new Parse.Configuration.Builder(this)
.applicationId(APP_ID)
.clientKey(CLIENT_KEY)
.server("https://api.ourhostname.com/1/")
.build()
);
我收到一个 i/o 故障:
05-24 21:46:55.319 7140-7140/com.ourapp W/System.err: com.parse.ParseRequest$ParseRequestException: i/o failure
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: at com.parse.ParseRequest.newTemporaryException(ParseRequest.java:290)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: at com.parse.ParseRequest$2.then(ParseRequest.java:145)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: at com.parse.ParseRequest$2.then(ParseRequest.java:139)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: at bolts.Task$15.run(Task.java:917)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1112)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:587)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: at java.lang.Thread.run(Thread.java:818)
05-24 21:46:55.324 7140-7140/com.ourapp W/System.err: Caused by: javax.net.ssl.SSLPeerUnverifiedException: Cannot verify hostname: api.ourhostname.com
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err: at android.net.SSLCertificateSocketFactory.verifyHostname(SSLCertificateSocketFactory.java:242)
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err: at android.net.SSLCertificateSocketFactory.createSocket(SSLCertificateSocketFactory.java:486)
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err: at com.android.okhttp.Connection.upgradeToTls(Connection.java:1226)
05-24 21:46:55.329 7140-7140/com.ourapp W/System.err: at com.android.okhttp.Connection.connect(Connection.java:1183)
...
通过网络浏览器,我可以访问我们的自定义服务器 URL,该 URL 在浏览器中是受信任且有效的,这意味着它不是自签名的。
有没有其他人在他们的 Android 项目中遇到过这个问题,以及关于如何成功让 Parse SDK 连接到自定义服务器 URL 的任何建议?
更新:
我们能够通过以下方式解决此问题:
1)在Android端添加this solution。
2) 调整我们的自定义服务器提供其公钥的方式(这对于让 Marshmallow 连接到服务器尤其重要)。
【问题讨论】:
-
你解决了吗?我在这里面临同样的问题
-
@gfpacheco 我已经更新了帖子,说明了我们如何解决问题。
标签: android parse-platform hostname