【问题标题】:Chromecast app not connecting on first tryChromecast 应用程序在第一次尝试时未连接
【发布时间】:2014-11-03 00:24:31
【问题描述】:

我正在开发一款已经上市一段时间的 Chromecast 应用。我们开始收到报告说人们在启动后第一次尝试无法连接到 Chromecast。直到最近我们才能重现这种情况(而且只有一台设备恰好表现出这种行为)

Chromecast 图标显示它已连接,但应用程序从未启动。最终,Chromecast 图标显示它已断开连接。我从这个设备上抓了一个 logcat。

D/CastSocket( 1037): [MiniDeviceController-1] onWritable when state is 1
D/CastSocket( 1037): [MiniDeviceController-1] SSLException encountered. Tearing down the socket.
D/CastSocket( 1037): javax.net.ssl.SSLException: Error occured in delegated task:javax.net.ssl.SSLException: Not trusted server certificate
D/CastSocket( 1037):    at com.android.org.conscrypt.HandshakeProtocol.fatalAlert(HandshakeProtocol.java:316)
D/CastSocket( 1037):    at com.android.org.conscrypt.HandshakeProtocol.wrap(HandshakeProtocol.java:268)
D/CastSocket( 1037):    at com.android.org.conscrypt.SSLEngineImpl.wrap(SSLEngineImpl.java:693)
D/CastSocket( 1037):    at javax.net.ssl.SSLEngine.wrap(SSLEngine.java:438)
D/CastSocket( 1037):    at beb.k(SourceFile:671)
D/CastSocket( 1037):    at bef.run(SourceFile:96)
D/CastSocket( 1037):    at java.lang.Thread.run(Thread.java:841)
D/CastSocket( 1037): Caused by: com.android.org.conscrypt.AlertException: javax.net.ssl.SSLException: Not trusted server certificate
D/CastSocket( 1037):    at com.android.org.conscrypt.HandshakeProtocol.fatalAlert(HandshakeProtocol.java:316)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl.verifyServerCert(ClientHandshakeImpl.java:559)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl.processServerHelloDone(ClientHandshakeImpl.java:373)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl$1.run(ClientHandshakeImpl.java:283)
D/CastSocket( 1037):    at com.android.org.conscrypt.DelegatedTask.run(DelegatedTask.java:36)
D/CastSocket( 1037):    at beb.a(SourceFile:721)
D/CastSocket( 1037):    at beb.j(SourceFile:635)
D/CastSocket( 1037):    ... 2 more
D/CastSocket( 1037): Caused by: javax.net.ssl.SSLException: Not trusted server certificate
D/CastSocket( 1037):    ... 9 more
D/CastSocket( 1037): Caused by: java.security.cert.CertificateNotYetValidException
D/CastSocket( 1037):    at com.android.org.conscrypt.OpenSSLX509Certificate.checkValidity(OpenSSLX509Certificate.java:216)
D/CastSocket( 1037):    at com.android.org.conscrypt.OpenSSLX509Certificate.checkValidity(OpenSSLX509Certificate.java:209)
D/CastSocket( 1037):    at bdu.checkServerTrusted(SourceFile:47)
D/CastSocket( 1037):    at com.android.org.conscrypt.ClientHandshakeImpl.verifyServerCert(ClientHandshakeImpl.java:556)
D/CastSocket( 1037):    ... 7 more
D/CastSocketMultiplexer( 1037): *** removing socket CastSocket:MiniDeviceController-1 (onWritable)
D/CastSocket( 1037): [MiniDeviceController-1] doTeardown with reason=4
D/DeviceFilter( 1037): DEACTIVATE MiniDeviceController-1; finished=false
D/DeviceFilter( 1037): socket is disconnected
D/CastMediaRouteProvider( 1037): onDeviceFilterError for 516b4a3a710d7bdfe8dc75ff4c4901a0: connection failed: error=4

这似乎都在 Google Play 服务的 Chromecast API 中。我们使用 Amazon S3 来托管和使用他们的 SSL 证书。奇怪的是,在这个初始错误之后,设备确实连接了。我一直无法将我的大脑包裹在这个问题上。我们的应用仅适用于 Android 设备,并非所有设备都会出现这种行为。

【问题讨论】:

  • 你能捕捉到异常并重试吗?第二个请求应该是好的
  • 调用connect时,是否收到onConnected()回调?应该不需要在应用程序中捕获异常并重试。
  • 我需要追踪出现错误的设备并调试我是否收到了 onConnected() 回调。我会在测试后更新。
  • 请记住,在您收到 onConnected 之前,您不应尝试启动您的应用
  • 在收到 onConnected 回调之前,我们不会尝试启动应用程序。

标签: android chromecast google-cast


【解决方案1】:

“CertificateNotYetValidException”异常通常在客户端时钟关闭时发生。可能遇到此问题的用户的当前日期设置在过去。您可以通过将设备的当前日期更改为过去的日期来重现此情况。

【讨论】:

  • 有趣的是,当休息 2 小时时,无法看到 Chromecast。它没有重现我描述的问题。
猜你喜欢
  • 2011-11-10
  • 2021-05-04
  • 2014-03-04
  • 1970-01-01
  • 1970-01-01
  • 2016-07-11
  • 2015-02-11
  • 2014-06-04
  • 1970-01-01
相关资源
最近更新 更多