Android 使用新浪微博SSO授权

微博SDK第三方授权登陆 第三方登陆大致流程 1.注册微博开发者账号 2.进入微博开放平台创建应用获取APP key 和APP Secret  3.给应用签名,获取MD5签名 4.在应用中嵌入代码 第一步略过. 阅读详情

新浪微博SSO授权,很早就做好了,只是一直没有时间整理博客,今天加班,晚上闲暇之时便想到整理一下。由于整个七月份很忙,加班很多。前段时间把腾讯微博的SSO认证整理好了。想在七月份翻篇之前再写点东西。好了,不多说废话了,下面就说说关于新浪微博SSO认证的内容。

新浪微博比较简单,而且很方便使用。由于在腾讯微博中我有讲到SSO认证的过程,这里主要是看看新浪微博demo中的MainActivity,这个类中告诉我们如何进行新浪微博的授权,按照这个范例来做就可以的。下面是这个类的源码


demo下载地址:http://download.youkuaiyun.com/detail/hap_gx/5825829


package com.weibo.sdk.android.demo;

import java.text.SimpleDateFormat;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

import com.weibo.sdk.android.Oauth2AccessToken;
import com.weibo.sdk.android.Weibo;
import com.weibo.sdk.android.WeiboAuthListener;
import com.weibo.sdk.android.WeiboDialogError;
import com.weibo.sdk.android.WeiboException;
import com.weibo.sdk.android.keep.AccessTokenKeeper;
import com.weibo.sdk.android.sso.SsoHandler;
import com.weibo.sdk.android.util.Utility;
/**
 * 
 * @author liyan (liyan9@staff.sina.com.cn) 这位是新浪SSO认证的开发者,很优秀的开发者
 */
public class MainActivity extends Activity {

    private Weibo mWeibo;
    private static final String CONSUMER_KEY = "966056985";// 替换为开发者的appkey,例如"1646212860";
    private static final String REDIRECT_URL = "http://www.sina.com";
    private Button authBtn, apiBtn, ssoBtn, cancelBtn;
    private TextView mText;
    public static Oauth2AccessToken accessToken;
    public static final String TAG = "sinasdk";
    /**
     * SsoHandler 仅当sdk支持sso时有效,
     */
    SsoHandler mSsoHandler;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        mWeibo = Weibo.getInstance(CONSUMER_KEY, REDIRECT_URL);

        authBtn = (Button) findViewById(R.id.auth);
        authBtn.setOnClickListener(new OnClickListener() {

            @Override
            public void onClick(View v) {
                mWeibo.authorize(MainActivity.this, new AuthDialogListener());
            }
        });
        ssoBtn = (Button) findViewById(R.id.sso);// 触发sso的按钮
        try {
            Class sso = Class.forName("com.weibo.sdk.android.sso.SsoHandler");
            ssoBtn.setVisibility(View.VISIBLE);
        } catch (ClassNotFoundException e) {
            Log.i(TAG, "com.weibo.sdk.android.sso.SsoHandler not found");

        }
        ssoBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                /**
                 * 下面两个注释掉的代码,仅当sdk支持sso时有效,
                 */

