第三方账号登录--QQ登录,以及QQ微博账号登录

在QQ登陆测试的时候,刚申请正常登陆,但是由于app未上线,或许是腾讯升级造成的个别时候QQ登陆无法成功会提示下图代码,功能上没啥问题,已经达到 测试效果了。附上腾讯错误代码图(大家测试QQ登陆的时候,包括微博登陆都需要自行申请 AppId 以及AppKey,当然用我的也可以 )
 第三方账号登录--QQ登录,以及QQ微博账号登录_第1张图片 
整体的效果图如下,大家
第三方账号登录--QQ登录,以及QQ微博账号登录_第2张图片 
第三方账号登录--QQ登录,以及QQ微博账号登录_第3张图片 
第三方账号登录--QQ登录,以及QQ微博账号登录_第4张图片 
第三方账号登录--QQ登录,以及QQ微博账号登录_第5张图片 
第三方账号登录--QQ登录,以及QQ微博账号登录_第6张图片

MainActivity:

package com.qiao.thirdpartylogindemo_master2;
 
import java.util.HashMap;
 
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler.Callback;
import android.os.Message;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.Toast;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.framework.utils.UIHandler;
import cn.sharesdk.sina.weibo.SinaWeibo;
import cn.sharesdk.tencent.qzone.QZone;
import cn.sharesdk.tencent.weibo.TencentWeibo;
/**
 * 此demo使用第三方登陆,例子比较简单
 * @author 有点凉了
 *
 */
public class MainActivity extends Activity implements OnClickListener,Callback,PlatformActionListener{
    private static final String TAG="MainActivity";
    private Button button_main_login;
    private Button button_main_restart;
    private Button button_main_exit;
     
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ShareSDK.initSDK(this);//初始化shareSdk
        setContentView(R.layout.activity_main);
        button_main_login = (Button)findViewById(R.id.button_main_login);
        button_main_restart=(Button)findViewById(R.id.button_main_restart);
        button_main_login.setOnClickListener(this);
        button_main_restart.setOnClickListener(this);
        findViewById(R.id.button_main_exit).setOnClickListener(this);
        findViewById(R.id.button_main_login_weibo).setOnClickListener(this);
        findViewById(R.id.button_main_restart_qq).setOnClickListener(this);
    }
 
    @Override
    protected void onDestroy() {
        super.onDestroy();
        ShareSDK.stopSDK(this);
    }
 
    @Override
    public void onCancel(Platform platform, int action) {
        if (action==Platform.ACTION_USER_INFOR) {
            UIHandler.sendEmptyMessage(3, this);
        }
    }
//  如果onComplete()方法被回调,表示授权成功,引导用户进入系统
    @Override
    public void onComplete(Platform platform, int action, HashMap res) {
        if (action ==Platform.ACTION_USER_INFOR) {
            UIHandler.sendEmptyMessage(5, this);
            login(platform.getName(), platform.getDb().getUserId(), res);
             
            Log.i(TAG, "=="+res);
        }
    }
 
    @Override
    public void onError(Platform platform, int action, Throwable t) {
        if (action==Platform.ACTION_USER_INFOR) {
            UIHandler.sendEmptyMessage(4, this);
        }
        t.printStackTrace();
    }
 
    @Override
    public boolean handleMessage(Message msg) {
        switch (msg.what) {
        case 1:
            Toast.makeText(this, "用户信息已存在,正在跳转登录操作…", Toast.LENGTH_SHORT).show();
            break;
        case 2:
            String text = getString(R.string.logining, msg.obj);
            Toast.makeText(this, text, Toast.LENGTH_SHORT).show();
            break;
        case 3:
            Toast.makeText(this, "授权操作已取消", Toast.LENGTH_SHORT).show();
            break;
        case 4:
            Toast.makeText(this, "授权操作遇到错误,请阅读Logcat输出", Toast.LENGTH_SHORT).show();
            break;
        case 5:
            Toast.makeText(this, "授权成功,正在跳转登录操作…", Toast.LENGTH_SHORT).show();
            break;
        default:
            break;
        }
        return false;
    }
    //  用户触发第三方登录事件
    @Override
    public void onClick(View v) {
//      Platform pf =null;
        switch (v.getId()) {
        case R.id.button_main_login:
            //(1)直接使用QQ账号登陆
            authorize(new QZone(this));// 
            break;
        case R.id.button_main_restart:
            Platform pf2=ShareSDK.getPlatform(MainActivity.this,TencentWeibo.NAME);
            if (pf2.isValid()) {
                pf2.removeAccount();//删除授权信息
            }
            pf2.setPlatformActionListener(this);
            pf2.authorize();
            break;
        case R.id.button_main_exit:
            Platform pf3=ShareSDK.getPlatform(MainActivity.this,TencentWeibo.NAME);
            Platform pf5=ShareSDK.getPlatform(MainActivity.this,QZone.NAME);
            if (pf3.isValid()) {
                pf3.removeAccount();//删除授权信息
                 
            }
            if (pf5.isValid()) {
                pf5.removeAccount();
            }
            Toast.makeText(this, "退出成功,测试请点击上方登陆按钮,如果出现重新登陆界面则算成功", Toast.LENGTH_LONG).show();
            break;
        case R.id.button_main_login_weibo:
            // (2)、 //使用腾讯微博登陆先要初始化腾讯微博
            Platform pf = ShareSDK.getPlatform(MainActivity.this,TencentWeibo.NAME);
            pf.SSOSetting(true);
            pf.setPlatformActionListener(this);
            pf.showUser(null);
            Log.i(TAG, "==用户id:" + pf.getDb().getUserId() + "  用户名称:"+ pf.getDb().getUserName() + "  用户icon:"+ pf.getDb().getUserIcon() + " 这个是啥:"+ pf.getDb().getUserGender());
            break;
        case R.id.button_main_restart_qq:
            Platform pf4=ShareSDK.getPlatform(MainActivity.this,QZone.NAME);
            if (pf4.isValid()) {
                pf4.removeAccount();
            }
            pf4.setPlatformActionListener(this);
            authorize(new QZone(this));
            break;
        default:
            break;
        }
    }
//  authorize()方法将引导用户在授权页面输入帐号密码,然后目标平台将验证此用户(此方法在此例子中仅仅是QQ账号登陆时候使用)
    public void authorize(Platform plat){
        if (plat.isValid()) {
            String userId =plat.getDb().getUserId();//获取id
            if (!TextUtils.isEmpty(userId)) {
                UIHandler.sendEmptyMessage(1, this);
                login(plat.getName(),userId,null);//不等于null执行登陆,讲用户id发送至目标平台进行验证
                return;
            }
        }
        plat.setPlatformActionListener(this);
        plat.SSOSetting(true);
        plat.showUser(null);
    }
    public void login(String plat,String userId,HashMap userInfo){
        Message msg = new Message();
        msg.what = 2;
        msg.obj = plat;
        UIHandler.sendMessage(msg, this);
    }
}

 布局:


 
    
 
    

 需要第三方ShareSdk支持

assets文件夹中



    
     
     
     
    

    
 
    
  
    
     
   
 
     

 Mainfest:



 
    
     
    
    
    
    
    
    
    
    
    
    
        
            
                
 
                
            
        
         
    
 

 values:需要(直接ShareSdk拷贝)

第三方账号登录--QQ登录,以及QQ微博账号登录_第7张图片

jar包直接ShareSdk拷贝:

第三方账号登录--QQ登录,以及QQ微博账号登录_第8张图片

 

 

你可能感兴趣的:(Android)