[Android] 使用Webview進行OAUTH

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. 參考資料

    Android中如何獲得webView中的內容    http://veikr.com/201106/android_webview_content-html.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章