• android使用第三方登录之QQ登录-


    首先,当然是在腾讯开放平台注册成为开发者,然后获取APP ID

    1.下载SDK

    地址

    2.把open-sdk.jar文件和mta_sdk_x.x.x.jar文件拷贝到libs(或lib)目录下

    配置地址

    3.配置AndroidManifest

            <uses-permission android:name="android.permission.INTERNET" />
            <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
                    <!-- 从QQ登录中copy的代码-->
            <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="tencent1105546048" />
                </intent-filter>
            </activity>
            <activity
                android:name="com.tencent.connect.common.AssistActivity"
                android:configChanges="orientation|keyboardHidden|screenSize"
                android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    

    4.创建实例

    地址

    // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
    // 其中APP_ID是分配给第三方应用的appid,类型为String。
    mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
    

    5.实现回调 IUiListener

    6.接收到回调

    需要在调用接口的ActivityonActivityResult方法中增加如下代码:

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    Tencent.onActivityResultData(requestCode,resultCode,data,listener);
    }
    

    具体源码:

        //变量 
        boolean isServerSideLogin = false;
        public static Tencent mTencent;
        
        //点击按钮之后QQ登录
        public void loginQQ(View view){
            //初始化,得到APPID
            mTencent = Tencent.createInstance(ConstantsData.QQ_APP_ID, this);
            if (!mTencent.isSessionValid()) {
                mTencent.login(this, "all", loginListener);
                isServerSideLogin = false;
                Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" + SystemClock.elapsedRealtime());
            } else {
                if (isServerSideLogin) { // Server-Side 模式的登陆, 先退出,再进行SSO登陆
                    mTencent.logout(this);
                    mTencent.login(this, "all", loginListener);
                    isServerSideLogin = false;
                    Log.d("SDKQQAgentPref", "FirstLaunch_SDK:" + SystemClock.elapsedRealtime());
                    return;
                }
                mTencent.logout(this);
            }
        }
    
        //初始化OPENID和TOKEN值(为了得了用户信息)
        public static void initOpenidAndToken(JSONObject jsonObject) {
            try {
                String token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN);
                String expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN);
                String openId = jsonObject.getString(Constants.PARAM_OPEN_ID);
                if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                        && !TextUtils.isEmpty(openId)) {
                    mTencent.setAccessToken(token, expires);
                    mTencent.setOpenId(openId);
                }
            } catch(Exception e) {
            }
        }
    
        IUiListener loginListener = new BaseUiListener() {
            @Override
            protected void doComplete(JSONObject values) {
                Log.d("SDKQQAgentPref", "AuthorSwitch_SDK:" + SystemClock.elapsedRealtime());
                initOpenidAndToken(values);
            }
        };
    
        //实现回调
        private class BaseUiListener implements IUiListener {
    
            @Override
            public void onComplete(Object response) {
                if (null == response) {
                    Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
                    return;
                }
                JSONObject jsonResponse = (JSONObject) response;
                if (null != jsonResponse && jsonResponse.length() == 0) {
                    Util.showResultDialog(LoginActivity.this, "返回为空", "登录失败");
                    return;
                }
                Util.showResultDialog(LoginActivity.this, response.toString(), "登录成功");
                // 有奖分享处理
    //            handlePrizeShare();
                doComplete((JSONObject)response);
            }
    
            protected void doComplete(JSONObject values) {
    
            }
    
            @Override
            public void onError(UiError e) {
                Util.toastMessage(LoginActivity.this, "onError: " + e.errorDetail);
                Util.dismissDialog();
            }
    
            @Override
            public void onCancel() {
                Util.toastMessage(LoginActivity.this, "onCancel: ");
                Util.dismissDialog();
                if (isServerSideLogin) {
                    isServerSideLogin = false;
                }
            }
        }
    
        //QQ登录后的回调
        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
            Log.d("TAG", "-->onActivityResult " + requestCode  + " resultCode=" + resultCode);
            if (requestCode == Constants.REQUEST_LOGIN ||
                    requestCode == Constants.REQUEST_APPBAR) {
                Tencent.onActivityResultData(requestCode,resultCode,data,loginListener);
            }
    
            super.onActivityResult(requestCode, resultCode, data);
        }
    
  • 相关阅读:
    GB 51411-2020 金属矿山土地复垦工程设计标准
    GB/T 51413-2020 有色金属工业余热利用设计标准
    DL/T 1907.1-2018等最新电力行业标准
    GB 50205-2020 钢结构工程施工质量验收标准
    DL/T 5210.6-2019 电力建设施工质量验收规程 第6部分:调整试验
    GB/T 38640-2020 盲用数字出版格式
    GB 50325-2020 民用建筑工程室内环境污染控制标准(含条文说明)
    GB 50216-2019 铁路工程结构可靠性设计统一标准
    最新发布的国家标准下载(2020-5-21)
    bind、apply、call的区别
  • 原文地址:https://www.cnblogs.com/firefly-pengdan/p/12100765.html
Copyright © 2020-2023  润新知