編輯:關於Android編程
前言
單點登錄SSO(Single Sign On)說得簡單點就是在一個多系統共存的環境下,用戶在一處登錄後,就不用在其他系統中登錄,也就是用戶的一次登錄能得到其他所有系統的信任。單點登錄在大型網站裡使用得非常頻繁,例如像阿裡巴巴這樣的網站,在網站的背後是成百上千的子系統,用戶一次操作或交易可能涉及到幾十個子系統的協作,如果每個子系統都需要用戶認證,不僅用戶會瘋掉,各子系統也會為這種重復認證授權的邏輯搞瘋掉。實現單點登錄說到底就是要解決如何產生和存儲那個信任,再就是其他系統如何驗證這個信任的有效性,因此要點也就以下兩個:
存儲信任
驗證信任
如果一個系統做到了開頭所講的效果,也就算單點登錄,下面就來看看在Android端實現單點登錄的方法。
服務端
服務端需要集成Token,每次在app登錄時為app分配新的token,如果在某次http請求中app傳遞token不是最新的,則視為需要重新登錄(或者根據自己需要後台設定token有效時間,過期視為Token失效,需要重新登錄).在token失效的情況下,返回約定好的code
Android端監聽
App如何知道已經在其他設備登錄了呢,一般可以有三種方式
1.api請求中後台返回特定code
這種是最常見的方式,缺點是需要下次api請求才知道被踢下線,可以在網絡層實體模型的基類BaseModel中處理,對code進行判斷
switch (code) { case 1: break; case 3://被踢下線 //Do Something break; }
2.推送
後台推送給app,從而app得知該賬戶在其他設備登錄了,進而執行下線操作,優點是可以及時響應
3.使用第三方的監聽器
很多時候app會集成一些第三方的賬戶系統,例如在集成了環信的app中,每個用戶對應一個環信的imUserName,環信自身有提供連接狀態的接聽,通過監聽環信的用戶狀態,從而達到監聽app自身用戶系統的效果
EMClient.getInstance().addConnectionListener(this);
Android被踢下線後的操作
不管是哪種監聽方式,最後的操作都是一樣的,可以根據自己的需求進行對應的操作.這裡提供一種常規化的下線流程.
從棧頂取到當前的前台Activity,Dialog提示用戶,點擊後跳轉登錄頁
首先,任意地方獲取到前台Activity
public Activity getTaskTop() { return mActivities.get(mActivities.size() - 1); }
然後在主線程彈出dialog
private void onConnectionConflict() {//被踢下線處理 SPUtils.logout(); final Activity taskTop = ActivityManager.getInstance().getTaskTop(); if (taskTop == null) return; new Handler(Looper.getMainLooper()).post(new Runnable() { @Override public void run() { MDdialogFactory.CreateMustOkDia(taskTop, "您的賬號已在其他終端登錄,請重新登錄", new MDCallBack() { @Override public void onMdCall(@NonNull MaterialDialog dialog, @NonNull DialogAction which) { Intent intent = new Intent(taskTop, LoginActivity.class); intent.putExtra(ConstantKey.MUST_LOGIN_KEY, true); taskTop.startActivity(intent); } }).show(); } }); }
這裡做一些說明
由於監聽到被踢下線的環境不一定在主線程,所以需要切換到主線程進行彈出Dilaog
new Handler(Looper.getMainLooper()).post(Runnable r)
這裡的dialog是強制的,取消不了(這裡dialog是自定義的,用系統的也是可以的,這不是重點)
builder.cancelable(false); builder.canceledOnTouchOutside(false);
總結
以上就是這篇文章的全部內容了,希望本文的內容對各位Android開發者們能有所幫助,如果有疑問大家可以留言交流。
接著上篇文章,現在在通過Android實際開發和源碼再探觀察者模式,listview是我們日常開發中必用的控件,雖然之前就有listview的替代品(recyclervi
Fiddler是一個HTTP協議調試代理工具,在開發網絡應用的時候經常會用到,其最基本的作用是能抓HTTP的數據包,當然它還有更高級的用法,如添加斷點、修改請求與相應的數
本文實例介紹了Android廣告輪播圖效果實現方法,分享給大家供大家參考,具體內容如下首先看下一下布局文件:<RelativeLayout xmlns:androi
前言回過頭來審視之前做過的Android項目,發覺自己重新開發時忽然間不知所措了,間隔了太長時間沒有開發導致自己的Android技能知識急劇下降。溫故而知新。廢話少說,進