第一步:创建Android项目下载新浪sdk

下载地址:https://github.com/sinaweibosdk/weibo_android_sdk

里面包含签名工具和新浪官方的debug.keystore

新浪的demo必须用官方的debug.keystore编译才能正常运行

第二步:登录新浪微博开放平台http://open.weibo.com/

创建应用

填写应用名称

填写项目的包名和签名

签名的获取方法:在下载好的新浪sdk包中包含有,安装在模拟器上,填写上本项目的包名即可获得对应的项目签名

填写完毕之后。

点击高级信息,填写好回调页

回调页可以为任意的网址

第三步:现在可以正式开始写代码啦

如果想要实现新浪的第三方登录,必须引入新浪的第三方library

weiboSDK

为啦避免引入失败,必须将weiboSDK和项目放在同一目录下,并保证supportv4 jar 包版本一致

将WeiboSDKDemo中lib下的所有so包拷贝到项目的lib目录下

将所需的权限及其他内容复制到清单配置文件中

<uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

<activity android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser" 
    android:configChanges="keyboardHidden|orientation"
    android:windowSoftInputMode="adjustResize"
    android:exported="false" >
</activity>
<service android:name="com.sina.weibo.sdk.net.DownloadService"
    android:exported="false">
</service>

在布局文件中加入登录按钮

<com.sina.weibo.sdk.widget.LoginButton
            android:id="@+id/login_button_style2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerInParent="true"
            android:layout_marginLeft="10dp"
            android:background="@drawable/com_sina_weibo_sdk_login_button_with_original_logo"
             />

将Demo中的Constants类复制到项目中

将AppKey和REDIRECT_URL替换成当前项目的AppKey和回调地址

Activity中代码如下:

package com.example.weibologin;

import java.text.SimpleDateFormat;

import com.sina.weibo.sdk.auth.AuthInfo;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.auth.sso.SsoHandler;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sina.weibo.sdk.net.RequestListener;
import com.sina.weibo.sdk.openapi.UsersAPI;
import com.sina.weibo.sdk.openapi.models.User;
import com.sina.weibo.sdk.widget.LoginButton;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.text.TextUtils;
import android.util.Log;
import android.widget.Toast;
public class MainActivity extends Activity {

private AuthInfo mAuthInfo;
private SsoHandler mSsoHandler;
private Oauth2AccessToken mAccessToken;
private LoginButton loginbt;
public UsersAPI mUsersApi;
private RequestListener mListener = new RequestListener() {
@Override
public void onComplete(String response) {
if (!TextUtils.isEmpty(response)) {

// 调用 User#parse 将JSON串解析成User对象
User user = User.parse(response);
if (user != null) {
Toast.makeText(MainActivity.this,
"获取User信息成功,用户昵称:" + user.screen_name,
Toast.LENGTH_LONG).show();
Log.i("TAG","登录成功!------->:"+user.screen_name);
// userTextView.setText(user.screen_name);
} else {
// userTextView.setText(response);

Toast.makeText(MainActivity.this, "2:" + response,
Toast.LENGTH_LONG).show();
}
}
}

@Override
public void onWeiboException(WeiboException arg0) {
// TODO Auto-generated method stub

}
};

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mAuthInfo = new AuthInfo(this, Constants.APP_KEY, 
Constants.REDIRECT_URL, Constants.SCOPE);
loginbt=(LoginButton) findViewById(R.id.login_button_style2);
loginbt.setWeiboAuthInfo(mAuthInfo, new AuthListener());
loginbt.setStyle(LoginButton.LOGIN_INCON_STYLE_3);

}
  @Override
   protected void onActivityResult(int requestCode, int resultCode, Intent data) {
       super.onActivityResult(requestCode, resultCode, data);
       
       if(loginbt!=null)
       {
        loginbt.onActivityResult(requestCode, resultCode, data);
        Log.i("TAG","登录成功!");
        System.out.println(data.toString());
       }
       
   }
