Token錯誤處理

所謂的token,就像一把有使用期限的鑰匙。

在多數時候,你不必擔心token失效。但是在某些情況下(例如:用戶太久沒登入,或是系統判別token安全性不足),可能造成token失效。這時候,你就必須做一些處理。例如重新啟動app。

你可以在兩個層級設定token錯誤時的處理方式

  1. App層級: 在這個層級中,預設是不會做任何事。而你可以透過下面的方式設定為重開APP。

    DevApi.setDefaultTokenInvalidAction(DevApi.TokenInvalidAction.RESTART_APP);
    
  2. 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;
    }
}