Android -- 第三方QQ登录集成

一. 集成

QQ SDK下载地址:http://wiki.connect.qq.com/sdk%E4%B8%8B%E8%BD%BD#androidsdk

下载完成后,解压。将libs目录下的jar包复制到AS中,记得右键jar包Add As Library.

权限 :

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

在AndroidMainfest.xml中添加

<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:launchMode="singleTask"
    android:noHistory="true">
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />

        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />

        <data android:scheme="tencent0123456789" /> <!--注意在这里用你的appid替换0123456789 -->
    </intent-filter>
</activity>
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
jar包已经应用的话这里是不会报错的。

二. 实现

新建AppCnstant.class

public class AppConstant {
    public static String APP_ID="0123456789";      //你应用的APP_ID
}

如果只有一个QQ登录的话就不需要了,多个第三方新建此类便于管理。

MainActivity.class

在点击事件中添加:

//这里的APP_ID请换成你应用申请的APP_ID
mAppid = AppConstant.APP_ID;
//第一个参数就是上面所说的申请的APPID,第二个是全局的Context上下文,这句话实现了调用QQ登录
mTencent = Tencent.createInstance(mAppid, getApplicationContext());
/**通过这句代码,SDK实现了QQ的登录,这个方法有三个参数,第一个参数是context上下文,第二个参数SCOPO 是一个String类型的字符串,表示一些权限
 官方文档中的说明:应用需要获得哪些API的权限,由分隔。例如:SCOPE = “get_user_info,add_t”;所有权限用“all”
 第三个参数,是一个事件监听器,IUiListener接口的实例,这里用的是该接口的实现类 */
mTencent.login(MainActivity.this, "all", new BaseUiListener());
private class BaseUiListener implements IUiListener {

    //这个类需要实现三个方法 onComplete():登录成功需要做的操作写在这里
    public void onComplete(Object response) {       //登录成功
        // TODO Auto-generated method stub
        Toast.makeText(getApplicationContext(), "登录成功", Toast.LENGTH_SHORT).show();
        try {
            //获得的数据是JSON格式的,获得你想获得的内容
            //如果你不知道你能获得什么,看一下下面的LOG
            Log.i("textShow", "-------------" + response.toString());
            String openidString = ((JSONObject) response).getString("openid");
            mTencent.setOpenId(openidString);
            mTencent.setAccessToken(((JSONObject) response).getString("access_token"), ((JSONObject) response).getString("expires_in"));

            Log.i("textShow", "-------------" + openidString);
            //access_token= ((JSONObject) response).getString("access_token");
            //expires_in = ((JSONObject) response).getString("expires_in");
        } catch (JSONException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        /**到此已经获得OpneID以及其他你想获得的内容了
         QQ登录成功了,我们还想获取一些QQ的基本信息,比如昵称,头像什么的,这个时候怎么办?
         sdk给我们提供了一个类UserInfo,这个类中封装了QQ用户的一些信息,我么可以通过这个类拿到这些信息
         如何得到这个UserInfo类呢?
         [java] view plain copy
         获取详细信息的UserInfo ,返回的信息参看下面地址:
         http://wiki.open.qq.com/wiki/%E8%8E%B7%E5%8F%96%E7%94%A8%E6%88%B7%E4%BF%A1%E6%81%AF#1._Tencent.E7.B1.BB.E7.9A.84request.E6.88.96requestAsync.E6.8E.A5.E5.8F.A3.E7.AE.80.E4.BB.8B
         */

        QQToken qqToken = mTencent.getQQToken();
        UserInfo info = new UserInfo(getApplicationContext(), qqToken);

        //    info.getUserInfo(new BaseUIListener(this,"get_simple_userinfo"));
        info.getUserInfo(new IUiListener() {
            @Override
            public void onComplete(Object o) {
                //用户信息获取到了
                try {
                    Log.i("textShow", ((JSONObject) o).getString("nickname"));
                    Log.i("textShow", ((JSONObject) o).getString("gender"));
                    Log.i("textShow", o.toString());
                    Intent intent1 = new Intent(MainActivity.this, SecondActivity.class);  //登录成功跳转界面
                    startActivity(intent1);
                    finish();
                } catch (JSONException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
            }

            @Override
            public void onError(UiError uiError) {
                Log.i("textShow", "onError");
            }

            @Override
            public void onCancel() {
                Log.i("textShow", "onCancel");
            }
        });
    }

    @Override
    public void onError(UiError uiError) {      //登录错误
        Toast.makeText(getApplicationContext(), "onError", Toast.LENGTH_SHORT).show();
    }

    @Override
    public void onCancel() {            //取消登录
        Toast.makeText(getApplicationContext(), "onCancel", Toast.LENGTH_SHORT).show();
    }
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {    
    super.onActivityResult(requestCode, resultCode, data);

    Tencent.onActivityResultData(requestCode, resultCode, data, new BaseUiListener());

    if (requestCode == Constants.REQUEST_API) {
        if (resultCode == Constants.REQUEST_LOGIN) {
            Tencent.handleResultData(data, new BaseUiListener());
        }
    }

}

The end!





猜你喜欢

转载自blog.csdn.net/qq_26446715/article/details/80391041