我在做自動登錄的時候遇到的坑,特寫此文以提醒各位不要把自己繞進去了。
我們都知道在web端的cookie是可以通過服務器端設置保存的,默認是關閉瀏覽器就清除cookie的,但是可以在服務器端設置cookie的有效期,瀏覽器就會自動保存cookie,而在Android上是不會自動保存cookie,我用的是Okhttp3,我找不到response.addCookie(cookie)和request.getCookies()的方法(Java web的操作),如果沒有保存和重發cookie給服務器的話,是不會自動登錄的。搞了大半天才知道這一切都在head裏。
如果是Okhttp3的話是這樣的

在日誌輸出的cookie

通過這樣的方法我們已經拿到了cookie,接下來就是保存cookie了,寫以下的靜態方法來將cookie保存到SharedPreferces,我的設計思想是儘量少操作數據庫。
public static final String ISLOGINED = "islogined";
public static final String COOKIE = "cookie";
public static void saveCookiePreference(Context context, String value) {
SharedPreferences preference = context.getSharedPreferences(ISLOGINED, Context.MODE_PRIVATE);
SharedPreferences.Editor editor = preference.edit();
editor.putString(COOKIE, value);
editor.apply();
}
然後調用該方法保存cookie

然後再寫一個方法來在SharedPreferces獲取cookie的值
public static String getCookiePreference(Context context) {
SharedPreferences preference = context.getSharedPreferences(ISLOGINED, Context.MODE_PRIVATE);
String s = preference.getString(COOKIE, "");
return s;
}
最後要做的是在每次的請求時帶上cookie,這cookie是放在head裏。

這樣就可以實現自動登錄了。