智慧山师 Android Oauth认证Demo
###Demo简要说明:
Demo实现 oauth认证过程,实现自动登录和注销功能,认证部分说明 http://i.sdnu.edu.cn/open/oauth.aspx
###Sdnuapi_1.1 接口说明:
1
startThread(Handler mHandler, String url, int flag, Activity activity)
请求token , 获取数据的统一方法.
Parameters:
mHandler ,操作回调的 handler
url ,操作的url ,请求 token时可以设置为null
flag ,标识操作类型. Oauth.REQ_TOKEN,Oauth.METHOD,Oauth.ACC_TOKEN,
activity ,
2
setOauthVerifier(String value)
从外部设置OauthVerifier
Parameters:
value 为callback url
@true
为request token成功.
3
requestTokenUrl(boolean forcelogin)
返回 request token url
Parameters:
forcelogin 是否强制登录
Returns:
返回智慧山师的用户授权地址
4
setToken(String tokenKey, String tokenSecret)
将储存器保存的 token 使用该方法对Oauth进行设置
Parameters:
tokenKey
tokenSecret
5
getToken()
返回内容格式 tokenKey&tokenSecret.
Returns:
tokenKey&tokenSecret格式
###程序过程简要说明:
使用此demo前请先到智慧山师申请 consumerKey和consumerSecret,并使用该方法AppSDNU.setAppKey(consumerKey, consumerSecret)设置.
对于公共信息接口,只进行这个操作即可.下面部分为获取私有接口服务的授权操作.
####1.执行autoLogin()方法
首先查看是否有存储的 token ,如果有
//设置token
Oauth.setToken(tokenKey,tokenSecret);
//做一个刷新操作
Oauth.startThread(mHandler,AppSDNU.get(Constants.BASE_URL) + AppSDNU.get(Constants.REF_URL),Oauth.METHOD,WelcomeActivity.this);
如果刷新返回的token与请求时token一致,则认为token有效,则直接登录.否则点击"进入登录页"按钮,进行 request token操作.
####2.request token 操作
Oauth.startThread(mHandler, null,Oauth.REQ_TOKEN ,WelcomeActivity.this);
此时会获得 oauth_token,调用requestTokenUrl(boolean forcelogin) 方法,返回用户授权地址形如:
http://i.sdnu.edu.cn/oauth/authorize?oauth_token=11111111111111111111111111111111
调用 webview 访问该地址.登录成功会返回 callback地址,形如:
http://fakeurl.com/callback?from=isdnu#oauth_token=11111111111111111111111111111111
&oauth_verifier=aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa
调用方法 Oauth.setOauthVerifier(url) ,设置 OauthVerifier.
接着执行Oauth.startThread(mHandler, null,Oauth.ACC_TOKEN,LoginActivity.this);
用 Request token 换取 Access Token , 认证成功之后 ,保存 token到储存器.用于自动登录.
String token = Oauth.getToken();
Utils.saveTokenValue(LoginActivity.this,token,Utils.TOKENVALUE,Context.MODE_PRIVATE);
####3.注销操作
//置空操作,清空token对应的值.
Oauth.setToken("", "");
//清空储存密钥
Utils.saveTokenValue(MainActivity.this,"",Utils.TOKENVALUE, Context.MODE_PRIVATE);