公司的应用需要一个分享功能,希望能够分享到新浪和腾讯的微博平台上去。要求比较简单,只是允许用户能够发一条我们预制好的微博即可。

新浪微博和腾讯微博都有各自的开放平台,平台上提供了丰富的api接口和详尽的说明文档。即使从来没有做过,借助这些资料和SDK上的Demo,都可以迅速上手。

本文将分两部分来各自介绍新浪和腾讯微博分享的流程和操作方法,仅为菜鸟童鞋们参考。其中最多的问题都来自于Oauth认证,而认证这部分最多的问题来自于腾讯微博,这一点我们后边再说。

由于新浪和腾讯采用的Oauth认证算法的版本不一样,腾讯使用的是Oauth1.0 ,尽管官方提供的SDK说已经支持Oauth2.0,但是我没有试验成功。

通过了认证,什么问题都会迎刃而解。

好了,废话不多说,正文开始。

一:Oauth认证简介

首先来说Oauth认证到底是个神马东西,简单来说就是一种授权的算法。可以保证第三方应用在不拿到用户微博的账号和密码的前提下,访问用户的微博信息,而这一切都需要用户的授权才可以,从而最大程度的保护用户账号和密码的安全。

认证步骤简述如下:

1. 用户要使用第三方应用的微博服务,第三方应用首先向新浪微博请求身份验证。

2.服务器根据第三应用提供的APP Key和App Secret(密钥) ,核实是否是合法应用。

如果通过验证,返回第三方应用一个未授权的请求令牌(Request Token)。这个令牌告诉用户,此应用是合法滴。

3. 第三方应用拿着这个未授权的令牌,重定向到服务端的用户授权页,请求用户授权。这个授权页一定是服务端的,不允许第三方来构造。

4.用户输入授权账号和密码,提交服务端验证通过后,会向第三方应用返回授权的请求令牌和验证码等。

5.第三方应用在拿着授权的请求令牌去换取访问令牌(Access Token)。

6.服务器返回访问令牌

如下图所示:

    二:新浪微博应用申请及SDK下载

1. 登录新浪微博开房平台,没有的话就注册一个。

2.创建一款手机应用,按照向导提示,输入相关信息即可。新浪会为你的应用分配一个独一无二的APP KEY和APP Secret 。将这两个东西保存好。

当然这只是我们自己申请测试的应用,在访问人数和次数上,会有一定的限制。如果你的应用需要正式上线运行,要提交新浪审核。

3.准备工作完成,去平台下载android版的SDK。

    三:动手开发测试

新浪微博的SDK包中含有一个简单的DEMO,可以发布一条微博,这对我们来说已近足够。我们主要使用它封装好的API。

1.SDK集成

将SDK包中的android.net.http,android.webket,com.weibo.net包拷贝到自己的项目目录下,这个不用多说。

2. 在AuthorizeActivity中,将APP KEY和App Secret替换成自己申请应用的APP KEY和App Secret。

3.按照文档介绍,手机的桌面应用使用隐式验证即可。其中Activity的重要代码按照如下编写即可。参见下载包中的微博SDK说明文档。

import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;
 
import com.weibo.net.AccessToken;
import com.weibo.net.DialogError;
import com.weibo.net.Oauth2AccessToken;
import com.weibo.net.RequestToken;
import com.weibo.net.Weibo;
import com.weibo.net.WeiboDialogListener;
import com.weibo.net.WeiboException;
 
/**
 * Sample code for testing weibo APIs.
 * 
 * @author ZhangJie (zhangjie2@staff.sina.com.cn)
 */
 
public class AuthorizeActivity extends Activity {
    /** Called when the activity is first created. */
    private Button mLogin;
    private TextView mToken;
 
    private static final String URL_ACTIVITY_CALLBACK = "weiboandroidsdk://TimeLineActivity";
    private static final String FROM = "xweibo";
 
    // 设置appkey及appsecret,如何获取新浪微博appkey和appsecret请另外查询相关信息,此处不作介绍
    // 替换为开发者的appkey,例"1646212960";
    private static final String CONSUMER_KEY = "3543730096";
    // 替换为开发者的appkey,例"94098772160b6f8ffc1315374d8861f9";
    private static final String CONSUMER_SECRET = "765385b9d52ffd2fe548141d29f6d1af";
 
