首页 > 安全资讯 >

android 腾讯微博分享功能实现(oauth代替openkey&openid请求)

12-07-18

最近腾讯微博官方网站API有的更新,不过也好久了.网上想找些案例,可是都没有介绍,好是郁闷,不过现在解决了,如果有类似问题的同学们,可以参考下, 这次的比较简单,对我们开发应用的程序员比较不错.下面我...

   最近腾讯微博官方网站API有的更新,不过也好久了.网上想找些案例,可是都没有介绍,好是郁闷,不过现在解决了,如果有类似问题的同学们,可以参考下,
       这次的比较简单,对我们开发应用的程序员比较不错.下面我简单介绍下微博API的应用。
       官方网址
      

        为了顾全所有版本,我们就就用括号里面的jar包.
        这里我就不详细介绍了,不懂的可以参考官方文档,很详细的.
        下面这个是发表一条微博的接口参数:
       
           首先我们就要获取Oauth或者是openid&openkey,但是我研究了好久没有弄出来,官方文档说,在请求时候callback不为空,在授权后redirect_url中会包含这两个值,但我看了官方给出例子的源码,他们根本就没有运用openid和openkey,他们用的是Oauth对象.所以我也跟着用Oauth对象请求.
         不明白的可以参考源码.
         我这里简单的说明一下: 
[java]
/***
     * 获取腾讯requestToekn后的OAuthV1
     * 
     * @throws Exception
     */ 
    public static OAuthV1 getOAuthV1() throws Exception { 
        OAuthV1 oAuth = new OAuthV1(Constant.TencentWeiBo.callback); 
        oAuth.setOauthConsumerKey(Constant.TencentWeiBo.consumerKey); 
        oAuth.setOauthConsumerSecret(Constant.TencentWeiBo.consumerSecret); 
        oAuth = OAuthV1Client.requestToken(oAuth); 
        return oAuth; 
    } 
 
[java] 
/***
     * 腾讯认证
     */ 
    public void TencentOauth(Context context) { 
        try { 
            oAuth = oauth.getOAuthV1(); 
        } catch (Exception e) { 
            e.printStackTrace(); 
        } 
        Intent intent = new Intent(context, OAuthV1AuthorizeWebView.class); 
        intent.putExtra("oauth", oAuth); 
        startActivityForResult(intent, requestCode); 
    } 
OAuthV1AuthorizeWebView
[java] 
/***
     * 认证回调
     */ 
    protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
        if (requestCode == 1) { 
            if (resultCode == OAuthV1AuthorizeWebView.RESULT_CODE) { 
                oAuth = (OAuthV1) data.getExtras().getSerializable("oauth"); 
 
                try { 
                    oAuth = OAuthV1Client.accessToken(oAuth); 
 
                    System.out.println(oAuth.getOauthToken() + ",," 
                            + oAuth.getOauthTokenSecret() + ",," + ",," 
                            + oAuth.getOauthConsumerSecret()); 
                     
                    System.out.println(oAuth.getParamsList()); 
 
                } catch (Exception e1) { 
                    e1.printStackTrace(); 
                } 
            } 
        } 
    } 
我们调用API接口的时候只需要把oAuth作为参数穿进去就OK了,
tAPI = new TAPI("1.0");
tAPI.add(oAuth, "json", "腾讯就是牛逼...", "127.0.0.1");
这样就完成了调用,很简单吧.
但是现在还有一个问题:我们分享的时候总不能每次都授权认证吧,我们需要保存一些值,是的,我们需要把accessToken,accessTokenSecret在这里我们这样获取到:oAuth.getOauthToken();oAuth.getOauthTokenSecret() ;腾讯比较省事,把未授权的和授权后的用同一个变量和方法,不过她们会根据不同的请求变化.不懂得看API或源码,
保存好值后,我们在每次调用API的时候只需要创建oAuth对象,把相应值set进去就可以了,其实这样是行不通的,这点和新浪微博不太一样, 通过源码,可以得知,我也是大致说一下,因为我的水平有限,
  
[java] 
  public String postContent(String url, List<NameValuePair> paramsList, OAuth oAuth) throws Exception { 
 
        if(null==qHttpClient){ 
            throw new OAuthClientException("1001"); 
        } 
        OAuthV1 oAuthV1 = (OAuthV1) oAuth; 
        paramsList.addAll(oAuthV1.getTokenParamsList()); 
 
        String queryString = OAuthV1Client.getOauthParams(url, "POST", oAuthV1.getOauthConsumerSecret(), 
                oAuthV1.getOauthTokenSecret(), paramsList); 
 
//        log.info("RequestAPI postContent queryString = " + queryString); 
        return qHttpClient.httpPost(url, queryString);   www.2cto.com
    } 
这是源码最终执行发送微博的方法,我们可以看到,她用了参数有:oAuthV1.getTokenParamsList(),oAuthV1.getOauthConsumerSecret(), oAuthV1.getOauthTokenSecret(),总共这三个参数,可是我们新new的Oauth对象里面没有TokenParamsList(),所以会一直执行失败,因此我们要想办法把这个ParamsList参数传进去.
其实源码看了不是很懂,因为基础差,就断点查看,oAuthV1这个对象里面到底有那些属性值,通过发现,其实也就是authV1 = OAuthV1Client.requestToken(authV1);这个方法执行后的对象,所以现在问题就解决了,
   重:我们获取到accessToken,accessTokenSecret,后,在以后访问分享微博的时候,我们不需要new oAuthV1()对象,而是获取重新获取Reuqest_Token后的对象,也就是我上面写的那个方法.这样就解决了问题。
    好了,我就讲这么多了,其实很简单呐,但是也纠结了我好久。
    至于Demo我就不上传了,因为真的很简单,相信你也会“小葱拌豆腐”吧.
     作者:jj120522
相关文章
最新文章
热点推荐