                mSsoHandler = new SsoHandler(MainActivity.this, mWeibo);
                mSsoHandler.authorize(new AuthDialogListener());
            }
        });
        cancelBtn = (Button) findViewById(R.id.apiCancel);
        cancelBtn.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                AccessTokenKeeper.clear(MainActivity.this);
                authBtn.setVisibility(View.VISIBLE);
                ssoBtn.setVisibility(View.VISIBLE);
                cancelBtn.setVisibility(View.INVISIBLE);
                mText.setText("");
            }
        });

        mText = (TextView) findViewById(R.id.show);
        MainActivity.accessToken = AccessTokenKeeper.readAccessToken(this);
        if (MainActivity.accessToken.isSessionValid()) {
            Weibo.isWifi = Utility.isWifi(this);
            try {
                Class sso = Class.forName("com.weibo.sdk.android.api.WeiboAPI");// 如果支持weiboapi的话,显示api功能演示入口按钮
                apiBtn.setVisibility(View.VISIBLE);
            } catch (ClassNotFoundException e) {
                // e.printStackTrace();
                Log.i(TAG, "com.weibo.sdk.android.api.WeiboAPI not found");

            }
            authBtn.setVisibility(View.INVISIBLE);
            ssoBtn.setVisibility(View.INVISIBLE);
            cancelBtn.setVisibility(View.VISIBLE);
            String date = new java.text.SimpleDateFormat("yyyy/MM/dd hh:mm:ss")
                    .format(new java.util.Date(MainActivity.accessToken
                            .getExpiresTime()));
            mText.setText("access_token 仍在有效期内,无需再次登录: \naccess_token:"
                    + MainActivity.accessToken.getToken() + "\n有效期:" + date);
        } else {
            mText.setText("使用SSO登录前,请检查手机上是否已经安装新浪微博客户端,目前仅3.0.0及以上微博客户端版本支持SSO;如果未安装,将自动转为Oauth2.0进行认证");
        }

    }

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        getMenuInflater().inflate(R.menu.activity_main, menu);
        return true;
    }

    class AuthDialogListener implements WeiboAuthListener {

        @Override
        public void onComplete(Bundle values) {
            String token = values.getString("access_token");
            String expires_in = values.getString("expires_in");
            MainActivity.accessToken = new Oauth2AccessToken(token, expires_in);
            if (MainActivity.accessToken.isSessionValid()) {
                String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")
                        .format(new java.util.Date(MainActivity.accessToken
                                .getExpiresTime()));
                mText.setText("认证成功: \r\n access_token: " + token + "\r\n"
                        + "expires_in: " + expires_in + "\r\n有效期:" + date);
                try {
                    Class sso = Class
                            .forName("com.weibo.sdk.android.api.WeiboAPI");// 如果支持weiboapi的话,显示api功能演示入口按钮
                    apiBtn.setVisibility(View.VISIBLE);
                } catch (ClassNotFoundException e) {
                    // e.printStackTrace();
                    Log.i(TAG, "com.weibo.sdk.android.api.WeiboAPI not found");

                }
                cancelBtn.setVisibility(View.VISIBLE);
                AccessTokenKeeper.keepAccessToken(MainActivity.this,
                        accessToken);
                Toast.makeText(MainActivity.this, "认证成功", Toast.LENGTH_SHORT)
                        .show();
            }
        }

        @Override
        public void onError(WeiboDialogError 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();
        }

    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        /**
         * 下面两个注释掉的代码,仅当sdk支持sso时有效,
         */
        if (mSsoHandler != null) {
            mSsoHandler.authorizeCallBack(requestCode, resultCode, data);
        }
    }

}


【Android开发日记】 新浪微博API SSO授权 分享 其实新浪API的说明文档已经说的很明白了,demo 阅读详情

相关推荐

最新版新浪微博Android SDK集成与实战指南

新浪微博Android SDK V2.0.0基于OAuth 2.0协议重构授权体系,引入SSO(单点登录)机制,提升用户体验与安全性。SDK采用模块化设计,分离授权、分享、API调用等核心功能,支持Gradle依赖管理与JAR包集成双模式。JAR 包主要由以下几个核心包组成::授权相关类,如WeiboAuth:SSO 跳转处理类,核心为SsoHandler:工具类,包括签名生成、Intent 构造等:消息传递对象定义,用于分享和授权参数封装。

weixin_30798867的博客 1251

Android新浪微博之登陆授权

package com.weibo.main; import java.text.SimpleDateFormat; import java.util.Timer; import java.util.TimerTask; import android.app.Activity; import android.content.Intent; import android.os.Bundle; i

哦啦啦。的专栏 902

微博授权登录和分享

授权登录必须签名,签名和appid匹配,APPID可以写自己的

Android weibo Oauth认证

Oauth认证流程 首先,需要在平台网站填写redirect_url(授权回调页),才能使用OAuth2.0,填写地址:http://open.weibo.com/apps/应用APPKEY/privilege/oauth 对于客户端也提供了默认的回调页地址 填写的回调地址为 http://www.sina.com 也可以是http://open.weibo.com/apps/4044

woshishuoshuoa的专栏 929

sinaweibosdk:新浪微博sdk这个是官方4月的没有打jar包完全的weibosdk源码! 7月更新的sso登录有大问题

新浪微博 新浪微博sdk非官方的官方的7月更新的sso登录有大问题自己体会把这个版本的源码没有打jar包可以自己随便删减

攻克+86手机号Discord验证墙:从“无效”到“成功”的实战指南

本文提供了一份针对+86手机号在Discord注册时频繁遭遇“手机号无效”问题的实战解决指南。文章系统分析了问题根源,并分步详解了从打造纯净网络环境、尝试多种手机号格式(如+86前加0),到更换iOS等客户端设备的有效方法,旨在帮助用户成功完成Discord手机号验证。

