Token錯誤處理
所謂的token,就像一把有使用期限的鑰匙。
在多數時候,你不必擔心token失效。但是在某些情況下(例如:用戶太久沒登入,或是系統判別token安全性不足),可能造成token失效。這時候,你就必須做一些處理。例如重新啟動app。
你可以在兩個層級設定token錯誤時的處理方式
App層級: 在這個層級中,預設是不會做任何事。而你可以透過下面的方式設定為重開APP。
DevApi.setDefaultTokenInvalidAction(DevApi.TokenInvalidAction.RESTART_APP);Api層級:在每個call back中,都可以透過覆寫方式
onTokenInvalid方法。該方法需要回傳布林值,代表該事件是否已經消耗。如果你想要把事件繼續交由App層級處理,你可以返回false。反之,如果事件處理到此為止,則返回true。
你可能會覺得每個call back都要錯誤處理很麻煩。那麼,你可以繼承DevResponseListener並實做onTokenInvalid方法。並在你的call back中使用它(詳見範例)。
Example
我們拿前面登入的範例來看,如果用戶很久沒有開啟APP了,那在DevApi.init時讀入的token可能過期了。
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DevApi.init(getApplication(), "YOUR_APP", "YOUR_APP_KEY", "YOUR_APP_SECRET");
if(Devapi.isLogin()){
try {
//送出http請求
DevApi.request("/@admin/user/view", new MyResponseListener() {
@Override
public void onSuccess(JSONObject result) {}
});
}catch (Exception e) {
e.printStackTrace();
}
}
}
class MyResponseListener extends DevResponseListener {
@Override
public void onSuccess(JSONObject result) {
}
@Override
public boolean onTokenInvalid() {
Toast.makeText(MainActivity.this, "請重新登入",Toast.LENGTH_SHORT).show();
return true;
}
}