WebView实例开发之人人网Oauth2认证(含URL解析,json解析)
来源:互联网 发布:怎么投诉淘宝客服人员 编辑:程序博客网 时间:2024/05/01 15:20
先看效果图:
相信开发过新浪、腾讯、豆瓣以及人人等微博的开发者都知道OAuth这个认证框架。这些开放平台上也有自己开发好了的SDK,只需要下载过来即可使用。今天主要是结合webview来实现人人网的认证授权。OAuth 2.0验证授权流程,支持网站、站内应用、手机客户端、桌面客户端等。 具体可以参考:
人人的开放平台的认证流程:http://wiki.dev.renren.com/wiki/Authentication
OAuth2.0的协议标准:http://oauth.net/2/
在android的浏览器应用中,经常会使用到webview。这里webview的概念网络上一大堆,这里直接复制网络上的描述:
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
第一种方法的步骤:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />
嘿嘿以上的描述说的挺清楚的了。
以下是webview开发的实例,获取人人的授权token的核心代码
相信开发过新浪、腾讯、豆瓣以及人人等微博的开发者都知道OAuth这个认证框架。这些开放平台上也有自己开发好了的SDK,只需要下载过来即可使用。今天主要是结合webview来实现人人网的认证授权。OAuth 2.0验证授权流程,支持网站、站内应用、手机客户端、桌面客户端等。 具体可以参考:
人人的开放平台的认证流程:http://wiki.dev.renren.com/wiki/Authentication
OAuth2.0的协议标准:http://oauth.net/2/
在android的浏览器应用中,经常会使用到webview。这里webview的概念网络上一大堆,这里直接复制网络上的描述:
WebView(网络视图)能加载显示网页,可以将其视为一个浏览器。它使用了WebKit渲染引擎加载显示网页,实现WebView有以下两种不同的方法:
第一种方法的步骤:
1.在要Activity中实例化WebView组件:WebView webView = new WebView(this);
2.调用WebView的loadUrl()方法,设置WevView要显示的网页:
互联网用:webView.loadUrl("http://www.google.com");
本地文件用:webView.loadUrl("file:///android_asset/XX.html"); 本地文件存放在:assets 文件中
3.调用Activity的setContentView( )方法来显示网页视图
4.用WebView点链接看了很多页以后为了让WebView支持回退功能,需要覆盖覆盖Activity类的onKeyDown()方法,如果不做任何处理,点击系统回退剪键,整个浏览器会调用finish()而结束自身,而不是回退到上一页面
5.需要在AndroidManifest.xml文件中添加权限,否则会出现Web page not available错误。
<uses-permission android:name="android.permission.INTERNET" />
嘿嘿以上的描述说的挺清楚的了。
以下是webview开发的实例,获取人人的授权token的核心代码
001
package
com.xzw.token;
002
import
java.io.BufferedReader;
003
import
java.io.IOException;
004
import
java.io.InputStreamReader;
005
import
org.apache.http.HttpEntity;
006
import
org.apache.http.HttpResponse;
007
import
org.apache.http.client.ClientProtocolException;
008
import
org.apache.http.client.HttpClient;
009
import
org.apache.http.client.methods.HttpGet;
010
import
org.apache.http.impl.client.DefaultHttpClient;
011
import
org.json.JSONException;
012
import
org.json.JSONObject;
013
import
android.app.Activity;
014
import
android.app.AlertDialog;
015
import
android.app.ProgressDialog;
016
import
android.content.DialogInterface;
017
import
android.graphics.Bitmap;
018
import
android.os.Bundle;
019
import
android.util.Log;
020
import
android.view.Window;
021
import
android.webkit.WebSettings;
022
import
android.webkit.WebView;
023
import
android.webkit.WebViewClient;
024
import
android.widget.Toast;
025
026
027
public
class
OAuthActivity
extends
Activity {
028
private
static
final
String TAG =
"OAuthActivity"
;
029
private
static
final
String CLIENT_ID =
"e2e5e39bf9ff4b5a8245735a94d50e86"
;
// 应用的APPkey
030
private
static
final
String CLIENT_SECRET =
"b6ba1f9fa8ff47889abe2e2d5928d6fd"
;
//应用的appke secret
031
private
static
final
String REDIRECT_URL =
"<a href="
\"http:
//192.168.51.141/\"" target="\"_blank\"">http://192.168.51.141</a>"; // 重定向地址
032
private
static
final
String AUTHORIZE_URL =
"<a href="
\"https:
//graph.renren.com/oauth/authorize?client_id=%s&redirect_uri=%s&response_type=code\"" target="\"_blank\"">https://graph.renren.com/oauth/authorize?client_id=%s&redirect_uri=%s&response_type=code</a>";
033
// Oauth2认证地址
034
private
static
final
String ACCESS_TOKEN_URL =
"<a href="
\"https:
//graph.renren.com/oauth/token?grant_type=authorization_code&client_id=%s&redirect_uri=%s&client_secret=%s&code=%s\"" target="\"_blank\"">https://graph.renren.com/oauth/token?grant_type=authorization_code&client_id=%s&redirect_uri=%s&client_secret=%s&code=%s</a>";
035
private
WebView mLoginWebView;
036
private
ProgressDialog progressDialog;
037
private
AlertDialog alertDialog;
038
@Override
039
public
void
onCreate(Bundle savedInstanceState) {
040
super
.onCreate(savedInstanceState);
041
requestWindowFeature(Window.FEATURE_NO_TITLE);
042
setContentView(R.layout.activity_main);
043
initWebView();
// 初始化webview
044
}
045
/**
046
* 初始化webview
047
*/
048
private
void
initWebView() {
049
mLoginWebView = (WebView) findViewById(R.id.loginView);
050
WebSettings settings = mLoginWebView.getSettings();
051
settings.setJavaScriptEnabled(
true
);
//设置支持javascript
052
settings.setSupportZoom(
true
);
//
053
settings.setBuiltInZoomControls(
true
);
//设置支持缩放
054
String url = String.format(AUTHORIZE_URL,
new
Object[] {
055
CLIENT_ID, REDIRECT_URL });
056
// 加载网页
057
mLoginWebView.loadUrl(url);
058
// 网页加载进度条
059
progressDialog = ProgressDialog.show(
this
,
null
,
"正在加载,请稍后..."
);
060
alertDialog =
new
AlertDialog.Builder(
this
).create();
061
//创建AlertDialog
062
mLoginWebView.setWebViewClient(
new
MyWebViewClient());
063
}
064
065
class
MyWebViewClient
extends
WebViewClient {
066
/**
067
* 拦截URL地址,进行业务操作
068
*/
069
@Override
070
public
boolean
shouldOverrideUrlLoading(WebView view, String url) { Log.i(TAG,
"-shouldOverrideUrlLoading--startwith-"
+ url);
071
String callback_url = REDIRECT_URL +
"/?"
;
072
if
(url.startsWith(callback_url)) {
073
//匹配callback_url
074
Log.i(TAG,
"-shouldOverrideUrlLoading--"
+ url);
075
String code = url.replace(callback_url +
"code="
,
""
);
076
System.out.println(
"code="
+ code);
077
String urlString = String.format(ACCESS_TOKEN_URL,
078
new
Object[] { CLIENT_ID, REDIRECT_URL, CLIENT_SECRET, code });
079
parseUrl(urlString);
080
return
false
;
081
}
else
{
082
view.loadUrl(url);
083
return
true
;
084
}
085
}
086
@Override
087
public
void
onPageStarted(WebView view, String url, Bitmap favicon) {
088
Log.i(TAG,
"-onPageFinished-"
+ url);
089
if
(!progressDialog.isShowing()) {
090
//网页开始加载时,显示进度条。
091
progressDialog.show();
092
}
093
}
094
@Override
095
public
void
onPageFinished(WebView view, String url) {
096
Log.i(TAG,
"-onPageFinished-"
+ url);
097
if
(progressDialog.isShowing()) {
098
// 加载完毕后,进度条不显示
099
progressDialog.dismiss();
100
}
101
}
102
@Override
103
public
void
onReceivedError(WebView view,
int
errorCode, String description, String failingUrl) {
104
Log.i(TAG,
"-onReceivedError-"
+ failingUrl);
105
Toast.makeText(OAuthActivity.
this
,
"网页加载出错"
, Toast.LENGTH_LONG).show();
106
alertDialog.setTitle(
"Error"
);
107
alertDialog.setMessage(description);
108
alertDialog.setButton(
"ok"
,
new
DialogInterface.OnClickListener() {
109
@Override
110
public
void
onClick(DialogInterface dialog,
int
which) {
111
}
112
});
113
alertDialog.show();
114
}
115
}
116
/**
117
* URL解析
118
* @param url
119
*/
120
private
void
parseUrl=\'#\'" /span>
121
HttpClient client =
new
DefaultHttpClient();
122
HttpGet get =
new
HttpGet(url);
123
try
{
124
HttpResponse response = client.execute(get);
125
HttpEntity entity = response.getEntity();
126
BufferedReader buffReader =
new
BufferedReader(
new
InputStreamReader( entity.getContent()));
127
StringBuffer strBuff =
new
StringBuffer();
128
String result =
null
;
129
while
((result = buffReader.readLine()) !=
null
) {
130
strBuff.append(result);
131
} System.out.println(strBuff.toString());
132
parseJson(strBuff.toString());
133
}
catch
(ClientProtocolException e) {
134
// TODO Auto-generated catch block
135
e.printStackTrace();
136
}
catch
(IOException e) {
137
// TODO Auto-generated catch block
138
e.printStackTrace();
139
} }
140
/**
141
* json解析
142
* @param strJson
143
*/
144
private
void
parseJson(String strJson){
145
try
{
146
JSONObject json =
new
JSONObject(strJson);
147
int
expires_in = json.getInt(
"expires_in"
);
148
String refresh_token = json.getString(
"refresh_token"
);
149
String access_token = json.getString(
"access_token"
);
150
System.out.println(
"过期时间="
+expires_in+
" \naccess_token="
+access_token);
151
}
catch
(JSONException e) {
152
// TODO Auto-generated catch block
153
e.printStackTrace();
154
}
155
} }
0 0
- WebView实例开发之人人网Oauth2认证(含URL解析,json解析)
- RSS Reader实例开发之解析XML和使用WebView
- Android网络编程之WebView【实例解析】
- JSON Iterator 解析(含map格式)
- JSON - json解析实例
- Winphone开发之JSON解析
- Android开发之JSON解析
- iOS开发之json解析
- Android开发之JSON解析
- url解析网络json
- FFmpeg中函数avformat_open_input()(含URL解析文件格式)
- URL、枚举和XML解析、Json解析(8.3)
- WebView解析之设置
- Json解析数组实例
- Gson解析Json实例
- Gson解析 json 实例
- C#解析JSON实例
- Json解析数据实例
- UML图(六) 状态图
- 全局内存性能测试
- android深入之设计模式(一)委托模式
- hibernate数据持久化原理
- JS中数组Array的用法{转载}
- WebView实例开发之人人网Oauth2认证(含URL解析,json解析)
- 2014真正实现无需跑包,无需pin,10分钟连破10个网实战教程(包含视频语音教程)
- c#实现excel拟合函数
- 高通平台下安卓opencl小例子
- 欢迎您在新浪博客安家
- 黑马程序员_vs2010解决方案不见了怎么办?
- android之webview无网络情况下简单处理
- MapReduce 过程详解
- android 如何预置APK