mac99的博客 1115

[Android] 使用新浪微博SDK进行SSO登录

1. 简述     现在已经是2013年7月份了,最新的SDK还是去年8月份出的,最近没怎么更新的说。     SDK的下载链接:http://open.weibo.com/wiki/SDK,其中文档内容很详细,本文仅介绍其中与SSO登录相关的内容。 2. 准备的内容     Comsume Key和Redirect Url,具体获取方法,见SDK内的”Weibo_Android_

小彼得的专栏 1938

【超详细】C#的单例模式

本文详细介绍了C#中的单例设计模式,包括两种实现方式:普通类泛型单例(Singleton<T>)和基于MonoBehaviour的组件单例(MonoSingleton<T>)。单例模式通过私有构造、静态私有实例和公共访问入口确保全局唯一实例,具有节省资源、保证数据一致性等优势。文章分别阐述了两者的核心原理、代码实现、使用场景及注意事项,并提供了日志管理器和音效管理器的具体应用示例。特别强调了多线程安全、初始化时机和避免过度使用等重要原则,为Unity开发中合理运用单例模式提供了全面指导。

grapefruit_lyy的博客 1534

Android实现新浪微博SSO授权登录分享文字图片等功能(WEIBO_ANDROID_SDK V2.3.0 )

新浪开发平台:http://open.weibo.com 新浪微博分享目前分为两种途径: 1,直接在自己的APP,弹出类似Dialog(sina集成)来完成授权,授权成功后可直接分享内容,全程都是在自己APP里完成分享。老版本的微博SDK中集成了弹出分享Dialog(WebView)的视图,以及插入文字、图片、URL等API,直接调用接口中的update就可以分享,此方法是在自

其实并不难,是你太悲观 3万+

从静态到动态:如何用Deformable 3DGS和4DGS实现高效动态场景建模

本文深入探讨了Deformable 3DGS和4DGS在动态场景建模中的技术突破,详细解析了这两种方法如何高效处理动态内容。Deformable 3DGS通过引入时间维度的变形场扩展传统3DGS,而4DGS则采用四维时空体素分解方法,两者均显著提升了动态场景建模的效率和质量,适用于虚拟现实、增强现实等应用场景。

weixin_29063035的博客 433

VS2022跨平台开发实战:SSH远程调试Linux程序全攻略

本文详细介绍了如何使用Visual Studio 2022进行跨平台开发,通过SSH协议远程调试部署在Linux服务器上的C/C++程序。文章提供了从环境搭建、连接配置、项目创建到编译调试的完整实战指南,帮助Windows开发者无缝衔接Linux环境,显著提升问题定位与开发效率。

weixin_28826521的博客 429

Android开发调用本地新浪微博客户端进行授权、发微博

移动应用SSO授权: 接入新浪微博的第三方Android、iOS应用可通过新浪微博官方客户端快速完成OAuth2.0授权。 http://open.weibo.com/wiki/%E7%A7%BB%E5%8A%A8%E5%BA%94%E7%94%A8SSO%E6%8E%88%E6%9D%83 下载并导入新浪微博官方SDK。 Android平台:https://github.com/mo

壹口尘埃 2802

国内合规开通ChatGPT Plus实操指南:银行卡绑卡与支付全解析

ChatGPT Plus 是 OpenAI 官方推出的高级订阅服务,基于 GPT-4o 多模态大模型提供语音交互、图像理解与长上下文处理能力。其核心使用前提在于完成合规的国际支付绑定,而非网络接入方式。技术原理上,OpenAI 采用 Stripe 支付网关进行风控校验,重点匹配银行跨境权限、卡片类型(仅支持 Visa/Mastercard/Amex 信用卡)、BIN 号段及地理位置一致性。该机制决定了95%的绑卡失败源于银行端配置缺失或卡片不兼容,而非网络问题。实际应用中,PayPal 作为中间支付层可显著

chuannaoxuan4674的博客 1961

java为什么点登录没反应,3.0 单点登录出现java.lang.IllegalAccessError问题,但是用demo就不会。...

02-03 11:41:31.498: E/AndroidRuntime(5686): java.lang.IllegalAccessError: Class ref in pre-verified class resolved to unexpected implementation02-03 11:41:31.498: E/AndroidRuntime(5686): at com.si...

weixin_36125599的博客 350

别再死记硬背了!用Multisim仿真5分钟搞懂运放电压跟随器到底要不要加反馈电阻

