首页 > 技术文章 > Android 使用第三方登录(QQ和新浪微博)

tony-yang-flutter 2014-01-07 17:58 原文

账号申请什么的我就在这里略过了!(相信大家看看文档都能够处理的)本篇博客仅作引导用--主要提供给哪些不知道怎样入手的朋友。(如果需要更加强大的功能大家可以看一下开放平台上的文档,上面都有的)

使用QQ登录需要在QQ互联开放平台上注册一个账号并提交审核:http://connect.qq.com/intro/login

使用新浪微博登录需要到新浪微博开放平台注册账号:http://open.weibo.com/development/mobile

 

新浪微博登录的处理代码:(需要下载新浪微博的SDK)

import java.io.ByteArrayOutputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.text.SimpleDateFormat;

import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.os.Bundle;
import android.text.TextUtils;
import android.widget.Toast;

import com.hd.client.BindActivity;
import com.sina.weibo.sdk.auth.Oauth2AccessToken;
import com.sina.weibo.sdk.auth.WeiboAuthListener;
import com.sina.weibo.sdk.auth.WeiboAuth.AuthInfo;
import com.sina.weibo.sdk.exception.WeiboException;
import com.sina.weibo.sdk.net.RequestListener;
import com.sina.weibo.sdk.widget.LoginButton;




/**
 * 新浪微博登录工具类
 * @author yw-tony
 *
 */
public class SinaLoginUtil {
    private static final String appkey = "你的appkey";
    // http://www.sina.comhttp://www.fortrun.com
    private static final String redirectUrl = "http://www.fortrun.com";
    private static final String SCOPE = "email,direct_messages_read,direct_messages_write,"
            + "friendships_groups_read,friendships_groups_write,statuses_to_me_read,"
            + "follow_app_official_microblog," + "invitation_write";
    /** 登陆认证对应的listener */
    private AuthListener mLoginListener = new AuthListener();
    /** 登出操作对应的listener */
    private LogOutRequestListener mLogoutListener = new LogOutRequestListener();
    private Context context;
    private AuthInfo authInfo = null;
    public String token = ",";private SinaLoginUtil(){}
    private static SinaLoginUtil instance = new SinaLoginUtil();
    public static SinaLoginUtil getInstance(){
        return instance;
    }
    public void initSina(Context context,LoginButton loginButton){
        this.context = context;
        // 创建授权认证信息
        authInfo = new AuthInfo(context, "你的appkey",redirectUrl, SCOPE);
        loginButton.setWeiboAuthInfo(authInfo, mLoginListener);
    }
    /**
     * 登入按钮的监听器,接收授权结果。
     */
    private class AuthListener implements WeiboAuthListener {
        @Override
        public void onComplete(Bundle values) {
            final 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);
//                mTokenView.setText(String.format(format, accessToken.getToken(), date));
                AccessTokenKeeper.writeAccessToken(context, accessToken);
            }
        }
       
    /**
     * 登出按钮的监听器,接收登出处理结果。(API 请求结果的监听器)
     */
    private class LogOutRequestListener implements RequestListener {
        @Override
        public void onComplete(String response) {
            if (!TextUtils.isEmpty(response)) {
                try {
                    JSONObject obj = new JSONObject(response);
                    String value = obj.getString("result");

                    if ("true".equalsIgnoreCase(value)) {
                        AccessTokenKeeper.clear(context);
//                        mTokenView.setText(R.string.weibosdk_demo_logout_success);
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
        }
        
        @Override
        public void onComplete4binary(ByteArrayOutputStream responseOS) {
            // Do nothing
        }        
        
        @Override
        public void onIOException(IOException e) {
//            mTokenView.setText(R.string.weibosdk_demo_logout_failed);
        }

        @Override
        public void onError(WeiboException e) {
//            mTokenView.setText(R.string.weibosdk_demo_logout_failed);
        }
    }
}

QQ登录:

import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;

import android.app.Activity;
import android.content.Context;
import android.os.AsyncTask;
import android.util.Log;
import android.widget.Toast;

import com.google.gson.JsonObject;
import com.hd.client.BindActivity;
import com.tencent.tauth.IUiListener;
import com.tencent.tauth.Tencent;
import com.tencent.tauth.UiError;


/**
 * 使用QQ登陆工具类
 * @author yw-tony
 *
 */
public class QQLoginUtil {
    public String token = ",";
    public Tencent tencen = null;
    private static String APP_ID = "你的Appid";
    private Context context;
    private QQLoginUtil(){}
    private static QQLoginUtil instance = new QQLoginUtil();
    public static QQLoginUtil getInstance(){
        return instance;
    }
    
    public void initTencen(Context context){
        tencen = Tencent.createInstance(APP_ID, context);
        this.context = context;
    }
    
    public void qqLogin(Activity activity){
        if (!tencen.isSessionValid()) {
            IUiListener listener = new BaseUiListener() {
                @Override
                protected void doComplete(JSONObject values) {
                    /*updateUserInfo();
                    updateLoginButton();*/
                }
            };
            tencen.login(activity, "all", listener);
        } else {
            tencen.logout(activity);
//            updateUserInfo();
//            updateLoginButton();
        }
    }
    private class BaseUiListener implements IUiListener {

        @Override
        public void onComplete(JSONObject response) {
//            Util.showResultDialog(MainActivity.this, response.toString(), "登录成功");
            Log.e("响应字符串", response.toString());
            doComplete(response);
        }

        protected void doComplete(final JSONObject values) {
            
        }

        
        @Override
        public void onError(UiError e) {
            Log.e("错误信息", e.errorDetail);
//            Util.toastMessage(MainActivity.this, "onError: " + e.errorDetail);
//            Util.dismissDialog();
        }

        @Override
        public void onCancel() {
            Log.e("取消了当前的登录操作", "取消了当前的登录操作");
//            Util.toastMessage(context, "onCancel: ");
//            Util.dismissDialog();
        }
    }
}

 

推荐阅读