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

[Android] 使用Webview进行OAUTH的更多相关文章

  1. Android中webView和网页的交互

     Android中webView和网页的交互 Android中webView跟网页的交互式通过JavaScript进行的.具体步骤: 1.创建JavaScript,在点击的时候调用JavaScript ...

  2. Android 显示 WebView ,加载URL 时,向webview的 header 里面传递参数

    1.主要布局 <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:and ...

  3. Android中Webview使用自定义的javascript进行回调

    先说为什么需要讨论这个问题. 现在很多的手机应用,都可能会直接嵌入一个web页面.这样做的好处:一个是功能更新方便,维护起来容易,只需要维护服务器的页面即可,不需要更新客户端:另一个是功能通用,不仅a ...

  4. android使用Webview上传图片

    package com.example.webview; import java.io.File; import android.net.Uri;import android.os.Bundle;im ...

  5. Android之 -WebView实现离线缓存阅读

    前言 本篇博客要实现的是一个离线下载和离线阅读的功能,这是很多阅读类app都常见的一个功能,典型的应用就是网易新闻.什么是离线下载?其实这个概念是比较模糊,是离线之后下载呢,还是下载之后离线,但稍微有 ...

  6. 在Android的webview中定做js的alert,confirm和prompt对话框的方法

    在Android的webview中定制js的alert,confirm和prompt对话框的方法 http://618119.com/archives/2010/12/20/199.html 1.首先 ...

  7. Android 响应webview中图片的点击事件

    最近碰到个新需求需要点击webview中的图片进行放大显示. 整理了下思路,想到了下面的一个可行的方案. 方案思路, 1.在点击图片的时候调用本地的java方法并给出响应的图片地址 2.本地获得图片地 ...

  8. android利用WebView实现浏览器的封装

    android提供了封装浏览器的接口,可以让开发者利用自己的view显示网页内容.今天又实现研究了一下,利用WebView显示浏览器内容,还可以利用 WebViewClient显示自己需要的内容. 参 ...

  9. [原][Android]All WebView methods must be called on the same thread.

    问题 webView调用JS出错. class TestJS {         ......         public TestJS(){         }                   ...

随机推荐

  1. js关闭 window.open 打开的页面

    1.关闭 当前页面 window.opener = null; window.open('', '_self', ''); window.close(); 但是在FF中就是不行: 2.项目中情况是通过 ...

  2. python初学笔记(三)

    Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节 (byte),所以,一 ...

  3. vb listview 的常用操作

    常用操作:获取当前行数和列数: MsgBox "行数:" & ListView1.ListItems.Count & "列数:" & L ...

  4. Ant Table组件

    http://www.cnblogs.com/hujunzheng/p/5689650.html React中使用Ant Table组件   v一.Ant Design of React http:/ ...

  5. Python标准库_ sys,random,time

    一.sys 1.   sys这个模块让你能够访问与Python解释器联系紧密的变量和函数 2.  sys模块中一些重要的函数和变量 argv              命令行参数,包括脚本名称 exi ...

  6. 微软 Office 2010 SP2 正式版下载大全(含简中)

    7月24日消息,微软正式为 Office 2010 和 SharePoint 2010 系列产品发布 SP 2服务包,带来重要更新和修复.除了提供产品补丁,SP2服务包还将提升产品的稳定性.性能以及安 ...

  7. Referrer 还是 Referer?

    上回我写了一篇文章介绍「Referrer Policy」,有小伙伴看完后问我:Referrer 这个单词到底怎么拼,为什么有时候中间有两个 r,有时候只有一个? 是的,这是一个很有趣的问题,这里就给有 ...

  8. cdoj 847 方老师与栈 火车进出战问题

    //其实我是不想写这题的,但是这题让我想起了我年轻的时候 解法:直接模拟栈就好. //另外我年轻时候做的那题数据范围比较小,原理也不一样. //对于序列中的任何一个数其后面所有比它小的数应该是倒序的, ...

  9. php使用check box

    if (isset($_POST['submit'])) { foreach ($_POST['todelete'] as $delete_id) { //这里是循环遍历这个数组 todelete 每 ...

  10. c#搭建服务端 准备工作(1)

    思路 搭建服务器主要为了接收客户端所传来的数据,在学习过程中,整体的搭建逻辑大体分为以下几个步骤: 1.启动线程监听服务端口 2.监听客户端链接并进行处理 3.接收客户端传入的消息 4.向客户端回传( ...