package org.czzz.demo;
import java.util.ArrayList;
import java.util.List;
import org.apache.http.NameValuePair;
import org.apache.http.message.BasicNameValuePair;
import org.json.JSONException;
import org.json.JSONObject;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.Uri;
/**
* 豆瓣OAuth登录 参数及方法
* @author tinyao
*
*/
public class DoubanOAuth {
public static final String DOUBAN_OAUTH_TOKEN_BASE_URL = "https://www.douban.com/service/auth2/token";
public static final String DOUBAN_OAUTH_CODE_BASE_URL = "https://www.douban.com/service/auth2/auth";
public static final String DOUBAN_PREF = "douban_pref";
public static final String APP_KEY = "0a02a555b6e4eafc1e07f00124aec0f4";
public static final String APP_SECRET = "986d4d0182357cca";
public static final String REDIRECT_URL = "czzz://callback";
private String accessToken = "";
private String doubanUserId = "";
private String expiresIn = "";
private String refreshToken = "";
Context context;
SharedPreferences sp;
public DoubanOAuth(Context con){
this.context = con;
sp = con.getSharedPreferences(DOUBAN_PREF, 0);
accessToken = sp.getString("access_token", "");
doubanUserId = sp.getString("user_id", "");
expiresIn = sp.getString("expires_in", "");
refreshToken = sp.getString("refresh_token", "");
}
public String getAccessToken() {
return accessToken;
}
public void setAccessToken(String accessToken) {
this.accessToken = accessToken;
}
public String getDoubanUserId() {
return doubanUserId;
}
public void setDoubanUserId(String doubanUserId) {
this.doubanUserId = doubanUserId;
}
public String getExpiresIn() {
return expiresIn;
}
public void setExpiresIn(String expiresIn) {
this.expiresIn = expiresIn;
}
public String getRefreshToken() {
return refreshToken;
}
public void setRefreshToken(String refreshToken) {
this.refreshToken = refreshToken;
}
/**
* 打开网页,豆瓣认证,回调context的onNewIntent方法
* @param context
*/
public void lauchforVerifyCode(Context context){
Uri uri = Uri.parse(
DOUBAN_OAUTH_CODE_BASE_URL
+ "?client_id=" + APP_KEY
+ "&redirect_uri=" + REDIRECT_URL
+ "&response_type=code");
Intent it = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(it);
}
/**
* 通过第一步的code,获取accessToken
* @param code 第一步认证的code
* @param listener AsynTask回调监听:listener的type为1
*/
public void fetchAccessToken(String code, HttpListener listener) {
List<NameValuePair> params = null;
params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair("client_id",
APP_KEY));
params.add(new BasicNameValuePair("client_secret", APP_SECRET));
params.add(new BasicNameValuePair("redirect_uri", REDIRECT_URL));
params.add(new BasicNameValuePair("grant_type", "authorization_code"));
params.add(new BasicNameValuePair("code", code));
new HttpPostTask(listener).execute(DOUBAN_OAUTH_TOKEN_BASE_URL, params);
}
/**
* 从json中解析出accessToken等信息,并存入sharedpreferences
* @param json
*/
public void parseJson4OAuth(String json){
try {
JSONObject js = new JSONObject(json);
accessToken = js.getString("access_token");
doubanUserId = js.getString("douban_user_id");
expiresIn = js.getString("expires_in");
refreshToken = js.getString("refresh_token");
sp = context.getSharedPreferences(DOUBAN_PREF, 0);
sp.edit().putString("access_token", accessToken)
.putString("user_id", doubanUserId)
.putString("expires_in", expiresIn)
.putString("refresh_token", refreshToken).commit();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}