/**
     * 微博认证授权回调类。
     * 1. SSO 授权时,需要在 {@link #onActivityResult} 中调用 {@link SsoHandler#authorizeCallBack} 后,
     *    该回调才会被执行。
     * 2. 非 SSO 授权时,当授权结束后,该回调就会被执行。
     * 当授权成功后,请保存该 access_token、expires_in、uid 等信息到 SharedPreferences 中。
     */
    class AuthListener implements WeiboAuthListener {

@Override
        public void onComplete(Bundle values) {
            // 从 Bundle 中解析 Token
            mAccessToken = Oauth2AccessToken.parseAccessToken(values);
            //从这里获取用户输入的 电话号码信息 
            mUsersApi =new UsersAPI(MainActivity.this, Constants.APP_KEY, mAccessToken);
            Long uid = Long.parseLong(mAccessToken.getUid());
            mUsersApi.show(uid, mListener);
            String  phoneNum =  mAccessToken.getPhoneNum();
            if (mAccessToken.isSessionValid()) {
            Log.i("TAG","登录成功!成功~~~~~~~~~~~~~~~~~~~~~~~~");
            System.out.println("成功~~~~~~~~~~~~~~~~~~~~~~~~");
            Oauth2AccessToken accessToken = Oauth2AccessToken.parseAccessToken(values);
                 if (accessToken != null && accessToken.isSessionValid()) {
                     String date = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss").format(
                             new java.util.Date(accessToken.getExpiresTime()));
                     String format = getString(R.string.weibosdk_demo_token_to_string_format_1);
                     String s =String.format(format, accessToken.getToken(), date);
                     Log.i("TAG","登录成功------>"+s+phoneNum);
//                     AccessTokenKeeper.writeAccessToken(getApplicationContext(), accessToken);
                 }
            } else {
                // 以下几种情况,您会收到 Code:
                // 1. 当您未在平台上注册的应用程序的包名与签名时;
                // 2. 当您注册的应用程序包名与签名不正确时;
                // 3. 当您在平台上注册的包名和签名与您当前测试的应用的包名和签名不匹配时。
                String code = values.getString("code");
                Log.i("TAG","登录成功!失败~~~~~~~~~~~~~~~~~~~~~~~~");
                System.out.println("失败");
//                String message = getString(R.string.weibosdk_demo_toast_auth_failed);
//                if (!TextUtils.isEmpty(code)) {
//                    message = message + "\nObtained the code: " + code;
//                }
//                Toast.makeText(WBAuthActivity.this, message, Toast.LENGTH_LONG).show();
            }
        }

@Override
        public void onCancel() {
//            Toast.makeText(WBAuthActivity.this, 
//                   R.string.weibosdk_demo_toast_auth_canceled, Toast.LENGTH_LONG).show();
        }

@Override
        public void onWeiboException(WeiboException e) {
        System.out.println("出错~~~~~~~~~~~~~~");
        Log.i("TAG","登录成功!出错~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~");
//            Toast.makeText(WBAuthActivity.this, 
//                    "Auth exception : " + e.getMessage(), Toast.LENGTH_LONG).show();
        }
    }
    
}

