Android:SNS客户端开发一:OAuth认证方法
?编写微博客户端,最重要的就是用户授权方法。现在主流SNS社区开放API后,基本都采用OAuth认证进行授权。本文主要记录新浪微博1.0a版本的OAuth认证。但是随着2.0版本的逐渐普及,会在今后的加入2.0版本的方法。
???? 有关OAuth认证的理论及相应流程在这里不做过多追述,各大网站上都已经写的十分清晰,这里主要写下我自己的实现方法。对于OAuth认证,这里采用signpost-oauth开源项目。
???? 首先编写一个类,用于存储认证过程中需要用到基本信息。
注:1、android:launchMode="singleInstance"将该Activity设置为单例;2、data标签与SinaConstant类中的回调地址对应,用于从浏览器回传值时呼出该Activity
?
??? 建立AddUserActivity,对应代码如下:
?
?注:1、在OnNewIntent方法中,sinaprovider.retrieveAccessToken()需要与网路交互,最好采取异步操作,本代码中忽略,异步方法可以参考在onClickListener监听中的OAuthRequestToken。
?
我们可以在上面的代码中看到,我们已经获取到相应的Token及TokenSecret了。通过这2个值,我们技能对授权账号进行操作,获取账号信息,发送微博,获取微博,更新资料等。
?
在第一步认证中,用到了一个异步类OAuthRequestToken,代码如下 :
public class OAuthRequestToken extends AsyncTask<String, Void, String> {private OAuthConsumer consumer;private OAuthProvider provider;private Context context;private ProgressDialog pd;public OAuthRequestToken(Context context, OAuthConsumer consumer,OAuthProvider provider) {this.context = context;this.consumer = consumer;this.provider = provider;}@Overrideprotected String doInBackground(String... params) {// TODO Auto-generated method stub// if(type.equalsIgnoreCase("sina")){try {Uri uri = null;// retrieveRequestToken的第二个参数是回调URLfinal String url = provider.retrieveRequestToken(consumer,SinaConstant.OAUTH_CALLBACK_URL);System.out.println(consumer.getToken());uri = Uri.parse(url);context.startActivity(new Intent(Intent.ACTION_VIEW, uri));} catch (Exception e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}return "success";}@Overrideprotected void onPostExecute(String result) {// TODO Auto-generated method stubsuper.onPostExecute(result);pd.dismiss();if(result == null){Toast.makeText(context, "网络异常,请稍后重试", Toast.LENGTH_LONG).show();}}@Overrideprotected void onPreExecute() {// TODO Auto-generated method stubsuper.onPreExecute();pd = new ProgressDialog(context);pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);pd.setMessage("正在加载");pd.show();}}?OAuth认证,在本文中是通过调用系统浏览器到新浪微博指定地址进行授权,如果使用UCWeb之类的浏览器可能会出现无法回调的异常。所以建议使用WebView来实现授权页面。相应的方法会在后面写到。