2016年2月26日 星期五

Android 開發 (114) retrofit with rxjava = callback hell?

最近有機會研究了一下retrofit + rxjava ,使用起來真的很方便
不過實際套用到project裡之後,發現了一些可怕的東西


首先我們先看一下下面這段code


我在某個頁面必須發送兩個api,而第二隻api 必須根據前一隻api的結果從相對應的動作,
這樣看起來似乎還好,還算看得懂,雖然中間的if else 有點看不出來是哪隻api的

但是當有三隻四隻五隻互相相依的api那會變怎樣?
















上面的程式碼還沒有加上if else 還有一些邏輯....
我相信大部分的人看到這樣的程式碼加上一堆if else 的話都會直接回應WTF!!!
為了避免之後幫我維護程式碼的其他同事著想
我稍微上網查了一下是否有辦法避掉這個可怕的結構

解法
我們可以使用flapMap operation 來避掉這個問題

如下面的範例



首先,所有api 的邏輯都可以分散在各個 flapmap 而且可以很清楚的看懂,
而且,不會有callback hell的問題



再回來看一下剛剛四隻api的寫法
是不是好懂多了!!

不過今天講的解法只能使用在serial call,至於parallel call 要怎麼處理?

那就是下次的事情了XD

2016年2月23日 星期二

Android 開發 (113) Best Practices for Unique Identifiers

最近在逛android developer的時候,無意間發現了這個頁面
http://developer.android.com/intl/zh-tw/training/articles/user-data-ids.html
裡面說明了各種用來辨識user的情境,以及可以用什麼資料來判斷才是正確的解法,


舉例來說,以前我們總是利用
//Returns the unique device ID, for example, the IMEI for GSM and the MEID or ESN for CDMA phones.

TelephonyManager tm = (TelephonyManager) context.getSystemService(Context.TELEPHONY_SERVICE);
String id = tm.getDeviceId();


或者是Android ID
id = Secure.getString(context.getContentResolver(), Secure.ANDROID_ID);


如今google 推薦可以使用mac address,但是必須使用官方的取得方式才行
如下


裡面還有提了如何預防DDOS的方法


不過似乎是android 限定
http://developer.android.com/intl/zh-tw/training/safetynet/index.html



利用api 取得JwsResult之後,假設 ctsProfileMatch = true
代表驗證成功,接著還必須利用api 再次驗證資料無誤,才算認證成功



上面的連結其實還提供了很多相關的情境,歡迎大家在實作的時候可以拿去參考

2016年2月22日 星期一

Android 開發 (112) Cloud Test Lab

相信有在做測試的大家常常會遇到一個問題,測試跑在自己的機台上,好花時間而且我的機台又不夠多,更不用說android 4.4 5.0 6.0 版本的問題了

現在google 提供了一個solution,你只需要上傳你的測試apk 點選你想要的device 和version,然後按下測試,接著去泡杯咖啡,之後report就會自動產生出來囉!!

先看一下該如何設定

首先必須先將 android studio 升級到1.3+以上

接著前往test case 設定的地方,點選Target 到 Cloud Test Lab Device Matrix
然後在Matrix configuation 可以設定想測試的device / sdk version / 直版橫版
記得第一次設定的時候必須連結到google 帳號(該帳號必須啟用付費專案),才可以使用
(目前cloud test Lab 是freetrialing所以不用擔心charge的問題XD)

接著設定完成後直接點擊平常測試的那個Run鍵一切就開始了....
接著可以在logcat裡面看到相關訊息

點擊該連結就可以看到網頁版,以下是測試結果(可以看到我的測項都fail了 Orz..)



當然,除了使用android studio外,你也可以使用網頁版
直接使用google developer帳號,search Cloud Test Lab
就可以找到相關使用功能

網頁版的操作也很簡單,你只需要上傳apk接著點擊測試就完成了,如下


對於我們這種device 數以及sdk 數相對不足的開發者
cloud test 真的很方便啊,幫小弟省了很多$$ ,不知道之後的價錢會是怎樣,
不過目前是免費,大家就盡量嘗試吧!!