[Android][Kotlin][RxJava]「進階篇」RxJava 進階用法 -一個extension funcion實現所有網路連線Token重取重連
Hi ,大家好 ,很久沒發文了,今天要來分享一個自己摸索出來的RxJava搭配網路請求(如:OkHttp + Retrofit )的情況下,重取Token並重新請求同一個連線的方法,當然這個問題,是很常在一個重度連線需求的APP中碰到的,當需要跟server做請求時,因為需要確認是合法使用者,通常會使用Token的機制去確認使用者登入或存取Api的合法性,而通常Token伴隨著過期的設計,為了讓使用體驗很順,在沒有意識到app某個網路請求中間做了重取Token的動作,所以必需要達到一個更完善的流程。
在本篇,我會用到相關知識列出如下,但本篇主要想分享實現Token重取網路連線重連的過程,故不會特別一一細聊,如果大家有興趣可以去查,或者留言討論:
* Genetic
* Kotlin extension
* Kotlin function type
* RxJava
* Retrofit
* Okhttp
通常,當剛開始學會用app串接一個有Token機制的網路連線API時,在沒有做任何配套措施時,實際跑的流程可能是:
App網路請求 -> Token過期 -> Server回傳存取過期 -> App根據錯誤做出對應處理
所以通常這種情況下,雖然有做出錯誤處理,但是因為只要每當Token過期,就會跳出錯誤處理(例如:告知使用者超過連線時間等),可能跳一次兩次還好,使用者以為是偶發狀況,但當多次後,使用者則可能認為你的App有問題,沒辦法很順的執行下去,因此使用體驗下降,造成後續更多問題。
所以這邊我預期,能讓Token重取後,原本的網路連線能夠重新執行,希望有類似如下流程:
App網路請求 -> Token過期 -> Server回傳存取過期 -> 執行重取Token流程 -> App重新執行同個網路請求
在這篇,我主要使用的連線請求方式是 RxJava 的操作符,封裝Retrofit並套用OkHttp去請求網路Api,這邊分享一種我網路請求的方式: