在好例子网,分享、交流、成长!
您当前所在位置:首页Java 开发实例Android平台开发 → android 实现第三方登录(微博、微信、QQ登录)

android 实现第三方登录(微博、微信、QQ登录)

Android平台开发

下载此实例
  • 开发语言:Java
  • 实例大小:5.32M
  • 下载次数:124
  • 浏览次数:2803
  • 发布时间:2015-09-15
  • 实例类别:Android平台开发
  • 发 布 人:王道
  • 文件格式:.zip
  • 所需积分:2
 相关标签: 登录

实例介绍

【实例简介】此案例是演示案例,大家可以看到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();
	}
}


标签: 登录

实例下载地址

android 实现第三方登录(微博、微信、QQ登录)

不能下载?内容有错? 点击这里报错 + 投诉 + 提问

好例子网口号:伸出你的我的手 — 分享

网友评论

发表评论

(您的评论需要经过审核才能显示)

查看所有0条评论>>

小贴士

感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。

  • 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
  • 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
  • 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
  • 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。

关于好例子网

本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明

;
报警