Android:SNS客户端开发一:OAuth认证方法
编写微博客户端,最重要的就是用户授权方法。现在主流SNS社区开放API后,基本都采用OAuth认证进行授权。本文主要记录新浪微博1.0a版本的OAuth认证。但是随着2.0版本的逐渐普及,会在今后的加入2.0版本的方法。
有关OAuth认证的理论及相应流程在这里不做过多追述,各大网站上都已经写的十分清晰,这里主要写下我自己的实现方法。对于OAuth认证,这里采用signpost-oauth开源项目。
首先编写一个类,用于存储认证过程中需要用到基本信息。
Java代码
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";
}
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设置为单例模式
Xml代码
<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>
<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,对应代码如下:
Java代码
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);//初始化用
补充:移动开发 , Android ,