美文网首页AndroidAndroid开发经验谈android 开发程序员
三方登录-QQ登录开发-Android(as版本)

三方登录-QQ登录开发-Android(as版本)

作者: 流水潺湲 | 来源:发表于2017-11-27 17:09 被阅读60次

    腾讯开放平台API

    一、导入jar文件

    gradle配置:

     compile files('libs/open_sdk_r5923_lite.jar')
    

    二、 配置AndroidManifest

    在应用的AndroidManifest.xml增加配置的<application>节点下增加以下配置(注:不配置将会导致无法调用API);

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
    
    <application>
    <activity
    android:name="com.tencent.tauth.AuthActivity" 
    android:noHistory="true" 
    android:launchMode="singleTask" >
    <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="tencent你的AppId" />
    </intent-filter>
    </activity>
    <application>
    

    SDK_V2.0引入了AssistActivity,开发者需在androidManifest.xml中注册。代码如下:

    <activity android:name="com.tencent.connect.common.AssistActivity"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="orientation|keyboardHidden|screenSize" 
    />
    

    通过以上两个步骤,工程就已经配置完成了。接下来就可以在代码里使用QQ互联的SDK进行开发了。

    三、创建实例并实现回调

    建议在Application中配置全局的比较实用

    public class MyApplication extendsApplication {
     
        public static Tencent mTencent;
    
        public static Tencent getmTencent() {
            return mTencent;
        }
    
        public static void setmTencent(Tencent mTencent) {
            SkyPineApplication.mTencent = mTencent;
        }
    
        @Override
        public void onCreate() {
            super.onCreate();
          
    
            // Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
            // 其中APP_ID是分配给第三方应用的appid,类型为String。
            mTencent = Tencent.createInstance(ConfigurationSettings.TENCENT_APP_ID, this.getApplicationContext());
    
        }
    
    

    接下来就是直接登录、获取用户信息即可

    登录

    /**
         * qq
         * scope    应用需要获得哪些API的权限,由“,”分隔。
         * 例如:SCOPE = “get_user_info,add_t”;所有权限用“all”
         */
     public static final String ACOPE_ALL       = "all";
    
     BaseUiListener listener;
    
        public void login() {
            listener = new BaseUiListener();
            if (!mTencent.isSessionValid()) {
                mTencent.login(this, ACOPE_ALL, listener);
            }
        }
    

    登录回调

     private class BaseUiListener implements IUiListener {
    
            @Override
            public void onComplete(Object value) {
                Log.e(TAG, value.toString());
                //{"ret":0,"openid":"1BD6DE05A2A48E3AFF3905766855C30C","access_token":"072A085194740A54A85EA555D3AFE7EB",
                // "pay_token":"765794D8CB4DFE50B743E98A9BBFC239","expires_in":7776000,"pf":"desktop_m_qq-10000144-android-2002-",
                // "pfkey":"20d22c7e64c46aa138b69b5ebe89511a","msg":"","login_cost":493,"query_authority_cost":118,"authority_cost":24924}
    
                try {
                    JSONObject jsonObject = (JSONObject) value;
                    int ret = jsonObject.getInt("ret");
                    if (ret == 0) {
                        showMessage("login success");
                      //此处登录授权成功
                        String openId = jsonObject.getString(PARAM_OPEN_ID);
                        String access_token = jsonObject.getString(PARAM_ACCESS_TOKEN);
                        String expires = jsonObject.getString(PARAM_EXPIRES_IN);
                        mTencent.setOpenId(openId);
                        mTencent.setAccessToken(access_token, expires);
                        //获取用户信息
                         getUserInfo();
                    } else {
                        showMessage("login failed");
                    }
                } catch (JSONException e) {
                    e.printStackTrace();
                }
            }
    
            @Override
            public void onError(UiError uiError) {
                Log.e(TAG, uiError.errorMessage);
                showMessage("falied");
            }
    
            @Override
            public void onCancel() {
                Log.e(TAG, "cancel");
                showMessage("cancel");
            }
        }
    
    
    

    用户信息

     private void getUserInfo() {
            UserInfo info = new UserInfo(LoginActivity.this, mTencent.getQQToken());
            info.getUserInfo(new IUiListener() {
                @Override
                public void onComplete(Object value) {
                    JSONObject jsonObject = (JSONObject) value;
                    Log.e(TAG, jsonObject.toString());
                }
    
                @Override
                public void onError(UiError uiError) {
                    Log.e(TAG, uiError.errorMessage);
                }
    
                @Override
                public void onCancel() {
    
                }
            });
        }
    
    

    调用QQ注销接口

    public void logout()
    {
    mTencent.logout(this);
    }
    

    特别注意

    应用调用Andriod_SDK接口时,如果要成功接收到回调,需要在调用接口的Activity的onActivityResult方法中增加如下代码:

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

    其中onActivityResultData接口中的listener为当前调用的Activity所实现的相应回调UIListener。

    相关文章

      网友评论

        本文标题:三方登录-QQ登录开发-Android(as版本)

        本文链接:https://www.haomeiwen.com/subject/agudbxtx.html