Dla mojej aplikacji, Transdroid, łączę się ze zdalnymi serwerami za pośrednictwem protokołu HTTP i opcjonalnie bezpiecznie przez HTTPS. W przypadku tych połączeń HTTPS z HttpClient używam niestandardowej implementacji gniazda SSL, aby upewnić się, że certyfikaty z podpisem własnym działają. Zasadniczo akceptuję wszystko i ignoruję każde sprawdzanie jakiegokolwiek certyfikatu.Niestandardowa obsługa SSL przestała działać w systemie Android 2.2 FroYo
To działa już od jakiegoś czasu, ale nie działa już na Androida 2.2 FroYo. Kiedy próbuje się połączyć, zwróci wyjątek:
java.io.IOException: SSL handshake failure: I/O error during system call, Broken pipe
Oto jak zainicjować httpclient:
SchemeRegistry registry = new SchemeRegistry();
registry.register(new Scheme("http", new PlainSocketFactory(), 80));
registry.register(new Scheme("https", (trustAll ? new FakeSocketFactory() : SSLSocketFactory.getSocketFactory()), 443));
client = new DefaultHttpClient(new ThreadSafeClientConnManager(httpParams, registry), httpParams);
mogę skorzystać z FakeSocketFactory i FakeTrustManager, których źródłem może być znaleziony here .
Ponownie, nie rozumiem, dlaczego nagle przestało działać, a nawet, co oznacza błąd "Broken pipe". Widziałem wiadomości na Twitterze, że Seesmic i Twidroid zawodzą z włączonym SSL w FroYo, ale nie jestem pewien, czy jest to powiązane.
Dzięki za wszelkie wskazówki/pomoc!
miałem ten sam problem. Dziękuję bardzo za to szybkie i łatwe rozwiązanie. –
Ta poprawka sama dla mnie nie rozwiązała problemu - stwierdziłem, że muszę zwiększyć priorytet wątku, w którym ustanowiono połączenie z gniazdem do THREAD_PRIORITY_URGENT_AUDIO (a następnie ustawić priorytet z powrotem na THREAD_PRIORITY_MORE_FAVORABLE po nawiązaniu połączenia ustanowiony). W tym konkretnym przypadku podejrzewam, że animacja zużywała zbyt dużo procesora :-( – tonys
jak to zrobić? Tony? – Mikey