顯示具有 OkHttp 標籤的文章。 顯示所有文章
顯示具有 OkHttp 標籤的文章。 顯示所有文章

2018年2月20日 星期二

[Android] OkHttp3 TLS 1.2 連線寫法

問題:我有WebService連線要用 TLS1.2,那用OkHttp要怎麼寫呢?

參考:OkHttp WikiOkHttp IssuesDevAreaDevAndroid-SSLSocketDevAndroid-SSLContext

說明:
根據DevAndroid-SSLSocket的表格,API16+可支援TLS1.2但不是預設,到API20+才是,那這是甚麼意思呢?

就是說:
  • 你Build.VERSION.SDK_INT<16就完全不能用TLS1.2。
  • 你Build.VERSION.SDK_INT是16~19可以用,但要多寫一些code。
  • 你Build.VERSION.SDK_INT>=20可以用,而且不用多寫code。
有沒有覺得MIN>20好棒呀 XD

那<16的支援方式我就不管了,畢竟現在2018了,新專案還要MIN 15也太低了..


那16~19的寫法簡單說,
  1. 要extends SSLSocketFactory寫一個處理TLS的Factory,叫Tls12SocketFactory 好了,可看OkHttp IssuesDevArea的寫法

  2. 針對Build.VERSION.SDK_INT16~19的要多做以下:
    Tls12SocketFactory tlsSocketFactory = new Tls12SocketFactory(sc.getSocketFactory());
    client.sslSocketFactory(tlsSocketFactory , Platform.get().trustManager(tlsSocketFactory));

    OkHttp Issues中,的client.sslSocketFactory只有第1個參數的寫法已經deprecated了,還是要有第2參數X509TrustManager,可從Factory中取出。

  3. client要再設啥connectionSpecs可再設。
而20+的寫法就是少掉第1、2點即可。


其他關於OkHttp的HTTPS設定,可看OkHttp Wiki



2018年2月6日 星期二

[Android] WebService處理

問題:
我想在App裡處理WebService,跟主機發Http Request(Get/Post),等Response回來,然後parse完結果,秀在UI上,發現有好多工具套件,該怎麼選?

參考:
比較:QuorastromzhangStackOverflow1PacketZoomMediumGetIt01黑客派
分析:SmashingMagzine簡書
教學:CSDN1泡在網上的日子JournalDev綠豆湯DevAndroid1bng86DevAndroid2
GitHub:okHttpVolleyRetrofit

說明:這題有幾個部分要處理喔~

  1. App跟Http主機溝通的元件
  2. UI端跟Http處理元件的溝通
  3. 解析Response回來的結果
這篇就只講"1.App跟Http主機溝通的元件",不然太長了..

先說結論:選OkHttp,如果不喜歡包OkHttp,那就用Volley,完全不喜歡第三方包就HttpURLConnection。

看網路找的結果現在大概會有以下選擇:
  • HttpURLConnection:官方內建元件。
  • OkHttp:Square社製作,網路上大推的元件。
  • Volley:Google社製作,網路上大推的元件。
  • Retorfit:Square社製作,網路上大推的元件。
其實這4個只有前2個是真的Http處理元件,後2個是包裝簡化使用的結果,

如果很早就在寫Android的朋友應該有用過apache的HttpClient,只是它在Android 6.0(API 23)被移除了,所以還在用org.apache.http.legacy的朋友應該可以考慮轉OkHttp,因為Square有做OkHttp Apache HttpClient Implementation,可以減少轉換痛苦。

[更新] HttpClientURLConnection的實作都被OkHttp廢棄(deprecated)了,用舊版應該是可,只是若有BUG沒人修了,原本用法可參考:HttpClient用OKURLConnection用OK
建議使用純okhttp3的寫法囉~

如果喜歡用Volley的,底層連接也可改用okHttp已增進效能,參考簡書這篇,只是看來有點煩。

OkHttp大致上
好處:
壞處:
  • 需額外引入com.squareup.okhttp3:okhttp



複雜的都不想說,有疑問可看參考。

再說一次結論:選OkHttp,如果不喜歡包OkHttp,那就用Volley,完全不喜歡第三方包就HttpURLConnection。

Retorfit的話,建議先用過OkHttp再用會比較理解囉

當然,這四種選哪種都很好查到範例跟資源啦...
而且都能完成GET/POST/HTTPS/憑證綁定(certificate pinning) 等工作...吧 XD