【OSC手机App技术解析】- 集成新浪微博Android SDK

迷途d书童 发布于 2012/06/27 10:51
阅读 10K+
收藏 15
使用 OSChina.NET Android版客户端的用户,应该知道我们的客户端只需要第一次登陆了新浪微博,以后都可以不用再登陆,直接一键分享,这样很方便用户。

由于新浪微博开放平台预计2012年9月份停止旧版接口和OAuth1.0的使用,此次我们的Android客户端v1.5.3已经更新并使用新版接口和OAuth2.0的SDK。

集成到App的效果图:



下面将新浪微博Android SDK的集成分享给大家。

下载SDK
下载地址: http://open.weibo.com/wiki/SDK
我们找到Android SDK,点击下载。


导入源码包
将com.weibo.net包下面java文件导入项目的src目录下,如下图:


注意:这里我没有导入ShareActivity.java文件以及ShareActivity类里面所需的资源文件。因为我们的App只需一键分享即可,不需要用户去编辑分享的内容。而ShareActivity类实际是个Activity类,涉及到布局等,所以我们这里没有导入。
当然,你可以根据自己的需求,看是否需要导入。

导入相关资源
1、将dialog_bg.9.png图片文件导入到res/drawable-hdpi目录下;
2、将color.xml, dimens.xml, style.xml导入到res/values目录下;

在写导入图片文件的时候,又让我想起SDK中drawable-hdpi目录下一张"刀塔(dota)"的图片。


添加权限
我们需要在AndroidManifest.xml中添加以下权限:
<uses-permission android:name="android.permission.INTERNET"></uses-permission>  
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
<uses-permission android:name="android.permission.WRITE_APN_SETTINGS"></uses-permission>
在新浪微博SDK提供的例子里面是需要以上5个权限的,其实我测试只要前面3个就OK了。

-----------------------以上热身活动都完成后,开始进入主题了----------------------------

调用新浪微博的SDK,首先你要到新浪微博开放平台申请的你的App的key,secret。同时,你还要进入“我的应用--应用详情--应用信息--高级信息--授权设置--应用回调页”设置你的回调页地址。


以下假设你已经有了CONSUMER_KEY, CONSUMER_SECRET, REDIRECT_URL。

首次授权登录
1、初始化weibo
private static final String CONSUMER_KEY = "your app_key";
private static final String CONSUMER_SECRET = "your app_secret";
private static final String REDIRECT_URL = "your redirect_url";
//REDIRECT_URL 必须与你填写在微博开放平台上的一致
Weibo weibo = Weibo.getInstance();
weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);
weibo.setRedirectUrl(REDIRECT_URL);

