`

Android:SNS客户端开发一:OAuth认证方法

 
阅读更多

 编写微博客户端,最重要的就是用户授权方法。现在主流SNS社区开放API后,基本都采用OAuth认证进行授权。本文主要记录新浪微博1.0a版本的OAuth认证。但是随着2.0版本的逐渐普及,会在今后的加入2.0版本的方法。

     有关OAuth认证的理论及相应流程在这里不做过多追述,各大网站上都已经写的十分清晰,这里主要写下我自己的实现方法。对于OAuth认证,这里采用signpost-oauth开源项目。

     首先编写一个类,用于存储认证过程中需要用到基本信息。

public class SinaConstant {// 新浪OAuth辅助信息类

	// 所分配的APP_KEY
	public static final String CONSUMER_KEY = "";
	// 所分配的APP_SECRET
	public static final String CONSUMER_SECRET = "";
	// 用于获取未授权的request token
	public static final String REQUEST_URL = "http://api.t.sina.com.cn/oauth/request_token";
	// 用于获取access token
	public static final String ACCESS_URL = "http://api.t.sina.com.cn/oauth/access_token";
	// 用于对未授权的request token进行授权
	public static final String AUTHORIZE_URL = "http://api.t.sina.com.cn/oauth/authorize";
	// 回调地址
	public static final String OAUTH_CALLBACK_URL = "mysina://CallActivity";

}

 注:1、其中回调地址用于指向从新浪页面授权后跳转到页面;2、对应的key和secret填写新浪微博对应提供的app_key及app_secret

     建立一个Activity用于进行添加账号的操作。将改Activity设置为单例模式

<activity
            android:label="@string/app_name"
            android:launchMode="singleInstance"            android:name=".AddUserActivity" >
            <intent-filter >
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />

                <data
                    android:host="CallActivity"
                    android:scheme="mysina" />
            </intent-filter>
        </activity>

注:1、android:launchMode="singleInstance"将该Activity设置为单例;2、data标签与SinaConstant类中的回调地址对应,用于从浏览器回传值时呼出该Activity

 

    建立AddUserActivity,对应代码如下:

 

public class AddUserActivity extends Activity {
	/** Called when the activity is first created. */
	Context context;
	private OAuthConsumer sinaconsumer;
	private OAuthProvider sinaprovider;
                private OAuthRequestToken oauthtool;
public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.usermanager);
		sinaconsumer = new CommonsHttpOAuthConsumer(SinaConstant.CONSUMER_KEY,SinaConstant.CONSUMER_SECRET);//初始化用于OAuth认证的Consumer对象
		sinaprovider = new CommonsHttpOAuthProvider(SinaConstant.REQUEST_URL,SinaConstant.ACCESS_URL, SinaConstant.AUTHORIZE_URL);//初始化用于OAuth认证的Provider对象     		
		ImageButton adduser = (ImageButton) findViewById(R.id.addUserImage);this.context = this;		
		adduser.setOnClickListener(new OnClickListener() {
			public void onClick(View v) {
			System.out.println("OAuth认证新浪");
				oauthtool = new OAuthRequestToken(context, sinaconsumer,sinaprovider);
				oauthtool.execute();	
			}

		});
	}
protected void onNewIntent(Intent intent) {//AddUserActivity为单例,再第二次开启时加载该方法
		super.onNewIntent(intent);
		Uri uri = intent.getData();
		String verifier = null;
		verifier = uri.getQueryParameter(OAuth.OAUTH_VERIFIER);
		try {						
                                 sinaprovider.setOAuth10a(true);//设置OAuth版本号			
                      sinaprovider.retrieveAccessToken(sinaconsumer, verifier);//通过服务器返回的Verifier去获取账号对应的Token
		SortedSet<String> user_ids = sinaprovider.getResponseParameters().get("user_id");
		String user_id = user_ids.first();
		String Token= sinaconsumer.getToken();
		String TokenSecret = sinaconsumer.getTokenSecret();
		System.out.println(userKey + "&*&" + userSecret);
		} catch (Exception e) {
			e.printStackTrace();
		}
}

 注: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;
	}

	@Override
	protected String doInBackground(String... params) {
		// TODO Auto-generated method stub
		// if(type.equalsIgnoreCase("sina")){

		try {
			Uri uri = null;
			// retrieveRequestToken的第二个参数是回调URL
			final 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 block
			e.printStackTrace();
			return null;
		}

		
		return "success";
	}

	@Override
	protected void onPostExecute(String result) {
		// TODO Auto-generated method stub
		super.onPostExecute(result);
		pd.dismiss();
		if(result == null){
			Toast.makeText(context, "网络异常,请稍后重试", Toast.LENGTH_LONG).show();
		}
		
	}

	@Override
	protected void onPreExecute() {
		// TODO Auto-generated method stub
		super.onPreExecute();
		pd = new ProgressDialog(context);
		pd.setProgressStyle(ProgressDialog.STYLE_SPINNER);
		pd.setMessage("正在加载");
		pd.show();
	}

}

 OAuth认证,在本文中是通过调用系统浏览器到新浪微博指定地址进行授权,如果使用UCWeb之类的浏览器可能会出现无法回调的异常。所以建议使用WebView来实现授权页面。相应的方法会在后面写到。

2
4
分享到:
评论

相关推荐

    AppAuth-Android:Android客户端SDK,用于与OAuth 2.0和OpenID Connect提供程序进行通信

    适用于Android的AppAuth是用于与和提供程序进行通信的客户端SDK。 它努力遵循那些惯用的实现语言样式,直接映射那些规范的请求和响应。 除了映射原始协议流外,便捷方法还可用于协助执行常见任务,例如使用新令牌...

    腾讯微博Android客户端开发OAuth认证学习[收集].pdf

    腾讯微博Android客户端开发使用OAuth 1.0A版本进行用户授权,以确保用户在使用非官方客户端时,不会直接暴露QQ号和密码,降低安全风险。 OAuth的核心思想是通过令牌(Token)机制来实现授权,而不是直接使用用户名...

    Android-使用OkHttp的AndroidOAuth2客户端

    在Android开发中,网络编程是不可或缺的一部分,而OAuth2是一种广泛使用的授权协议,它为安全地访问第三方资源提供了便利。本教程将详细讲解如何在Android应用中使用OkHttp实现OAuth2客户端,以便与服务器进行安全的...

    Java的oauth2.0 服务端与客户端的实现 (完整源码、demo)

    Java的oauth2.0 服务端与客户端的实现.zip 封装了oauth2.0的基本架构和实现,对照我的博客http://blog.csdn.net/jing12062011/article/details/78147306使用该源码。 下载项目压缩包,解压,里面两个maven项目:...

    oauth认证服务器端和客户端

    OAuth认证涉及两个主要角色:服务器端(也称为资源服务器)和客户端。 **OAuth认证服务器端**: OAuth服务器端是拥有用户资源的服务提供者,如社交网络或邮件服务。当用户想要授权第三方应用访问其在服务器端的资源...

    android新浪腾讯人人豆瓣等的oauth认证

    本文将深入探讨OAuth认证的核心概念,并结合Android开发实践,解析源码示例,帮助你掌握这一关键技能。 **OAuth认证流程** 1. **用户授权**: 用户打开应用,应用请求用户授权访问其在特定服务(如新浪)上的信息。...

    android新浪微博客户端开发

    在Android平台上开发新浪微博客户端是一项复杂而有趣的任务,它涉及到多个技术层面和开发流程。下面将详细探讨这个过程中涉及的关键知识点。 1. **Android SDK**:首先,开发Android应用需要掌握Android SDK,它是...

    腾讯微博android 客户端 Oauth 认证流程序示例

    在Android平台上开发应用程序时,与各种在线服务进行交互是一个常见的需求。腾讯微博作为一个热门的社交媒体平台,提供了API供开发者接入其服务,实现如发布、阅读微博等功能。在使用这些功能时,通常需要进行OAuth...

    java源码:API访问授权的开放标准 OAuth.zip

    `aaronpk-oauth.net-2e34467` 这个文件可能是一个特定OAuth实现的源码仓库,可能包含了OAuth2的客户端或服务器端的实现代码。通过阅读和分析这个源码,我们可以更深入地了解OAuth协议的具体实现细节,包括令牌的生成...

    Java的oauth2.0 服务端与客户端的实现(源码)

    在提供的压缩包中,包含两个Maven项目,一个是`oauthserver`,代表了OAuth 2.0的服务端,另一个是`oauthclient01`,代表了客户端。 ### 1. OAuth 2.0 服务端(oauthserver) 服务端是OAuth协议的核心,负责验证...

    新浪和腾讯微博Oauth认证Demo(php版)

    3./class/下,文件名中含有If的文件,定义的是接口.总计3个接口文件:各个网站的api访问路径(urlIf)、申请到的appkey接口(keyIf),返回的参数名接口(paramIf)。...本例中的OAuth客户端来源于新浪微博OAuth认证SDK。

    新浪微博 api Oauth认证.

    4. **代码实现**:Android或Web开发中的OAuth认证代码示例,包括请求和解析API响应,管理令牌等。 5. **安全注意事项**:在处理用户授权时应考虑的安全措施,如如何存储和保护令牌,避免令牌被盗用。 6. **...

    c#中oauth认证

    C#是Microsoft开发的一种面向对象的编程语言,广泛应用于Web应用开发,包括OAuth认证。对于初学者来说,理解并实现OAuth认证流程在C#中是非常重要的一步。 OAuth认证通常涉及到四个主要角色:资源所有者(Resource ...

    OAuth认证整合Android版-demo示例初学者

    OAuth认证在Android开发中是一个重要的知识点,特别是在移动应用与第三方服务集成时,如社交媒体登录、云存储服务等。OAuth允许用户授权第三方应用访问其私有资源,而无需分享用户名和密码,增强了安全性。本示例是...

    1.OAuth认证学习.rar

    在这个"1.OAuth认证学习.rar"压缩包文件中,我们主要会探讨OAuth在腾讯微博Android客户端开发中的应用。 OAuth的核心理念是分离授权与身份验证。它允许用户将某些权限授予第三方应用,例如发布微博,而无需直接向...

    android Oauth认证

    新浪、腾讯、网易、搜狐微薄OAuth认证整合Android版

    oauth2全套(授权服务器+资源服务器+客户端独立版)

    OAuth2 是一个授权框架,广泛应用于现代Web应用和API的安全性设计,允许第三方应用在用户许可的情况下访问受保护的资源。本套系统包含了授权服务器、资源服务器和客户端,旨在实现安全的单点登录(Single Sign-On, ...

    Oauth认证流程学习代码

    4. 实践创建一个简单的OAuth客户端,模拟整个授权流程。 5. 研究不同OAuth流型(如授权码流、隐式流、密码流、客户端凭据流)的区别和应用场景。 通过这个学习过程,你将能够掌握OAuth的核心概念,并具备在实际项目...

Global site tag (gtag.js) - Google Analytics