接着上篇继续,如果没有授权用户则跳转到授权页:
为了节省时间我使用了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();
}
}
}
授权及授权成功后界面:
关于授权就写那么多!有什么问题欢迎留言大家一起交流学习!
说明:转载请注明出处!