2、弹出对话框,并授权登录
weibo.authorize(cont, new WeiboDialogListener() {
    @Override
    public void onComplete(Bundle values) {
        try
        {
            String token = values.getString(Weibo.TOKEN);
            String expires_in = values.getString(Weibo.EXPIRES);
            accessToken = new AccessToken(token, CONSUMER_SECRET);
            accessToken.setExpiresIn(expires_in);   
            //此处保存AccessToken
            //your save function
            //微博分享
            weibo.shareToweibo(cont, accessToken.getToken(), accessToken.getSecret(), shareMessage);
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
    @Override
    public void onError(DialogError e) {
        Toast.makeText(context,"授权失败 : " + e.getMessage(), Toast.LENGTH_LONG).show();
    }
    @Override
    public void onCancel() {
        //Toast.makeText(context, "取消授权", Toast.LENGTH_LONG).show();
    }
    @Override
    public void onWeiboException(WeiboException e) {
        Toast.makeText(context,"授权异常 : " + e.getMessage(), Toast.LENGTH_LONG).show();
    }
});  
这里说明下,登录成功后会调用onComplete()方法,在方法里你需要保存AccessToken,同时分享微博。

注意:weibo.shareToweibo()方法是我自己定义的,方便下次直接根据保存的AccessToken分享微博。

这里我把自己写的shareToweibo()方法代码贴出:
/**
 * 分享到微博
 * @author  liux
 */
public boolean shareToweibo(Activity activity, String accessToken, String tokenSecret, String content) throws WeiboException {
    Utility.setAuthorization(new Oauth2AccessTokenHeader());
    WeiboParameters bundle = new WeiboParameters();
    bundle.add("source", APP_KEY);
    bundle.add("status", content);
    String url = SERVER + "statuses/update.json";
    if(mAccessToken == null){
        mAccessToken = new AccessToken(accessToken, tokenSecret);
    }
    request(activity, url, bundle, Utility.HTTPMETHOD_POST, mAccessToken);
    return true;
}
实际调用上面方法的时候,需要try-catch一下,只要没有获取到WeiboException异常,就是分享成功了。

 

一键分享
下面说明一下,以后使用一键分享时,不需要再登录,只需要:
1、初始化weibo(同上)
2、获取保存的AccessToken
3、调用shareToweibo()方法

OK,就这么简单。

如果大家有什么疑问的话,欢迎在下面回帖一起探讨。

PS:

OSC Android客户端下载地址: http://www.oschina.net/uploads/osc.apk
OSC iPhone客户端下载地址:
http://www.oschina.net/uploads/osc.ipa
OSC Windows Phone客户端下载地址: http://www.oschina.net/uploads/osc.xap


加载中
0
PYZWORLD
PYZWORLD
很不错 dota
0
工程师爸爸
工程师爸爸
云里雾里~  应该直接说重点:登陆问题
0
子旺
子旺
我弄好了之后 发现流程还是很简单的,不论是你这里的隐式授权 还是我用的OAuth自定义控件登陆的那种非隐式授权 都挺好弄,可恶的是 新浪将demo做的太差,该给的说明不给,demo中的代码 顺序更是写反了 。
0
shikeaiDev
shikeaiDev
不错的文章 when to opensource?
0
z
zhanglei123
AccessToken 过期了怎么办, 难道不得重新申请吗?
0
迷途d书童
迷途d书童

引用来自“zhanglei123”的答案

AccessToken 过期了怎么办, 难道不得重新申请吗?
AccessToken过期了, 虽说AccessToken里有 RefreshToken, 可以通过用 RefreshToken换取新的AccessToken,但目前没法使,只用重新authorize。
迷途d书童
迷途d书童
回复 @把握今天hxl : 呵呵,问题解决了就好。
把握今天hxl
终于找到什么问题了,不知道为什么新浪的官方SDK莫名其妙地在Weibo.java的dialog()方法里把new WeiboDialog(this, context, url, listener).show()给注释掉了!!难怪不弹出对话框,唉,这样的错误,唉……无语……
把握今天hxl
我按照您的方法实现新浪微博的隐式认证,为什么会在weibo.authorize(AuthorizeActivity.this, new WeiboDialogListener() { …… }); 没有任何反应呢?没报错、没窗口、屏幕一点反应都没有!我用的官方那个demo,有一个“Oauth!”按钮,点击按钮之后执行初始化,然后就是上面这段代码,为什么就没反应呢?
0
z
zhanglei123
那 这就不叫  一键分享, 还得重新authorize, 
迷途d书童
迷途d书童
oauth1.0 授权成功后的AccessToken是可以一直使用的,oauth2.0 授权成功后的AccessToken是有使用期的,当前weibo的sdk是集成oauth2.0的,AccessToken过期后,目前的办法只能再次授权。一键分享也必须授权登录一次,在AccessToken有效期内,不用授权登录就可以分享了。
0
0
海浪only
海浪only

wo我也是这样写的 但是报错:网址 无效 打不开此网页

 

external/chromium/net/disk_cache/stat_hub.cc:190: [0919/192235:ERROR:stat_hub.cc(190)] StatHub::Init - App com.nmj.testweibo isn't supported.

y
yimengyuanyun
请问你后来知道是什么原因了吗?有解决吗?我也遇到这个问题了。。。不知道怎么弄,谢谢
0
j
joejoelotus
谢楼主,原来导入jar包老是出错不能调通,按你的把java文件直接拷到工程里,改改就好了,非常感谢~!
返回顶部
顶部