zoukankan      html  css  js  c++  java
  • Android上开发新浪微博OAuth2.0认证

    由于新浪微博的认证已经更新到OAuth2.0,以前的有些东西已不能使用,在网上找的资料大多都是基于1.0的认证,故只能自己摸索,现把DEMO分享出来给大家共享。这里注意,该DEMO只是初步实现了发新微博,转发微博,评论微博和查询最新的微博的功能,和实际项目还有很大差距,我直接使用了新浪微博提供的SDK,大牛们可以直接无视掉了,呵呵

     先说一下新浪微博的SDK的导入吧,新浪微博的SDK是源码方式开放的,和我们平时使用的有些不一样,我在这里卡了很久,当然和我没仔细看SDK的文档有关系,为了减少大家走的弯路,这里着重提一下。导入步骤如下:

    1)新浪微博官方的SDK包中一般有2个目录,一个是SDK的源码包(此包中有Android平台微博SDK说明文档),另一个是例子。首先需要将源码包导入到eclipse中。SDK工程的编码格式为UTF-8。

     2)在需要集成新浪微博SDK包的工程项目中添加Library,右键 -> Properties -> Android。设置Library属性。

     

    下面说下如何认证,里面的代码大部分用的是新浪提供的例子

    private static final String CONSUMER_KEY = "*******";// 替换成你自己申请的KEY 
    private static final String CONSUMER_SECRET = "**************************"; // 替换陈你自己申请的SECRET
    Weibo weibo = Weibo.getInstance();
    weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);
    // Oauth2.0 隐式授权认证方式
    weibo.setRedirectUrl("http://www.sina.com");// 此处使用的URL必须和新浪微博上应用提供的回调地址一样
    weibo.authorize(OAuthWeiboActivity.this, new AuthDialogListener());

    对于Mobile客户端应用来说,是不存在Server的,故此处的应用回调页地址只要与新浪微博开放平台->我的应用->应用信息->高级应用->授权设置->应用回调页中的url地址保持一致就可以了。

    以下代码实现WeiboDialogListener接口,授权成功后可在onComplete函数中获得AccessToken信息。具体如何保存、使用AccessToken信息由开发者自行处理,比如存放在SharedPreferences中,但是AccessToken的有效期有限制,一般正常情况下是7天存活期,过期后需要重新获得。

    class AuthDialogListener implements WeiboDialogListener 
    {
            @Override
            public void onComplete(Bundle values) {
                String token = values.getString("access_token");
                String expires_in = values.getString("expires_in");
                Log.i(“info”,"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(OAuthWeiboActivity.this, MySinaWeiboActivity.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();
            }
        }

    发新微博

    private String update(Weibo weibo, String source, String status, String lon, String lat)
                throws WeiboException {
            WeiboParameters bundle = new WeiboParameters();
            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/update.json";
            rlt = weibo.request(this, url, bundle, Utility.HTTPMETHOD_POST, weibo.getAccessToken());
            return rlt;
        }

    转发微博

        private String repost(String str, String id) throws MalformedURLException, IOException, WeiboException
        {
        String url = Weibo.SERVER + "statuses/repost.json";
        WeiboParameters bundle = new WeiboParameters();
        bundle.add("id", id);
        bundle.add("status", str);
        String rlt = weibo.request(RepostWeiboActivity.this, url, bundle, "POST", weibo.getAccessToken());
        return rlt;
        }

    评论微博

    private String comment(String id) throws MalformedURLException, IOException, WeiboException
    {
        String url = Weibo.SERVER + "comments/create.json";         
        WeiboParameters bundle = new WeiboParameters();
        bundle.add("comment", "测试");
        bundle.add("id", id);
        String rlt = weibo.request(CommentWeiboActivity.this, url, bundle, "POST", weibo.getAccessToken());
        eturn rlt;
    }

    查询最新的微博

        private String getPublicTimeline() throws MalformedURLException, IOException, WeiboException
        {
        String url = Weibo.SERVER + "statuses/public_timeline.json";
        WeiboParameters bundle = new WeiboParameters();
        bundle.add("count", "1"); 
        String rlt = weibo.request(QueryWeiboActivity.this, url, bundle, "GET", weibo.getAccessToken());
        return rlt;
        }

    原文地址:http://blog.csdn.net/zingck/article/details/7395539

  • 相关阅读:
    阿里面试后的问题总结
    Spring IOC源码实现流程
    Spring Aop源码分析
    SpringCloud的分布式配置及消息总线
    阿里java编码规范考试总结
    压缩文件的压缩时候中文乱码码
    mybatis的时间比较 xml 及不解析<=的写法
    批量插入一张表的数据,并且生成不同的uuid 字符截取 批量更新 去除重复数据
    Redis集群的搭建
    Python 之 基础知识(二)
  • 原文地址:https://www.cnblogs.com/seantown/p/2837997.html
Copyright © 2011-2022 走看看