博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
新浪微博教程(二)各个类和架构说明
阅读量:5915 次
发布时间:2019-06-19

本文共 4175 字,大约阅读时间需要 13 分钟。

 

 

主要类说明:

1. Weibo微博API 接口类,对外提供weibo api的调用,包括登录,API调用,微博分享等功能。

2. AsyncWeiboRunner:微博api异步执行类,封装了回调接口,通过创建线程来调用Weibo中的接口方法。

3. Utility:互联网工具类,包括接口请求GET/POST封装,BASE64encodedecode方法。

4. WeiboException:微博异常封装类,封装了微博的各个异常

 

 

 

新浪微博Android SDK的使用

 

很多Android应用会加入分享到微博或人人的功能,今天我们就来看一下用新浪提供的Android SDK写一个发微博的Demo程序。

 

首先不得不说说关于OAuth授权认证的事情,因为现在的开放平台API如新浪、腾讯、人人SDK都必须在这个基础上才能调用:

 

OAuth是一种国际通用的授权方式,它的特点是不需要用户在第三方应用输入用户名及密码。OAuth的技术说明可参看官方网站http://oauth.net。

 

新浪微博通过OAuth建立普通用户、客户端程序、新浪微博三者之间的相互信任关系,让客户端程序不需要知道用户的账号和密码、用户也能浏览、发布微博,这样有效的保护了用户账号的安全性。

 

结合新浪微博的OAuth认证来说说具体的功能实现,首先罗列一下四组关键字组:

 

第一组:(App Key和App Secret),就是在新浪开发平台建一个新的应用获取App Key和App Secret  第二组:(Request Token和Request Secret)  第三组:(oauth_verifier)  第四组:(user_id、Access Token和Access Secret)

 

新浪微博的OAuth认证过程如下,当用户第一次使用客户端软件时,程序用第一组参数向新浪微博发起请求,然后新浪微博经过验证后就返回第二组参数给程序;当程序获取第二组参数时作为参数跳至新浪微博的授权页面(由下面WebView类来实现),然后用户在新浪的这个页面里输入自己的微博账号和密码,完成授权后根据程序设定的回调地址把第三组参数返回,接下程序把第二组参数和第三组参数作为参数再次向新浪微博发起请求,新浪微博返回第四组参数给程序,从此就可以根据第四组参数调用各种API了。

 

步骤图示如下:

 

新浪微博,OAuth认证,Android

 

按照OAuth协议规范,输入账号密码之后需要跳转到callbackURL,所以在开发Android应用中, 我们需要自己实现一个WebView类,供OAuth认证时打开Url, Android应用中其实原来是不用实现的,但是当用户认证是选择用UC等第三方的浏览器进行用户认证时,用户输入账号密码后点击授权按钮后不会跳转,只有用Android自带的浏览器才没有问题可,惜是大多数的用户都会用第三方的浏览器,这样导致认证不能正常进行,所以需要自己实现一个WebView,其实也不难,只需一个WebV控件即可。

 

实际开发中,我们需要一个SinaAccessInfo类,保存用户的user_id、Access Token和Access Secret,微博系统中,OAuth的Access token不会过期,所以可以用Android SQLite保存,程序运行,数据库如果为空,则调用startOAuthView()方法跳到WebView授权页面。

 

SinaAccessInfo类

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
private
CommonsHttpOAuthConsumer httpOauthConsumer;
private
OAuthProvider httpOauthprovider;
private
final
static
String callBackUrl =
"sinaweibocallbackurl://Sina_SplashActivity"
;
//你申请的应用的API Key
httpOauthConsumer =
new
CommonsHttpOAuthConsumer(
                
getString(R.string.app_sina_consumer_key),
                
getString(R.string.app_sina_consumer_secret));
//省略
private
void
startOAuthView() {
    
try
{
        
String authUrl = httpOauthprovider.retrieveRequestToken(
                
httpOauthConsumer, callBackUrl);
        
Intent intent =
new
Intent();
        
Bundle bundle =
new
Bundle();
        
bundle.putString(
"url"
, authUrl);
        
intent.putExtras(bundle);
        
intent.setClass(mContext, SinaWebViewActivity.
class
);
        
startActivity(intent);
    
}
catch
(Exception e) {
        
Log.i(
"yilee"
, e.getMessage());
    
}
}

 

