大叔也說(shuo)Xamarin~Android篇~原生(sheng)登陸與WebView的網站如(ru)何共享Session
事情(qing)是這(zhe)樣的(de)(de),我(wo)(wo)們(men)最近(jin)開了一(yi)個(ge)(ge)(ge)APP,主(zhu)要使(shi)用xamarin做了一(yi)個(ge)(ge)(ge)登陸,它與服務(wu)器(qi)API進(jin)行(xing)數據通訊,當用戶名(ming)密碼正確去,跳轉到(dao)新(xin)的(de)(de)activity,并在webview控件中(zhong)(zhong)打開服務(wu)端(duan)(duan)的(de)(de)Html5頁(ye)面,而h5頁(ye)面有些需(xu)要進(jin)行(xing)授權(quan)才能訪(fang)問(wen),如用戶中(zhong)(zhong)心(xin),我(wo)(wo)的(de)(de)訂單,我(wo)(wo)的(de)(de)商品(pin)等(deng)等(deng),而我(wo)(wo)們(men)的(de)(de)登陸是在原(yuan)生(sheng)的(de)(de)activity里實(shi)現的(de)(de),在登陸成(cheng)功后服務(wu)端(duan)(duan)會向它分配一(yi)個(ge)(ge)(ge)SessionID,并存儲(chu)在客戶端(duan)(duan),以做為(wei)下(xia)次訪(fang)問(wen)的(de)(de)標識,而使(shi)用webview進(jin)行(xing)訪(fang)問(wen)頁(ye)面時,這(zhe)個(ge)(ge)(ge)sessionID和之前(qian)的(de)(de)是不同(tong)的(de)(de),所以,在之前(qian)的(de)(de)授權(quan)是無效的(de)(de),為(wei)了解決這(zhe)個(ge)(ge)(ge)問(wen)題,我(wo)(wo)們(men)需(xu)要讓原(yuan)生(sheng)和H5網站(zhan)的(de)(de)sessionID進(jin)行(xing)同(tong)步!
Login Activity內容
if (msg.State == "200") { var ccd = new List<string>(response.Result.Headers.GetValues("Set-Cookie")); var arr = ccd[0].Split(new char[] { ';' })[0].Split(new char[] { '=' })[1]; Toast.MakeText(this, "sessionid=" + arr, ToastLength.Short).Show(); ConfigData.SessionID = arr; Intent intent = new Intent(this, typeof(PageActivity)); StartActivity(intent); }
然后在(zai)Page Activity中將(jiang)這個sessionID寫到對應(ying)的域(yu)名中
CookieSyncManager.CreateInstance(this); CookieManager cookieManager = CookieManager.Instance; cookieManager.SetCookie(GetString(Resource.String.apiHost), "ASP.NET_SessionId=" + ConfigData.SessionID); var webView = FindViewById<WebView>(Resource.Id.webView); webView.Settings.JavaScriptEnabled = true; webView.LoadUrl(api); webView.SetWebViewClient(new CustWebViewClient());
在上(shang)面的代碼中,我定義(yi)了一個全局變量(liang),用來保存當前的sessionID
public static class ConfigData { public static string SessionID { get; set; } }
這個對象是靜態的,屬(shu)性也是靜態的,這說明它是一個在程序啟動時就會被初始化的對象!