AndroidAndroid开发经验谈android 开发程序员

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

2017-11-27  本文已影响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。

上一篇下一篇

猜你喜欢

热点阅读