微博开放平台
微连接
移动应用
网站接入
电商服务商
电商商家
数据服务
数据服务
合作伙伴
微博支付
轻应用
粉丝服务
文档
推广
我的应用
登录
weibo
开发文档
首页
平台政策与指引
概述
平台公约
新手指南
开发者协议
应用运营管理规范
微连接分级管理办法
应用审核产品指南
应用安全开发注意事项
平台应用设计规范
微服务接入指南
微博登录接入
用微博帐号登录
授权机制
移动应用接入
移动应用介绍
移动应用SSO授权
微博Deep Link
媒体接入平台
头条文章开放接口
视频上传开放接口
电商接入平台
电商服务商接入
电商商家端接入
电商平台能力接口
粉丝服务平台
粉丝服务平台
新手接入指南
微信开发者迁移指南
接收消息
发送消息
自定义菜单
用户管理
生成带参数的二维码
Fans Service Platform
商业接口
商业数据接入指南
订阅服务手册(中文版)
订阅服务手册(英文版)
商业接口-REST API
商业数据常见问题
网站接入
网站接入介绍
微博API
微博API
接口访问频次权限
资源下载
SDK
微博标识下载
常见问题
联系我们
工具箱
链入页面
链出更改
特殊页面
查看源代码
跳转到:
导航
,
搜索
根据下列原因,你没有权限编辑本页:
您刚才请求的操作只有这个用户组中的用户才能使用:
用户
您可以查看并复制此页面的源代码:
==概述== 微博Android平台SDK为第三方微博应用提供了文档易用的微博API调用服务,使第三方客户端无需了解复杂的验证,API调用过程。并可以实现分享到微博的功能,可以分享文字,或者多媒体信息到内置的分享页面,并发送到微博。 ==名词解释== <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst"> </th><th> </th></tr> <tr> <td class="wiki_table_tdfirst">Consumer_key </td><td>分配给每个第三方应用的app key。用于鉴权身份,显示来源等功能。 </td></tr> <tr> <td class="wiki_table_tdfirst">Consumer_secret </td><td>生成请求request Token的secret,与consumer key一起分配。 </td></tr> <tr> <td class="wiki_table_tdfirst">Oauth_token </td><td>服务器根据app key和时间,callback_url等哈希出的token值,用于获取oauth verifier。 </td></tr> <tr> <td class="wiki_table_tdfirst">Oauth_token_secret </td><td>与oauth token一起使用,用于获取oauth verifier。 </td></tr> <tr> <td class="wiki_table_tdfirst">Oauth_verifier </td><td>通过oauth页面返回的verifier,用于最终获取access token。 </td></tr> <tr> <td class="wiki_table_tdfirst">Access_token </td><td>表示用户身份的token,用于微博API的调用。 </td></tr> </table> ==整体架构== '''主要类说明:''' {{center|http://www.sinaimg.cn/blog/developer/wiki/andr1.jpg}} *1、Weibo: 微博API 接口类,对外提供weibo api的调用,包括登录,API调用,微博分享等功能。 *2、AsyncWeiboRunner:微博api异步执行类,封装了回调接口,通过创建线程来调用Weibo中的接口方法。 *3、Utility:互联网工具类,包括接口请求GET/POST封装,BASE64等encode,decode方法。 *4、WeiboException:微博异常封装类,封装了微博的各个异常。 ==接口说明== '''Class com.weibo.net.Weibo:''' ===获取request token=== 接口名称:public RequestToken getRequestToken(Context context, String key, String secret, String callback_url); <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">context </td><td>传递应用上下文环境,用于获取当前网络状态,弹出对话框等。 </td></tr> <tr> <td class="wiki_table_tdfirst">key </td><td>分配给第三方客户端的app key </td></tr> <tr> <td class="wiki_table_tdfirst">secret </td><td>分配给第三方客户端的app secret </td></tr> <tr> <td class="wiki_table_tdfirst">callback_url </td><td>用于oauth authorize页面回调的url </td></tr> </table> 返回结果:RequestToken:RequestToken封装request tokens属性类,继承自Token,包含oauth_token, oauth_token_secret多个属性。 ===获取access token=== 接口名称:public AccessToken generateAcessToken(Context context, RequestToken requestToken) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">context </td><td>传递应用上下文环境,用于获取当前网络状态,弹出对话框等。 </td></tr> <tr> <td class="wiki_table_tdfirst">RequestToken </td><td>用于存取oauth token和oauth secret的token类 </td></tr> </table> 返回结果:AccessToken: AccessToken封装access tokens属性类,继承自Token,包含access_token, oauth_token_secret多个属性。 ===获取Oauth2.0 的access token=== 接口名称:Oauth2AccessToken getOauth2AccessToken(Context context, String app_key,String app_secret, String usrname, String password) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">context </td><td>传递应用上下文环境,用于获取当前网络状态,弹出对话框等。 </td></tr> <tr> <td class="wiki_table_tdfirst">App_key </td><td>Client_id,第三方应用的appkey </td></tr> <tr> <td class="wiki_table_tdfirst">App_secret </td><td>Client_secret,第三方应用的appsecret </td></tr> <tr> <td class="wiki_table_tdfirst">Username </td><td>微博用户名称 </td></tr> <tr> <td class="wiki_table_tdfirst">password </td><td>微博用户密码 </td></tr> </table> 返回结果:Oauth2AccessToken: Oauth2AccessToken封装tokens属性类,继承自Token,包含access_token, oauth_token_secret多个属性。 ===微博API请求=== 接口名称:public String request(Context context, String url, WeiboParameters params, String httpMethod) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">context </td><td>传递应用上下文环境,用于获取当前网络状态,弹出对话框等。 </td></tr> <tr> <td class="wiki_table_tdfirst">params </td><td>封装每个微博API请求的参数对到实体类WeiboParameters中 </td></tr> <tr> <td class="wiki_table_tdfirst">httpMthod </td><td>API请求方式 (“GET”, “POST”, “DELETE”) </td></tr> </table> 返回结果:String:返回所请求的服务器所返回的xml/json数据。 ===分享到微博=== 接口名称:public boolean share2weibo(Activity activity, String accessToken, String tokenSecret, String content, String picPath) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">activity </td><td>Activity引用,用于调起新的分享activity或者分享dialog。 </td></tr> <tr> <td class="wiki_table_tdfirst">accessToken </td><td>代表用户身份的access token。 </td></tr> <tr> <td class="wiki_table_tdfirst">tokenSecret </td><td>oauth_token_secret,用户获取acessToken,鉴权用户身份等。 </td></tr> <tr> <td class="wiki_table_tdfirst">content </td><td>要分享的微博内容,限140个字。 </td></tr> <tr> <td class="wiki_table_tdfirst">picPath </td><td>分享到微博的图片路径(图片大小<1M) </td></tr> </table> 返回结果:Boolean: true分享成功,false 分享失败。 ===通过XAuth认证获取用户身份=== 接口名称:public AccessToken getXauthAccessToken(Context context, String app_key, String app_secret, String usrname, String password) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">context </td><td>传递应用上下文环境,用于获取当前网络状态,弹出对话框等。 </td></tr> <tr> <td class="wiki_table_tdfirst">App_key </td><td>分配给第三方客户端的consumer key。 </td></tr> <tr> <td class="wiki_table_tdfirst">App_secret </td><td>分配给第三方客户端的consumer secret。 </td></tr> <tr> <td class="wiki_table_tdfirst">Username </td><td>微博用户名称 </td></tr> <tr> <td class="wiki_table_tdfirst">password </td><td>微博用户密码 </td></tr> </table> 返回结果:AccessToken: AccessToken封装access tokens属性类,继承自Token,包含access_token, oauth_token_secret多个属性。 ===通过Oauth2.0隐式授权认获取AccessToken=== 接口名称:void authorize(Activity activity, final WeiboDialogListener listener) <table class="wiki_table" border="0" cellspacing="0" cellpadding="0"> <tr> <th class="wiki_table_thfirst">参数名称 </th><th>作用 </th></tr> <tr> <td class="wiki_table_tdfirst">activity </td><td>传递应用上下文环境,用于获取当前网络状态,弹出对话框等。 </td></tr> <tr> <td class="wiki_table_tdfirst">listener </td><td>授权对话框回调接口。处理授权完成、授权失败、授权取消等事件。 </td></tr> </table> ==实例分析== 以下代码的具体信息请参考com_weibo_android_example工程。svn地址为: http://weibo-android-sdk.googlecode.com/svn/example ===登录=== '''第一步In AuthorizeActivity:''' 获取微博实体类,传入app key, secret,以及callback_url。 <pre>Weibo weibo = Weibo.getInstance(); RequestToken requestToken = weibo.getRequestToken(AuthorizeActivity.this, Weibo.getAppKey(), Weibo.getAppSecret(), AuthorizeActivity.URL_ACTIVITY_CALLBACK); </pre> '''第二步In AuthorizeActivity:''' 用获取到的oauth token , oauth_token_secret访问open api authorize页面。 <pre>Uri uri = Uri.parse(AuthorizeActivity.URL_ACTIVITY_CALLBACK); startActivity(new Intent(Intent.ACTION_VIEW, uri)); </pre> '''第三步 In TestActivity:''' 获取到callback的oauth_verifier,并根据它获取accessToken,完成登录。 <pre>public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); this.setContentView(R.layout.timeline); Uri uri = this.getIntent().getData(); String oauth_verifier = uri.getQueryParameter("oauth_verifier"); mWeibo.addOauthverifier(oauth_verifier); try { mWeibo.generateAccessToken(this, null); </pre> ===访问微博API=== '''第一步 In TestActivity:''' 调用Weibo实体类中request进行简单的微博API访问,前提是accessToken已经获取到。 <pre>private String getPublicTimeline(Weibo weibo) throws MalformedURLException, IOException, WeiboException { String url = Weibo.SERVER + "statuses/public_timeline.json"; WeiboParameters bundle = new WeiboParameters(); bundle.add("source", Weibo.getAppKey()); String rlt = weibo.request(this, url, bundle, "GET", mWeibo.getAccessToken()); return rlt; } </pre> ===分享到微博=== '''第一步 in TestActivity:''' 得到weibo实体类,传入我们需要分享的文字”abc”, 以及要分享的图片路径”picPath”。 <pre>File file = Environment.getExternalStorageDirectory(); String sdPath = file.getAbsolutePath(); // 请保证SD卡根目录下有这张图片文件 String picPath = sdPath + "/" + "abc.jpg"; File picFile = new File(picPath); if (!picFile.exists()) { Toast.makeText(TestActivity.this, "图片" + picPath + "不存在!", Toast.LENGTH_SHORT).show(); picPath = null; } try { share2weibo("abc", picPath); </pre> '''第二步 in TestActivity:''' 调用微博中share2weibo方法,传入activity引用,调起我们的分享页面。 <pre>private void share2weibo(String content, String picPath) throws WeiboException { Weibo weibo = Weibo.getInstance(); weibo.share2weibo(this, weibo.getAccessToken().getToken(), weibo.getAccessToken().getSecret(), content, picPath); } </pre> ===异步调用AsyncWeiboRunner中API方法=== '''第一步In ShareActvity:''' <pre>调用类实现一部回调RequestLisener接口。 public class ShareActivity extends Activity implements OnClickListener, RequestListener { </pre> '''第二步In ShareActvity:''' 调用异步upload接口,实现发微博功能。 <pre>private String upload(Weibo weibo, String source, String file, String status, String lon, String lat) throws WeiboException { WeiboParameters bundle = new WeiboParameters(); bundle.add("source", source); bundle.add("pic", file); bundle.add("status", status); if (!TextUtils.isEmpty(lon)) { bundle.add("lon", lon); } if (!TextUtils.isEmpty(lat)) { bundle.add("lat", lat); } String rlt = ""; String url = Weibo.SERVER + "statuses/upload.json"; AsyncWeiboRunner weiboRunner = new AsyncWeiboRunner(weibo); weiboRunner.request(this, url, bundle, Utility.HTTPMETHOD_POST, this); return rlt; } </pre> '''第三步In ShareActvity:''' 实现回调,对发表成功onComplete,以及发表失败onError的情况进行处理。 <pre>@Override public void onComplete(String response) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText(ShareActivity.this, R.string.send_sucess, Toast.LENGTH_LONG).show(); } }); this.finish(); } @Override public void onIOException(IOException e) { // TODO Auto-generated method stub } @Override public void onError(final WeiboException e) { runOnUiThread(new Runnable() { @Override public void run() { Toast.makeText( ShareActivity.this, String.format(ShareActivity.this.getString(R.string.send_failed) + ":%s", e.getMessage()), Toast.LENGTH_LONG).show(); } }); } </pre> ===通过Oauth2.0隐式授权获得AccessToken=== '''第一步 In AuthorizeActivity:''' 调用setRedirectUrl方法设置应用回调页。 <pre>Weibo weibo = Weibo.getInstance(); // !!Don't forget to set app_key and secret before get token!!! weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET); // Oauth2.0 隐式授权认证方式 weibo.setRedirectUrl("http://www.sina.com"); weibo.authorize(AuthorizeActivity.this, new AuthDialogListener()); </pre> 对于Mobile客户端应用来说,是不存在Server的,故此处的应用回调页地址只要与新浪微博开放平台->我的应用->应用信息->高级应用->授权设置->应用回调页中的url地址保持一致就可以了,如图所示: {{center|http://www.sinaimg.cn/blog/developer/wiki/andr3.jpg}} '''第二步In AuthorizeActivity:''' 实现WeiboDialogListener接口。授权成功后可在onComplete函数中获得accesstoken信息。具体如何保存、使用accesstoken信息由开发者自行处理。 <pre>class AuthDialogListener implements WeiboDialogListener { @Override public void onComplete(Bundle values) { String token = values.getString("access_token"); String expires_in = values.getString("expires_in"); mToken.setText("access_token : " + token + " expires_in: " + expires_in); AccessToken accessToken = new AccessToken(token, CONSUMER_SECRET); accessToken.setExpiresIn(expires_in); Weibo.getInstance().setAccessToken(accessToken); Intent intent = new Intent(); intent.setClass(AuthorizeActivity.this, TestActivity.class); startActivity(intent); } @Override public void onError(DialogError e) { Toast.makeText(getApplicationContext(), "Auth error : " + e.getMessage(), Toast.LENGTH_LONG).show(); } @Override public void onCancel() { Toast.makeText(getApplicationContext(), "Auth cancel", Toast.LENGTH_LONG).show(); } @Override public void onWeiboException(WeiboException e) { Toast.makeText(getApplicationContext(), "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show(); } } </pre> '''第三步 In AuthorizeActivity:''' <pre>调用authorize方法,弹出授权对话框,进行授权。授权成功后即可获得accestoken。 // !!Don't forget to set app_key and secret before get token!!! weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET); // Oauth2.0 隐式授权认证方式 weibo.setRedirectUrl("http://www.sina.com"); weibo.authorize(AuthorizeActivity.this, new AuthDialogListener()); </pre> {{center|http://www.sinaimg.cn/blog/developer/wiki/andr5.png}} ==SDK使用说明== *'''1、将SDK的工程项目导入到eclipse中''' *在eclipse中选择File->Import->General->Existing Projects into Workspace。注意:SDK工程的编码格式为UTF-8。如图所示: *'''2、在需要集成本SDK的工程项目中添加Library''' *右键 -> Properties -> Android。设置Library属性,如图所示: *'''3、Manifest文件中必须包含以下permission:''' *<uses-permission android:name="android.permission.INTERNET"></uses-permission> *<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission> *<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission> *<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission> *'''4、代码中将APP_KEY, APP_SECRET存放在Weibo类中,可以修改成其他传参方式设置''' *In Weibo <pre>private static String APP_KEY = ""; private static String APP_SECRET = ""; </pre> *In TestActivity <pre>Weibo.getAppKey(); Weibo.getAppSecret(); </pre> *'''5、SDK使用及修改必须遵守微博开发者协议,以及开源软件协议。'''
该页面使用的模板:
模板:Center
(
查看源代码
)
返回到
Android SDK说明文档
。
反馈
分享
顶部