【实例简介】此案例是演示案例,大家可以看到Bmob的第三方登录和信息获取如何工作的

实现了 qq、微信、微博的 第三方登录功能

【实例截图】

【核心代码】

package com.bmob.demo.third;

import org.json.JSONException;

import org.json.JSONObject;

import android.app.Activity;

import android.content.Intent;

import android.os.Bundle;

import android.util.Log;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

import android.widget.Toast;

import cn.bmob.v3.Bmob;

import cn.bmob.v3.BmobUser;

import cn.bmob.v3.BmobUser.BmobThirdUserAuth;

import cn.bmob.v3.listener.OtherLoginListener;

import cn.bmob.v3.listener.SaveListener;

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.exception.WeiboException;

import com.sina.weibo.sdk.widget.LoginButton;

import com.tencent.mm.sdk.modelmsg.SendAuth;

import com.tencent.tauth.IUiListener;

import com.tencent.tauth.Tencent;

import com.tencent.tauth.UiError;

/**

*

* @class LoginActivity

* @author smile

* @date 2015-6-1 上午11:06:42

* 注:第三方登陆有如下两种应用场景:

*

* 一、第三方账号一键登陆的步骤:

* 1、先进行授权,开发者需要自行根据第三方平台的提供的授权方法完成授权并得到授权信息

* 2、之后调用bmob提供的loginWithAuthData方法,并自行构造BmobThirdUserAuth对象,调用成功后,在Bmob的User表中会产生一条记录,其username是以此来实现第三方账号与bmob平台的用户表的关联并完成登陆操作

*

* 二、关联第三方账号的步骤:

* 有时候开发者先完成的是bmob用户的登陆操作,此时想要关联第三方账号,那么步骤如下:

* 1、先登录bmob的用户(比如用户A)

* 2、开发者需要自行根据第三方平台的提供的授权方法完成授权并得到授权信息

* 3、调用associateWithAuthData方法,并自行构造BmobThirdUserAuth对象,调用成功后,你就会在后台的用户A的authData这个字段下面看到提交的授权信息。

*/

public class LoginActivity extends Activity implements OnClickListener{

EditText et_account,et_pwd;

Button btn_qq,btn_weixin;

Button btn_login,btn_register;

LoginButton btn_weibo;

private AuthListener mAuthListener = new AuthListener();

private AuthInfo mAuthInfo;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_login);

toast("请自行初始化Bmob的ApplicationId");

//初始化BmobSDK

Bmob.initialize(this, Constants.BMOB_APPID);

initView();

BmobUser user = BmobUser.getCurrentUser(this);

if(user!=null){

Intent intent = new Intent(LoginActivity.this, MainActivity.class);

startActivity(intent);

}

}

public void initView(){

et_account = (EditText)findViewById(R.id.et_account);

et_pwd = (EditText)findViewById(R.id.et_pwd);

//设置微博按钮的样式

btn_weibo = (LoginButton)findViewById(R.id.btn_weibo);

// 创建微博授权认证信息

mAuthInfo = new AuthInfo(this, Constants.WEIBO_APP_KEY, Constants.WEIBO_REDIRECT_URL, Constants.WEIBO_SCOPE);

btn_weibo.setWeiboAuthInfo(mAuthInfo, mAuthListener);

btn_weibo.setStyle(LoginButton.LOGIN_INCON_STYLE_2);

btn_qq = (Button)findViewById(R.id.btn_qq);

btn_weixin = (Button)findViewById(R.id.btn_weixin);

btn_login = (Button)findViewById(R.id.btn_login);

btn_register = (Button)findViewById(R.id.btn_register);

btn_login.setOnClickListener(this);

btn_register.setOnClickListener(this);

btn_qq.setOnClickListener(this);

btn_weixin.setOnClickListener(this);

}

String account,pwd;

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.btn_login://登陆

account = et_account.getText().toString().trim();

pwd = et_pwd.getText().toString().trim();

if(account.equals("")){

toast("填写你的用户名");

return;

}

if(pwd.equals("")){

toast("填写你的密码");

return;

}

BmobUser user = new BmobUser();

user.setUsername(account);

user.setPassword(pwd);

user.login(this, new SaveListener() {

@Override

public void onSuccess() {

// TODO Auto-generated method stub

Intent intent = new Intent(LoginActivity.this, MainActivity.class);

startActivity(intent);

}

@Override

public void onFailure(int arg0, String arg1) {

// TODO Auto-generated method stub

toast("登陆失败:" arg1);

}

});

break;

case R.id.btn_register://注册

account= et_account.getText().toString().trim();

pwd = et_pwd.getText().toString().trim();

if(account.equals("")){

toast("填写你的用户名");

return;

}

if(pwd.equals("")){

toast("填写你的密码");

return;

}

BmobUser u = new BmobUser();

u.setUsername(account);

u.setPassword(pwd);

u.setEmail("123456@qq.com");