其中:

 

callBackUrl是指用户在WebView输入账号密码后的回调类。需要在AndroidManifest.xml说明。

 

下面来看下WebView类:

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
public
class
SinaWebViewActivity
extends
Activity {
    
private
WebView webView;
//在xml中定义的控件
    
private
Intent intent =
null
;
    
public
static
SinaWebViewActivity webInstance =
null
;
    
@Override
    
protected
void
onCreate(Bundle savedInstanceState) {
        
super
.onCreate(savedInstanceState);
        
requestWindowFeature(Window.FEATURE_PROGRESS);
        
setContentView(R.layout.sina_web);
        
setTitle(
"分享到新浪微博"
);
        
webInstance =
this
;
        
webView = (WebView) findViewById(R.id.web);
        
WebSettings webSettings = webView.getSettings();
        
webSettings.setJavaScriptEnabled(
true
);
        
webSettings.setSaveFormData(
true
);
        
webSettings.setSavePassword(
true
);
        
webSettings.setSupportZoom(
true
);
        
webSettings.setBuiltInZoomControls(
true
);
        
webSettings.setCacheMode(WebSettings.LOAD_NO_CACHE);
        
webView.setOnTouchListener(
new
OnTouchListener() {
            
@Override
            
public
boolean
onTouch(View v, MotionEvent event) {
                
webView.requestFocus();
                
return
false
;
            
}
        
});
        
intent =
this
.getIntent();
        
if
(!intent.equals(
null
)) {
            
Bundle b = intent.getExtras();
            
if
(b !=
null
&& b.containsKey(
"url"
)) {
                
webView.loadUrl(b.getString(
"url"
));
                
webView.setWebChromeClient(
new
WebChromeClient() {
                    
public
void
onProgressChanged(WebView view,
int
progress) {
                        
setTitle(
"稍等片刻,页面加载中…"
+ progress +
"%"
);
                        
setProgress(progress *
100
);
                        
if
(progress ==
100
) {
                            
setTitle(R.string.app_name);
                        
}
                    
}
                
});
            
}
        
}
    
}
}

 

效果如下图:

 

新浪微博,OAuth认证,Android

 

经过这个步骤,我们已经可以得到user_id、Access Token和Access Secret,便可以用来发表微博了!

 

1
2
3
4
Weibo weibo = OAuthConstant.getInstance().getWeibo();
weibo.setToken(accessToken, accessSecret);
File file = OperateBitmap.readFile(bitmap_name);
Status status=weibo.uploadStatus(msg, file);

 

其中:

 

accessToken和accessSecret就是通过WebView得到的;bitmap_name是图片地址。status是返回的信息,可以知道知否发送成功。

 

这样便可以成功发一条带有图片的微博了,在此基础上,我们可以继续完善,完成一个新浪微博的Android客户端也不错。。。

 

Posted on 2011-08-04 

转载地址:http://drgpx.baihongyu.com/

你可能感兴趣的文章
微软Windows主管:WP今年不是我们的重点
查看>>
纯科普篇!安全防盗电子围栏这些事儿
查看>>
百会CRM:大数据和云计算引爆智能化变革
查看>>
还没升级win10?Win10免费升级只剩9天了
查看>>
智能PDU怎样帮助数据中心节能
查看>>
走向5G时代功在技术之外
查看>>
JAVA之抽象类与接口的区别
查看>>
2021年3GPP物联网标准将占蜂窝物联网无线节点出货量一半以上
查看>>
【云和恩墨大讲堂电子期刊】挑战者:Google成功的背后
查看>>
Oracle 12c的一些新等待事件
查看>>
微博已跨过“历史三峡”?
查看>>
加拿大三分之二的电力供应来自可再生能源
查看>>
AngularJS —— 使用模块组织你的代码 【已翻译100%】(2/3)
查看>>
JS中判断对象是不是数组的方法
查看>>
这个是网上下载的一个input模糊搜索 (L01)
查看>>
android.support.v7.widget.SwitchCompat
查看>>
白话composer的简单使用
查看>>
SPI机制与策略模式
查看>>
使用 Docker 和 Traefik 搭建 GitLab (前篇)
查看>>
如何让mysql索引更快一点
查看>>