    private String username = "";
    private String password = "";
 
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        mToken = (TextView) this.findViewById(R.id.tvToken);
        mLogin = (Button) this.findViewById(R.id.btnLogin);
        mLogin.setText("oauth!");
        mLogin.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v == mLogin) {
                    Weibo weibo = Weibo.getInstance();
                    weibo.setupConsumerConfig(CONSUMER_KEY, CONSUMER_SECRET);
 
                    // Oauth2.0
                    // 隐式授权认证方式
                    // 此处回调页内容应该替换为与appkey对应的应用回调页
                    weibo.setRedirectUrl("http://www.sina.com");
                    // 对应的应用回调页可在开发者登陆新浪微博开发平台之后,
                    // 进入我的应用--应用详情--应用信息--高级信息--授权设置--应用回调页
                    // 进行设置和查看
                    // 应用回调页不可为空
                    weibo.authorize(AuthorizeActivity.this,
                            new AuthDialogListener());
 
                    // try {
                    // // Oauth2.0 认证方式
                    // Weibo.setSERVER("https://api.weibo.com/2/");
                    // Oauth2AccessToken at =
                    // weibo.getOauth2AccessToken(AuthorizeActivity.this,
                    // Weibo.getAppKey(), Weibo.getAppSecret(), username,
                    // password);
                    // // xauth认证方式
                    // /*
                    // * Weibo.setSERVER("http://api.t.sina.com.cn/");
                    // * AccessToken at =
                    // * weibo.getXauthAccessToken(TextActivity.this,
                    // * Weibo.APP_KEY, Weibo.APP_SECRET, "", "");
                    // * mToken.setText(at.getToken());
                    // */
                    // RequestToken requestToken =
                    // weibo.getRequestToken(AuthorizeActivity.this,
                    // Weibo.getAppKey(), Weibo.getAppSecret(),
                    // AuthorizeActivity.URL_ACTIVITY_CALLBACK);
                    // mToken.setText(requestToken.getToken());
                    // Uri uri =
                    // Uri.parse(AuthorizeActivity.URL_ACTIVITY_CALLBACK);
                    // startActivity(new Intent(Intent.ACTION_VIEW, uri));
                    //
                    // } catch (WeiboException e) {
                    // e.printStackTrace();
                    // } // mToken.setText(at.getToken());
                    //
 
                }
            }
        });
 
    }
 
    public void onResume() {
        super.onResume();
    }
 
    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();
        }
 
    }
 
}

常见问题:

新浪微博的使用还是比较顺利的,唯一遇到的下面的问题

error:redirect_uri_mismatch

这个是由于没有仔细看说明文档,文档中清楚的说明了使用隐式验证的时候,要设置应用回调页。设置方法在代码中也有。

登录新浪微博开放平台,新浪微博开放平台->我的应用->应用信息->高级应用->授权设置->应用回调页中的url地址保持一致就可以了,如图所示:

四:发一条微博

测试一下,运行app,发送一条带图片的微博。如下图

登录新浪微博,查看一下,试验成功!

原文地址:http://www.67tgb.com/?p=483

欢迎访问:http://www.67tgb.com