实现新浪微博第三方登录获取用户信息相关推荐

  1. php支付宝第三方授权,原生 PHP 实现支付宝 App 第三方登录获取用户信息,_PHP_ 少侠科技...

    详细内容 背景 App 项目要求实现第三方 微信 和 支付宝 登录,微信可以直接在 App 端完成认证拿到用户信息,支付宝则需要后端获取. 流程 1.服务端先拿到 App 端 调用 支付宝 SDK 所 ...

  2. 微信小程序开发之——用户登录-获取用户信息(5),意外收获字节跳动内部资料

    {{userInfo.nickName}} {{userInfo.city}} {{userInfo.gender0?"未知":userInfo.gender1?"男&q ...

  3. 微信小程序授权登录获取用户信息详解

    今天来说一下微信小程序的授权登录获取用户信息,首先我们看微信提供的小程序开发文档: https://blog.csdn.net/qq_41971087/article/details/82466647 ...

  4. Spring boot 项目(十三)——实现微信公众号授权登录获取用户信息

    引言 微信公众号开发中,必不可少的一环:公众号授权登录.获取微信用户信息 前期准备 内网渗透=>生成本地指定端口映射的外网域名 链接:内网渗透工具natapp使用详解 域名生成之后修改yml文件 ...

  5. Android之QQ授权登录获取用户信息

    有时候我们开发的app需要方便用户简单登录,可以让用户使用自己的qq.微信.微博登录到我们自己开发的app. 今天就在这里总结一下如何在自己的app中集成QQ授权登录获取用户信息的功能. 首先我们打开 ...

  6. 微信第三方登陆,无需注册一键登录,获取用户信息,PHP实现方法

    今天讲讲利用微信oauth2实现第三方登陆的实现方法. 先说说前提吧! 首先你得是服务号,并且是经过认证的.这样微信会给你很多第三方接口的权限,如果是订阅号或者没有认证的服务号那就不用想了! 一开始你 ...

  7. H5网页使用支付宝授权登录获取用户信息详解

    用户信息授权 用户信息授权主要是为了获取支付宝用户ID(USER_ID).授权令牌(access_token),便于开发者处理自身业务逻辑的时候使用,例如:获取支付宝用户信息.发会员卡.快捷登录等.授 ...

  8. java实现微信公众号授权登录获取用户信息(一)

    参考文章:https://blog.csdn.net/Santiago_M/article/details/79109154 : https://www.cnblogs.com/jilu/p/6123 ...

  9. 支付宝 APP登录 获取用户信息 PHP

    支付宝APP登录服务端流程如下: 1.换取授权访问令牌 2.查询用户信息 APP调用sdk组装授权登录请求(系统交互流程),成功后,支付宝会返回 auth_code,利用此 auth_code 请求 ...

最新文章

  1. 为什么Java的+ =,-=,* =,/ =复合赋值运算符不需要强制转换?
  2. java邻接表无向图的创建_邻接表无向图(三) 之Java详解
  3. IBM MQ Explore使用
  4. 怎么解决 数据丢失的问题_硬盘数据丢失怎么恢复
  5. 瑞银、太平洋投资、T. Rowe Price对加密货币投资持谨慎态度
  6. 分布式消息规范 OpenMessaging 1.0.0-preview 发布 1
  7. hive窗口函数入门
  8. 从jsp页面到servlet传值的不同方式
  9. LINK : fatal error LNK1168
  10. 计算机网络(第七版)部分课后习题含答案
  11. 简单动画(过渡)与复杂动画
  12. 高等数学在计算机的应用论文,计算机技术在高等数学教学中的应用
  13. oracle报错ora-12162,sqlplus登录提示:ORA-12162错误
  14. linux版 3d建模软件,3D建模软件(Meshroom)
  15. 服务器基本安全策略配置
  16. 大数据和人工智能的概念
  17. html5 uc qq,(进阶版)手机浏览器用户体验报告:UC、QQ、360,到底哪个好?
  18. macbook卡在进度条开不了机_Mac 开机停在进度条解决方法
  19. 生物化学 药物设计与研发笔记:变构(Allostery)药物设计
  20. 【GStreamer 】3-1 gstreamer插件之 videotestsrc 介绍

热门文章

  1. 算法题:Pow(x, n)
  2. n行Python代码系列:四行程序实现两个视频同屏播放
  3. 抖音包大小优化-资源优化
  4. 自编matlab线性扫频
  5. java无法调节安全级别_java安全级别无法更改
  6. 利用kettle进行数据同步
  7. 【keil】 一款舒适的配色主题
  8. 华为防火墙配置命令-trust-dmz-untrust
  9. (二)Markdown编辑器的使用效果 | 以CSDN自带MD编辑器为例
  10. 液晶电视工作原理(转)