关闭

新浪微博开发之授权的实现(二)

标签: 新浪微博androidbuttonuseraccesstoken
3078人阅读 评论(6) 收藏 举报
分类:

接着上篇继续,如果没有授权用户则跳转到授权页:


为了节省时间我使用了android SDK进行开发,SDK下载地址:新浪微博SDK(android版)这里不是官方的SDK,是Weibo4Android。

在原有SDK基础上新建OAuthActivity:

package com.cloay.weibo.ui;

import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.RequestToken;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.widget.Button;

import com.cloay.weibo.R;
import com.cloay.weibo.WeiBoActivity;
import com.cloay.weibo.constants.OAuthConstant;
import com.cloay.weibo.utils.AlertDlgUtil;
import com.cloay.weibo.utils.CheckNetUtil;
/**
 * 如果未授权或者授权已过期,获取授权accessToken
 * 并跳转到OAuthResult
 * @author Cloay
 * 2012-2-25
 * 下午08:14:01
 */
public class OauthActivity extends WeiBoActivity {
	@Override
	protected void onCreate(Bundle savedInstanceState) {
		requestWindowFeature(Window.FEATURE_NO_TITLE);//去掉标题栏
		super.onCreate(savedInstanceState);
		setContentView(R.layout.oauth);
		
		System.setProperty("weibo4j.oauth.consumerKey", Weibo.CONSUMER_KEY);
    	System.setProperty("weibo4j.oauth.consumerSecret", Weibo.CONSUMER_SECRET);
		Button loginBtn = (Button) findViewById(R.id.oauthButton);
		loginBtn.setOnClickListener(new OnClickListener() {
			
			@Override
			public void onClick(View v) {
				if(CheckNetUtil.checkNet(OauthActivity.this)){//检查网络是否可用,如果可用
					//进行授权提示授权
					Weibo weibo = new Weibo();
	            			RequestToken requestToken;
					try {
						requestToken = weibo.getOAuthRequestToken("cloay://OauthResult");//注意下面说明1
		    			OAuthConstant.getInstance().setRequestToken(requestToken);
						Uri uri = Uri.parse(requestToken.getAuthenticationURL()+ "&display=mobile");
		    			startActivity(new Intent(Intent.ACTION_VIEW, uri));
		    			OauthActivity.this.finish();
					} catch (WeiboException e) {
						e.printStackTrace();
					}
	    			
				}else{//如果网络不可用
					System.out.println("网络不正常");
					AlertDlgUtil.alertDialogNetErr(OauthActivity.this);
				}
			}

		});
	}

}
说明1:这里是用户授权后返回的地址即callback_url。注意授权时请使用系统自带浏览器,不要使用uc。不然授权后不能正常返回!

我们还要注意在OauthActivity的清单中包含以下信息:

<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:scheme="cloay" android:host="OauthResult" /> 
</intent-filter>

授权成功后保存用户授权信息,包括accessToken及用户相关信息,发表下次登录使用。OauthResult类代码:

package com.cloay.weibo.ui;

import java.util.HashMap;

import com.cloay.weibo.R;
import com.cloay.weibo.constants.Constant;
import com.cloay.weibo.constants.OAuthConstant;
import com.cloay.weibo.service.MainService;
import com.cloay.weibo.service.Task;

import weibo4android.User;
import weibo4android.Weibo;
import weibo4android.WeiboException;
import weibo4android.http.AccessToken;
import weibo4android.http.RequestToken;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.LinearLayout;
/**
 * 授权成功后界面
 * @author Cloay
 * 2012-2-25
 * 下午07:34:44
 */
public class OauthResult extends Activity {
	private LinearLayout layoutProgress;   //授权进度条
	private LinearLayout oauthDialog;   //授权成功对话框
	private Weibo weibo = OAuthConstant.getInstance().getWeibo();
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.oauth_success);
		
		layoutProgress = (LinearLayout) findViewById(R.id.progressBar);
		oauthDialog = (LinearLayout) findViewById(R.id.oauth_dialog);
		Button button=  (Button) findViewById(R.id.oauthSuccessBtn);
		button.setOnClickListener(new Button.OnClickListener()
        {
			 public void onClick( View v )
	         {
	    		Intent intent = new Intent(OauthResult.this, MainActivity.class);
	    		startActivity(intent);
	    		OauthResult.this.finish();
	         }
        } );
		
		saveOauth();   //保存已授权用户信息
	}
	
	Handler handler = new Handler(){
		@Override
		public void handleMessage(Message msg) {
			super.handleMessage(msg);
			if(msg.what == Constant.GET_DATA_NORMAL){ //授权成功
				layoutProgress.setVisibility(View.GONE); //关闭进度条
				oauthDialog.setVisibility(View.VISIBLE);  //显示对话框
			}
		}
		
	};
	
	/**
	 * 保存已授权用户信息
	 */
	private void saveOauth() {
		Uri uri=this.getIntent().getData();
		try {
			RequestToken requestToken = OAuthConstant.getInstance().getRequestToken();
			AccessToken accessToken = requestToken.getAccessToken(uri.getQueryParameter("oauth_verifier"));
			OAuthConstant.getInstance().setAccessToken(accessToken);
//			TextView textView = (TextView) findViewById(R.id.TextView01);
//			textView.setText("得到AccessToken的key和Secret,可以使用这两个参数进行授权登录了.\n Access token:\n"+accessToken.getToken()+"\n Access token secret:\n"+accessToken.getTokenSecret());
			//保存已授权用户信息
			weibo.setOAuthAccessToken(accessToken);
			User user = weibo.verifyCredentials();
			
			//使用service后台保存用户信息
			HashMap<String,User> parms = new HashMap<String, User>();
			parms.put("user", user);
			Task task = new Task(Task.SAVE_USER, parms);
			MainService.allTask.add(task);
			
			//让程序继续运行
			Message message = Message.obtain();
			message.what = Constant.GET_DATA_NORMAL;
			handler.sendMessage(message);
		} catch (WeiboException e) {
			e.printStackTrace();
		}
	}
}
授权及授权成功后界面:

             


关于授权就写那么多!有什么问题欢迎留言大家一起交流学习!

说明:转载请注明出处!




4
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:235444次
    • 积分:2515
    • 等级:
    • 排名:第14616名
    • 原创:55篇
    • 转载:11篇
    • 译文:2篇
    • 评论:86条
    文章分类
    最新评论