学了一段时间的ANDROID了,最近准备做一个新浪微博,下面是刚开始研究关于新浪微博的OAuth认证的代码
OAuth认证我用了三个类,具体实现看代码:
//这是第一个类:
package com.zjut.qiao;
//此类主要保存一些常量
public class Constant
{
//从新浪开发平台获取的AppKey和AppSecret
public static final String consumerKey = "3018069148";
public static final String consumerSecret = "4f3662178a845b3867ea4d51 86196ba0";
//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.OAuthCommunicationExcept ion;
import oauth.signpost.exception.OAuthExpectationFailedEx ception;
import oauth.signpost.exception.OAuthMessageSignerExcept ion;
import oauth.signpost.exception.OAuthNotAuthorizedExcept ion;
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(OAuthMessageSignerExcept ion ex)
{
System.out.println("Error Message");
ex.printStackTrace();
}
catch(OAuthNotAuthorizedExcept ion ex)
{
System.out.println("Error not find");
ex.printStackTrace();
}
catch(OAuthCommunicationExcept ion ex)
{
System.out.println("Error comunication");
ex.printStackTrace();
}
catch(OAuthExpectationFailedEx ception 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);
}
}
OAuth认证我用了三个类,具体实现看代码:
//这是第一个类:
package com.zjut.qiao;
//此类主要保存一些常量
public class Constant
{
}
//这是第二个类
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
{
}
//这是第三个类
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.OAuthCommunicationExcept
import oauth.signpost.exception.OAuthExpectationFailedEx
import oauth.signpost.exception.OAuthMessageSignerExcept
import oauth.signpost.exception.OAuthNotAuthorizedExcept
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
{
}