本文通过Multisim仿真实验,深入解析运放电压跟随器中反馈电阻的必要性。实验对比不同阻值对电路性能的影响,揭示反馈电阻在提供偏置电流通路、提升高频稳定性和ESD保护中的关键作用,并给出工程实践中的优化建议,帮助工程师快速掌握运放电路设计要点。

weixin_42641998的博客 371

PINN物理信息网络 | 非线性薛定谔方程的物理信息神经网络

PINN物理信息网络 | 非线性薛定谔方程的物理信息神经网络

算法如诗的博客 1299

关于新浪微博开放平台微博登录授权后再次登录会自动登录问题的解决办法

ios和android版本sso登陆和Oauth2.0登录跳转到新浪登录页面后,如果客户端里只有一个帐号,那么就会默认地选择这个帐号授权了,没给用户选择,也无法添加帐号。这种情况只能先去新浪的客户端里添加一个帐号再[已屏蔽]应用里授权,不科学。android端:对于Oauth2.0登录,在退出时执行end_session并清除cookie CookieSyncManager.createInst

极客公园 3508

【Bluetooth蓝牙开发】一、开篇词 | 打造全网最详细的Bluetooth开发教程

1、开篇词 2、蓝牙开发入门 3、蓝牙协议栈总览 4、蓝牙协议栈——物理层 5、蓝牙协议栈——链路层 6、蓝牙协议栈——传输层 7、蓝牙协议栈——L2CAP协议 8、蓝牙协议栈——ATT协议 9、蓝牙协议栈——GATT协议 10、蓝牙通信流程分析 11、蓝牙协议栈——Bluez交叉编译 12、蓝牙调试工具汇总

Donge's Blog 1万+

友盟第三方登录 QQ 微信 新浪微博 自定义友盟的dirlog

上一篇 算是详细的说了友盟第三方分享,这里就说下第三方登录的这个功能。   我们看友盟官网的社会化分享API中 分享和登录是在一起的,就是在同一个jar里。所以我们集成了分享,登录的配置差不多了,官网有对应的配置,我写的分享中的清单文件就已经包含了登录需要的配置,大家可以直接去对比一下就可以了。 在这里我声明一下 我在这个项目里没有加入腾讯和新浪微博的SSO授权 所以会导致每次都要去页面授权的

trues的博客 1653

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

Android实现新浪微博SSO授权登录分享文字图片等功能

新浪开发平台:http://open.weibo.com 新浪微博分享目前分为两种途径: 1,直接在自己的APP,弹出类似Dialog(sina集成)来完成授权,授权成功后可直接分享内容,全程都是在自己APP里完成分享。老版本的微博SDK中集成了弹出分享Dialog(WebView)的视图,以及插入文字、图片、URL等API,直接调用接口中的update就可以分

zyxNobita专栏 1396

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

新浪微博OAUTH2.0授权验证(基于SSO客户端验证)

1.新浪微博开放平台注册应用 微博开放平台的网址为:http://open.weibo.com/apps 应用注册成功之后要填写应用的相关信息 主要有:应用的包名和签名 包名就是eclipse下的包: 至于签名:下载微博MD5签名工具http://vdisk.weibo.com/s/z8QF4HirmcYfJ 手机安装打开,如图 输入包名后获取32位的MD5签名 应用信

u010883062的专栏 21万+

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

新浪微博SSO登录方式及OAUTH2.0认证和获取我的微博

今天弄了下新浪微博SSO登录方式及OAUTH2.0认证和获取我的微博,实现的效果如下图: //========================================================================================================================== 就这么简单的界面,简单的请求json,我居然弄了

chenfuduo_loveit的专栏 4301

Android平台下Facebook,Google service, 新浪微博接入第三方应用SSO授权教程

Android平台下Facebook,Google service, 新浪微博接入第三方应用SSO授权教程                                                                                                                         -- geolo(http://blog.csdn

GEOLO的专栏 8021

android app调用新浪微博,授权、分享

通过SSO方式授权,分享。 我的一个app要用到微博的授权和分享功能。简单就是根据用户输入的文本生成一个二维码,然后把该二维码分享到微博上,已经放到github上,请大家指教,欢迎fork哦。 https://github.com/ihyperwin/QRCodeGenius   首先放上新浪微博开发平台的github Demo地址   https://github.com/sina...

yingrenzhe68的专栏 944
上一篇: Android中通过Java获取Webview加载内容
下一篇: JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法
hap_gx
博客等级 码龄14年 6粉丝 23原创
评论 26
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值