u.signUp(this, new SaveListener() {

@Override

public void onSuccess() {

// TODO Auto-generated method stub

Intent intent = new Intent(LoginActivity.this, MainActivity.class);

startActivity(intent);

}

@Override

public void onFailure(int arg0, String arg1) {

// TODO Auto-generated method stub

toast("注册失败:" arg1);

}

});

break;

case R.id.btn_qq://QQ授权登录

qqAuthorize();

break;

case R.id.btn_weixin:

//微信登陆,文档可查看:https://open.weixin.qq.com/cgi-bin/showdocument?action=dir_list&t=resource/res_list&verify=1&lang=zh_CN&token=0ba3e6d1a13e26f864ead7c8d3e90b15a3c6c34c

//发起微信登陆授权的请求

SendAuth.Req req = new SendAuth.Req();

req.scope = "snsapi_userinfo";

req.state = "bmob_third_login_demo";//可随便写,微信会原样返回

boolean isOk = BmobApplication.api.sendReq(req);

Log.i("smile", "是否发送成功:" isOk);

break;

default:

break;

}

}

/**

* @method loginWithAuth

* @param context

* @param authInfo

* @return void

* @exception

*/

public void loginWithAuth(final BmobThirdUserAuth authInfo){

BmobUser.loginWithAuthData(LoginActivity.this, authInfo, new OtherLoginListener() {

@Override

public void onSuccess(JSONObject userAuth) {

// TODO Auto-generated method stub

Log.i("smile",authInfo.getSnsType() "登陆成功返回:" userAuth);

Intent intent = new Intent(LoginActivity.this, MainActivity.class);

intent.putExtra("json", userAuth.toString());

intent.putExtra("from", authInfo.getSnsType());

startActivity(intent);

}

@Override

public void onFailure(int code, String msg) {

// TODO Auto-generated method stub

toast("第三方登陆失败:" msg);

}

});

}

public static Tencent mTencent;

private void qqAuthorize(){

if(mTencent==null){

mTencent = Tencent.createInstance(Constants.QQ_APP_ID, getApplicationContext());

}

mTencent.logout(this);

mTencent.login(this, "all", new IUiListener() {

@Override

public void onComplete(Object arg0) {

// TODO Auto-generated method stub

if(arg0!=null){

JSONObject jsonObject = (JSONObject) arg0;

try {

String token = jsonObject.getString(com.tencent.connect.common.Constants.PARAM_ACCESS_TOKEN);

String expires = jsonObject.getString(com.tencent.connect.common.Constants.PARAM_EXPIRES_IN);

String openId = jsonObject.getString(com.tencent.connect.common.Constants.PARAM_OPEN_ID);

BmobThirdUserAuth authInfo = new BmobThirdUserAuth(BmobThirdUserAuth.SNS_TYPE_QQ,token, expires,openId);

loginWithAuth(authInfo);

} catch (JSONException e) {

}

}

}

@Override

public void onError(UiError arg0) {

// TODO Auto-generated method stub

toast("QQ授权出错:" arg0.errorCode "--" arg0.errorDetail);

}

@Override

public void onCancel() {

// TODO Auto-generated method stub

toast("取消qq授权");

}

});

}

/**

* 登入按钮的监听器,接收授权结果。

*/

private class AuthListener implements WeiboAuthListener {

@Override

public void onComplete(Bundle values) {

Oauth2AccessToken accessToken = Oauth2AccessToken.parseAccessToken(values);

if (accessToken != null && accessToken.isSessionValid()) {

//调用Bmob提供的授权登录方法进行微博登陆,登录成功后,你就可以在后台管理界面的User表中看到微博登陆后的用户啦

String token = accessToken.getToken();

String expires = String.valueOf(accessToken.getExpiresTime());

String uid = accessToken.getUid();

Log.i("smile", "微博授权成功后返回的信息:token = " token ",expires =" expires ",uid = " uid);

BmobThirdUserAuth authInfo = new BmobThirdUserAuth(BmobThirdUserAuth.SNS_TYPE_WEIBO,token, expires,uid);

loginWithAuth(authInfo);

}

}

@Override

public void onWeiboException(WeiboException e) {

toast(e.getMessage());

}

@Override

public void onCancel() {

toast("取消weibo授权");

}

}

/**

* 当微博授权成功退出时,该函数被调用。

* 微博授权时需要用到,非常重要:使用LoginButton控件的 Activity 必须重写该方法,且调用LoginButton的内部函数,否则会导致无法授权成功。

*

*/

@Override

protected void onActivityResult(int requestCode, int resultCode, Intent data) {

super.onActivityResult(requestCode, resultCode, data);

//回调内部函数

btn_weibo.onActivityResult(requestCode, resultCode, data);

}

private void toast(String msg){

Toast.makeText(LoginActivity.this, msg, Toast.LENGTH_SHORT).show();

}

}

