1. 源起
最近在弄Google登入,Google登入要求手機上必須按照Google Play Service,有些手機比如小米,沒有Google Play Servcie,因此,有必要實現一個webview的登入方式。 Google的跳轉由Server端進行了配置,我們只需要請求一個URL,跳轉到Google 的授權頁面,授權後,跳轉到Server那邊,Server取得使用者資訊,然後將使用者資訊返回到一個地址上。最終只需要解析返回的頁面結果即可。
2. 代碼實現
permission <uses-permission android:name="android.permission.INTERNET" />
清空cookie try { CookieSyncManager.createInstance(this); CookieManager.getInstance().removeAllCookie(); } catch (Exception e) { Log.d("Google Login", "Clear cookie failed"); }
最終的頁面檢測 WebView webview = (WebView) findViewById(R.id.login); webview.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { if (url.contains(succeedUrl)) Log.d("Google Login", "onPageFinished, url = " + url); } }); webview.loadUrl(requestUrl);
頁面內容的擷取,需要用JS來調用JAVA代碼 class Handler { @JavascriptInterface // api level17要加這個,不加的話也不報錯,就是不調用,折騰了1個半小時啊,淚流滿面。 public void show(String data) { Log.d("Google Login", "handler, show, data = " + data); System.out.println("data = " + data); } } webview.getSettings().setJavaScriptEnabled(true); // 設定JS可用 webview.addJavascriptInterface(new Handler(), "handler"); // 註冊Handler對象,並且命名為handler public void onPageFinished(WebView view, String url) { if (url.contains(succeedUrl)) Log.d("Google Login", "onPageFinished, url = " + url); view.loadUrl("javascript:window.handler.show(document.body.innerHTML);"); } });
3. 參考資料 清除cookie http://developer.android.com/reference/android/webkit/CookieSyncManager.html Android中如何獲得webView中的內容 http://veikr.com/201106/android_webview_content-html.html