新浪和腾讯微博教程(一)相关推荐

  1. 新浪和腾讯微博教程(二)

    上篇文章介绍了Oauth认证和新浪微博,这次我们再来学习下腾讯微博. 腾讯微博和新浪微博的流程是一样的,都首先要申请应用,取得key和密钥之后,在来做下面的工作. 腾讯微博使用的Oauth认证算法是1 ...

  2. 接入新浪、腾讯微博和人人网的Android客户端实例 接入新浪、腾讯微博和人人网的Android客户端实例...

    做了个Android项目,需要接入新浪微博,实现时也顺带着研究了下腾讯微博和人人网的Android客户端接入,本文就跟大家分享下三者的Android客户端接入方法. 一.实例概述 说白了,接入微博就是 ...

  3. android客户端接入新浪、腾讯微博以及人人网

    本文原创http://blog.csdn.net/yanbin1079415046,转载请注明出处. 从事android工作也有段时间了,碍于肚子里料不多,一直也没写过什么东西.最近刚好项目中要接入新 ...

  4. 转播到微博显示隐藏Share to view all插件(如何申请新浪,腾讯微博appkey信...

    2019独角兽企业重金招聘Python工程师标准>>> 一款Wordpress插件--Share to view all,Share to view all可以将wordpress文 ...

  5. 每隔5秒发一条新浪和腾讯微博的windows软件

    出发点: 微博应该在合适的时间发出去才会有更多的受众看到,比如晚上把微博内容写好,设置早上8点开始逐条发送,基于腾讯微博和新浪微博SDK实现的微博机 实践过程: 1. 发送新浪微博的C++封装 头文件 ...

  6. 新浪与腾讯的开放平台对比

    做了金庸问答分别在腾讯和新浪的开放平台上线,了解了一些WEB开发的皮毛,对腾讯和新浪两个开放平台也有了一些认识,下面就我能力范围内对两个平台进行一番比对. 首先说云服务的平台,注意,说的不是开放平台. ...

  7. 新浪,腾讯原生态SDK分享

    主要有两个界面,一个是新浪微博,腾讯微博的分享按钮,一个是他们的绑定情况(其实就是是否授权).点击微博分享中新浪或腾讯按钮,就进行相应的授权(若没授权),显示微博内容,而后发布微博.设置界面中的绑定, ...

  8. 新浪与腾讯的开放平台对比(上)

    做了金庸问答分别在腾讯和新浪的开放平台上线,了解了一些WEB开发的皮毛,对腾讯和新浪两个开放平台也有了一些认识,下面就我能力范围内对两个平台进行一番比对. 首先说云服务的平台,注意,说的不是开放平台. ...

  9. 新浪博客和微博已经成为黄色网站的…

    最近发现现在通过性浪微博和博客传播黄色信息的比比皆是,新浪博客和微博已经成为黄色网站的重要传播途径. 对成年人的危害想对较小,对未成年人恐怕有很大的危害,希望相关监管部门和新浪重视此问题. 一下是我曾 ...

最新文章

  1. POJ-1860-Currency Exchange
  2. 浙江农林大学第二十一届程序设计竞赛校选拔赛(同步)
  3. UVA - 1533Moving Pegs移动小球 (bfs加状态压缩)
  4. Hadoop的多节点集群启动,唯独没有namenode进程?(血淋淋教训,一定拍快照)(四十五)...
  5. 违反ClassLoader双亲委派机制三部曲第二部——Tomcat类加载机制
  6. php管理nginx虚拟主机shell脚本
  7. System Information Viewer系统信息、硬件规格检测器
  8. W10如何下载经典扫雷游戏
  9. 山东大学机电信息学院计算机网络,山东大学机电与信息工程学院2021考研复试考核内容...
  10. BTA 常问的 Java基础39道常见面试题
  11. poscms-说明文档
  12. php写的软件帮助手册源码使用帮助源码html模版源码,系统依附HDSYSCMS内容系统
  13. Linkedin领英如何添加或更改账号的邮箱地址
  14. php ean-13,用php生成EAN_13标准的条形码_php
  15. C语言串的基本操作(assign,compare,concat,index,insert,delete,replace)
  16. 狂神说Spring讲解第19动态代理中错误java: 不兼容的类型: com.Orac.kuang.Host无法转换为com.kuang.demo3.Rent
  17. iOS后台运行机制1
  18. mysql 空集 赋值,mysql – 是否有一个简单的SELECT-Statement创建一个空集?
  19. 单片机的停车场计数系统c51_停车场车辆计数系统的设计.doc
  20. 摄像机标定和立体标定

热门文章

  1. 客户端和服务端简单开发
  2. 14x1.5cm竖向标签有点难,VFP调用BarTender来打印
  3. 计算机毕业设计论文该怎么写?软件工程毕设选题推荐有哪些;计算机毕业设计不会做怎么办;怎么做什么简单;电子信息工程毕业设计要做到什么程度
  4. 在编译器中鼠标光标变成下横线的解决办法
  5. ipad批量删除图片
  6. matlab的se是个什么东西
  7. 《天道》解读三:什么是天道?
  8. 赵小楼《天道》深度解析(75)客观是对现有事实的认可,嘴上认可可不行,得心里认,否则就是自欺
  9. 如何查看宇视科技摄相机是否支持反向供电
  10. C++的异常(转载 )