java qq微信微博第三方登录界面_android 实现第三方登录(微博、微信、QQ登录)相关推荐

  1. 微信登录画面_微信登录界面的地球变了_微信登录界面首变真相

    细心的小伙伴发现在启动微信的时候,那个经典的一个小人剪影面对着地球的画面开始发生了一些变化,似乎云层变得更为清晰细致了.微信登录界面6年来首变化,那么为何改变来的如此突然呢,下面小编就分享给大家! 手 ...

  2. 视频教程-微信小程序商城-界面设计实战教学(含源代码)-微信开发

    微信小程序商城-界面设计实战教学(含源代码) 04年进入计算机行业.拥有6年net和php项目开发经验,8年java项目开发经验. 现前端全栈工程师,主攻产品设计,微信开发等. 黄菊华 ¥90.00 ...

  3. python制作qq登录界面_用Python实现一个最新QQ办公版(TIM)的登录界面

    最近,QQ的办公版本--TIM进行了一次更新升级.本次更新升级大幅修改了界面的样式,看起来更加的清爽.简洁和高效了. 这种界面州的先生还是比较喜欢的,没有QQ那么花里胡哨,也比微信那些残缺的功能更加丰 ...

  4. aspnet登录界面代码_使用Python编写一个QQ办公版的图形登录界面!

    最近,QQ的办公版本--TIM进行了一次更新升级.本次更新升级大幅修改了界面的样式,看起来更加的清爽.简洁和高效了. 这种界面州的先生还是比较喜欢的,没有QQ那么花里胡哨,也比微信那些残缺的功能更加丰 ...

  5. 微信登录界面安卓代码_安卓模拟器微信登录闪退,转圈,停止运行解决方法

    雷电模拟器微信登录不上,微信闪退,模拟器微信停止运行等等问题一直在论坛出现,雷电模拟器最新版本已经解决了大部分的微信登录问题了.还是会有小部分伙伴出现了难以解决的问题,微信停止运行一般是建议安装最新雷 ...

  6. html登录界面设计代码_最简洁实现Github登录的JS代码示例

    本文源码地址:https://github.com/Spring-Security-China/oauth2-client-login-js-github 大纲 概述 实现思路分析 在Github官网 ...

  7. linux登录界面鼠标键盘失灵,vmware+centos7+启动在登录界面鼠标键盘都不可用

    vmware workstation12 + centos7启动后登录界面和单任务运行鼠标键盘都不可用 所有操作都是在root用户下进行的 因为安装别的软件,安装了kernel-headers和ker ...

  8. html 登录界面js代码,详解JS实现系统登录页的登录和验证

    这篇文章用JS显示表单的登录以及验证和对键盘的监听,这里有两种方法,一种是无需用户验证直接登录,一种是需要账户密码匹配才可登录. 1. html代码 登 录 2.CSS样式 .content{ pad ...

  9. android登录界面扁平,Android EditText实现扁平化的登录界面

    先来看看登录界面写完的效果图 2 监听editText,可以一键清空 3 checkBox的颜色统一 代码 下面,说说如何实现这个界面的,我将代码全部贴出来. xmlns:app="http ...

最新文章

  1. cmd查看所有数据库 db2_DB2数据库常用命令集
  2. springboot去掉git版本控制_关于 Git 提交这些规范,你都遵守了吗?
  3. HttpClient测试类请求端和服务端即可能出现乱码的解决
  4. 云原生系列「三」容器网络
  5. namenode启动不了以及datanode启动不了的解决办法
  6. 编辑器领域正发生变革?从面试看 Visual Studio Code 的崛起
  7. java代码获取gc信息,如何监视Java垃圾回收
  8. SpringBoot实战之文件上传微软云(Azure Storage)
  9. Maven镜像地址大全,Maven镜像地址配置示例
  10. Windows系统中禁止某应用程序联网操作方法
  11. 用python算股票β系数_请教达人:Stata中计算多只股票月度beta系数的do文件怎么编写?...
  12. java 美元符号_$ -----JavaScript 中美元符号 $ 的作用
  13. java判断日期是否是同一周_java中如何判断两个日期是否是同一周
  14. QQ空间官方账号被黑产利用漏洞分析
  15. Git学习:来自fengyu的b站听课笔记
  16. TCP/IP详解(全面)
  17. 曲线长、旋转图形表面积、旋转图形体积
  18. 【xla】七、【构图阶段】其他pass
  19. 测相伪距观测方程、线性组合
  20. HEVC解码器HM源码阅读(四)解析参数集

热门文章

  1. matlab提取DNA序列
  2. Unix下命令行方式下载软件~
  3. Labview 实现信号发生器
  4. 各种免费的API,手工整理,免费API
  5. 机器人误触防熊喷雾24人住院?这个网站收集AI‘翻车’案例,所有‘罪证’都不放过
  6. 神奇的公路:了解中国最著名的高速公路
  7. java jmenu 监听_MenuItem添加监听器
  8. android progressbar 加载数据,ProgressBar的使用实例
  9. Windows远程桌面实现物理机访问控制虚拟机3-Nginx及Natapp发布网页
  10. 关于期权行权培训的一些知识点