在 Android 開發中,WebView 是一個強大的組件,可用於在應用內直接顯示網頁內容。但有時候我們需要從原生端向網頁傳遞資料(例如使用者帳號),讓伺服器根據該資料動態載入不同的頁面。本文將介紹兩種主流的實作方式。
最簡單的方式是將資料作為查詢參數附加在 URL 後方,然後呼叫 loadUrl()。這就如同在瀏覽器地址列輸入帶參數的網址一樣。
String username = "user123";
String url = "https://example.com/profile?username=" + username;
webView.loadUrl(url);
優點是實作簡單,無需修改網頁端代碼;缺點是資料會暴露在 URL 中,不適合傳遞敏感資訊。
若不想讓使用者看到參數,或需進行複雜的業務邏輯(如登入驗證、取得 Token),可在原生層使用 HttpURLConnection 或 OkHttp 等網路庫與伺服器溝通,取得結果後再決定載入的頁面,甚至將 Cookie 同步給 WebView。
// 範例:發送 POST 請求取得導向頁面
new Thread(() -> {
try {
URL url = new URL("https://api.example.com/login");
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
// 寫入請求體...
// 處理回應,取得目標 URL 或 Cookie
runOnUiThread(() -> {
// 同步 Cookie
CookieManager.getInstance().setCookie(targetUrl, sessionCookie);
webView.loadUrl(targetUrl);
});
} catch (Exception e) {
e.printStackTrace();
}
}).start();
此方式安全性較高,且能靈活控制跳轉邏輯。
根據業務需求選擇:單純傳遞非敏感參數用 URL 參數最快;涉及認證、加密或複雜流程時,建議採用後台 HTTP 交互再導向 WebView。