第一次的博客-------------第三方应用QQ登录

写在开头:

小白一枚,第一次写博客,之前一直在阅读文章的时候,看到很多大神们都推荐多多写博客。
现在无聊之余也写一写,当做知识的整理。

开始--------第三方应用使用QQ登录

1、首先,写到腾讯开放平台创建一个应用(怎么创建这里略过睡觉

创建后拿到一个 APP ID ,写保存着,之后会用到

2、平台上下载SDK,把 mta-sdk-1.6.2.jar 与 open_sdk_r5756.jar 都导入项目中(官方文档说明分全量包包、基础包尴尬,这个我咋不是很清楚,所以直接全部导进去)。

3、配置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" /> -->
<data android:scheme="1105870190" />
</intent-filter>
</activity>
<activity android:name="com.tencent.connect.common.AssistActivity"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"
/>
<application>
配置相应的权限,特别注意的是

<data android:scheme="tencent你的AppId" />

这里写的是上面自己创建应用拿到的 APP ID ,官网上说要在前面加tencent,即tencentAPP ID,扯淡生气,为这个我还郁闷的一阵,直接写APP ID就好。

4、Tencent是SDK的功能入口,所有的接口调用都得通过Tencent进行调用。因此,调用SDK,首先需要创建一个Tencent实例,其代码如下:

@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// Tencent类是SDK的主要实现类,开发者可通过Tencent类访问腾讯开放的OpenAPI。
// 其中APP_ID是分配给第三方应用的appid,类型为String。
Tencent mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext());
// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取
// 初始化视图
initViews();
}

5、实现登录并获取用户信息

需要先实现IUiListener的回调,

 private class BaseUiListener implements IUiListener {

        @Override
        public void onComplete(Object response) {
            if (null == response) {
                ToastTool.showShortMsg(act,"登录失败");
                return;
            }
            JSONObject jsonResponse = (JSONObject) response;
            if (null != jsonResponse && jsonResponse.length() == 0) {
                ToastTool.showShortMsg(act,"登录失败");
                return;
            }
            ToastTool.showShortMsg(act,"登录成功");
            doComplete((JSONObject)response);
        }

        protected void doComplete(JSONObject values) {

        }

        @Override
        public void onError(UiError e) {
            Logger.e("onError: " + e.errorDetail);
        }

        @Override
        public void onCancel() {
            Logger.e("onCancel: ");
            ToastTool.showShortMsg(act,"取消授权");
        }
    }

然后是登录

if (!mTencent.isSessionValid())
     {
        mTencent.login(activity,"all",loginListener);
         }
第二个参数是 Scope ,现在还不知道是上面鬼,查看下资料直接写 all  大笑
接下来是loginListener:
 IUiListener loginListener = new BaseUiListener() {
        @Override
        protected void doComplete(JSONObject values) {
            initOpenidAndToken(values);
            //获取用户信息
            updateUserInfo();
        }
    };

initOpenidAndToken(values):

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) {
        }
    }

获取用户的信息updataUserInfo:

//QQ账号信息
    private void updateUserInfo() {
        if (mTencent != null && mTencent.isSessionValid()) {
            IUiListener listener = new IUiListener() {

                @Override
                public void onComplete(Object response) {
		//response,返回的用户数据
                Logger.e("response----"+response.toString());

                @Override
                public void onError(UiError uiError) {

                }

                @Override
                public void onCancel() {

                }
            };
            mInfo = new UserInfo(this, mTencent.getQQToken());
            mInfo.getUserInfo(listener);
        }
    }

这就差不多了,前前后后自己一个人也折腾了挺久的,不过总算搞出来了! 奋斗





  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值