OAuth认证

来源:互联网 发布:阿里云slb负载均衡 编辑:程序博客网 时间:2024/05/01 23:10
学了一段时间的ANDROID了,最近准备做一个新浪微博,下面是刚开始研究关于新浪微博的OAuth认证的代码
OAuth认证我用了三个类,具体实现看代码:

//这是第一个类:
package com.zjut.qiao;

//此类主要保存一些常量
public class Constant
{
    //从新浪开发平台获取的AppKey和AppSecret
    public static final String consumerKey = "3018069148";
    public static final String consumerSecret = "4f3662178a845b3867ea4d5186196ba0";
   
    //OAuth认证需要的三个URL
    //获取requestToken的URL
    public static final String requestToken_URL = "http://api.t.sina.com.cn/oauth/request_token";
    //获取accessToken的URL
    public static final String accessToken_URL = "http://api.t.sina.com.cn/oauth/access_token";
    //用户授权的URL
    public static final String authorize_URL = "http://api.t.sina.com.cn/oauth/authorize";
   
    //编码格式
    public static final String ENCODING = "UTF-8";
   
    //回调地址
    public static final String CALLBACK_URL = "myapp"+"://"+"callback_url";
}

//这是第二个类
package com.zjut.qiao;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
//该类就是实现一个跳转,具体认证在TestOAuth类中
public class OAuthActivity extends Activity
{
    //声明一个Button控件
    private Button test;
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //根据控件的ID实例化控件
        test = (Button)findViewById(R.id.test);
        //为按钮控件设置监听
        test.setOnClickListener(new ButtonListener());
    }
    private class ButtonListener implements OnClickListener
    {

        @Override
        public void onClick(View v)
        {
            Intent intent_01 = new Intent();
            intent_01.setClass(OAuthActivity.this, TestOAuth.class);
            startActivity(intent_01);
        }
       
    }
}

//这是第三个类
package com.zjut.qiao;

import oauth.signpost.OAuth;
import oauth.signpost.OAuthConsumer;
import oauth.signpost.OAuthProvider;
import oauth.signpost.commonshttp.CommonsHttpOAuthConsumer;
import oauth.signpost.commonshttp.CommonsHttpOAuthProvider;
import oauth.signpost.exception.OAuthCommunicationException;
import oauth.signpost.exception.OAuthExpectationFailedException;
import oauth.signpost.exception.OAuthMessageSignerException;
import oauth.signpost.exception.OAuthNotAuthorizedException;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.widget.TextView;

public class TestOAuth extends Activity
{
   
    TextView oauth_test;
    OAuthConsumer consumer;
    OAuthProvider provider;
    @Override
    protected void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.testoauth);
        try
        {
            //实例化OAuth认证中的客户和服务提供者
            consumer = new CommonsHttpOAuthConsumer(Constant.consumerKey,Constant.consumerSecret);
            provider = new CommonsHttpOAuthProvider(Constant.requestToken_URL,Constant.accessToken_URL, Constant.authorize_URL);
            //获取requestToken并存入consumer中
            System.out.println("这是AppKey:"+consumer.getConsumerKey());
            System.out.println("这是AppSecret:"+consumer.getConsumerSecret());
            System.out.println("获取requestToken前 :"+consumer.getToken());
            String url = provider.retrieveRequestToken(consumer, Constant.CALLBACK_URL);
            System.out.println("获取requestToken后 :"+consumer.getToken());
            System.out.println("URL-------------> :"+url);
            startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(url)));
        }
        catch(OAuthMessageSignerException ex)
        {
            System.out.println("Error Message");
            ex.printStackTrace();
        }
        catch(OAuthNotAuthorizedException ex)
        {
            System.out.println("Error not find");
            ex.printStackTrace();
        }
        catch(OAuthCommunicationException ex)
        {
            System.out.println("Error comunication");
            ex.printStackTrace();
        }
        catch(OAuthExpectationFailedException ex)
        {
            System.out.println("Error exception");
            ex.printStackTrace();
        }
    }
    @Override
    protected void onNewIntent(Intent intent)
    {
        super.onNewIntent(intent);
        //获取用户授权后的Uri
        Uri uri = intent.getData();
        //获取用户的授权码
        String verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
        try
        {
            provider.setOAuth10a(true);
            //获取accessToken并将获取的accessToken存入consumer中
            provider.retrieveAccessToken(consumer, verifier);
        }
        catch(Exception e)
        {
            System.out.println("SORRY! THERE ARE SOME ERRORS!");
            e.printStackTrace();
        }
        //显示刚才获取的accessToken和accessTokenSecret
        String userAccessToken = consumer.getToken();
        String userAccessTokenSecret = consumer.getTokenSecret();
        oauth_test = (TextView)findViewById(R.id.oauth_test);
       oauth_test.setText("userAccessToken:"+userAccessToken+"\n"+"userAccessTokenSecret:"+userAccessTokenSecret);
    }
}
原创粉丝点击