欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Android实现授权访问网页的方法

程序员文章站 2022-05-27 10:24:21
本文实例讲述了android授权访问网页的实现方法,即使用webview显示oauth version 2.a implicitgrant方式授权的页,但是对于移动终端不建...

本文实例讲述了android授权访问网页的实现方法,即使用webview显示oauth version 2.a implicitgrant方式授权的页,但是对于移动终端不建议使用authorize code grant方式授权

具体功能代码如下所示:

import android.annotation.suppresslint;
import android.app.activity;
import android.content.intent;
import android.graphics.bitmap;
import android.net.http.sslerror;
import android.os.bundle;
import android.util.log;
import android.webkit.sslerrorhandler;
import android.webkit.websettings;
import android.webkit.webview;
import android.webkit.webviewclient;
import com.tencent.weibo.oauthv2.oauthv2;
import com.tencent.weibo.oauthv2.oauthv2client;
/**
 * 使用webview显示oauth version 2.a implicitgrant方式授权的页
 * (移动终端不建议使用authorize code grant方式授权
 * 本类使用方法
 * 调用本类的地方请添加如下代码
 * //请将oauthv2activity改为类的类名
 * intent intent = new intent(oauthv2activity.this, oauthv2authorizewebview.class);
 * intent.putextra("oauth", oauth); //oauth为oauthv2类的实例,存放授权相关信??
 * startactivityforresult(intent, myrrequestcode); //请设置合适的requsetcode
 * 重写接收回调信息的方
 * if (requestcode==myrrequestcode) { //对应之前设置的的myrequsetcode
 *   if (resultcode==oauthv2authorizewebview.result_code) {
 *     //取得返回的oauthv2类实例oauth
 *     oauth=(oauthv2) data.getextras().getserializable("oauth");
 *   }
 * }
 * @see android.app.activity#onactivityresult(int requestcode, int resultcode, intent data)
 */
public class mywebview extends activity {
  public final static int result_code = 2;
  private oauthv2 oauth;
  private final string tag = "mywebview";
 private webview mwebview;
  @suppresslint("newapi")
 @override
  public void oncreate(bundle savedinstancestate) {
    super.oncreate(savedinstancestate);
    setcontentview(r.layout.webview_qq);
    mwebview = (webview) findviewbyid(r.id.qq_mywebview);;
    mwebview.setverticalscrollbarenabled(false);
 mwebview.sethorizontalscrollbarenabled(false);
 intent intent = this.getintent();
    oauth = (oauthv2) intent.getextras().getserializable("oauth");
    string urlstr = oauthv2client.generateimplicitgranturl(oauth);
    websettings websettings = mwebview.getsettings();
    websettings.setjavascriptenabled(true);
    websettings.setsupportzoom(true);
    mwebview.requestfocus();
    mwebview.loadurl(urlstr);
    system.out.println(urlstr.tostring());
    log.i(tag, "webview starting....");
    webviewclient client = new webviewclient() {
    /* 回调方法,当页面加载时执行*/
      @override
      public void onpagestarted(webview view, string url, bitmap favicon) {
        log.i(tag, "webview onpagestarted...");
        log.i(tag, "url = " + url);
        if (url.indexof("access_token=") != -1) {
          int start=url.indexof("access_token=");
          string responsedata=url.substring(start);
          oauthv2client.parseaccesstokenandopenid(responsedata, oauth);
          intent intent = new intent();
          intent.putextra("oauth", oauth);
          setresult(result_code, intent);
          finish();
        }
        super.onpagestarted(view, url, favicon);
        log.i(tag, "999999999");
      }
      /* todo android2.2及以上版本才能使用该方法,目前https://open.t.qq.com中存在http资源会引起sslerror,待网站修正后可去掉该方*/
 public void onreceivedsslerror(webview view, sslerrorhandler handler, sslerror error) {
        if ((null != view.geturl()) && (view.geturl().startswith("https://open.t.qq.com"))) {
          handler.proceed();// 接受证书
        } else {
          handler.cancel(); // 默认的处理方式,webview变成空白
        }
        // handlemessage(message msg); 其他处理
      }
    };
    mwebview.setwebviewclient(client);
  }
}