Android第三方QQ登录,实用教程

1.登录账号,创建应用,生成APPID与APPKEY

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.下载相关SDK

SDK下载地址:https://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD
在这里插入图片描述

3.将其SDK里面相关的文件拷到自己的项目当中去

  1. 需要将 open_sdk_r6137_lite.jar包放到自己的项目当中去,并引用
    在这里插入图片描述
  2. Androidminfist.xml里面需要配置相关代码
       <activity
           android:name="com.tencent.connect.common.AssistActivity"
           android:configChanges="orientation|keyboardHidden|screenSize"
           android:screenOrientation="behind"
           android:theme="@android:style/Theme.Translucent.NoTitleBar" />
       <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" />
               <!--注意,这里的222222要换成app自己的appid-->
               <data android:scheme="tencent222222" />
				<!-- 100380359 100381104 222222 -->
           </intent-filter>
       </activity>
  1. 代码实现功能
    Tencent是SDK的功能入口,所有的接口调用都得通过Tencent进行调用。因此,调用SDK,首先需要创建一个Tencent实例,其代码如下
 lateinit var mTencent: Tencent
 
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// 其中APP_ID是分配给第三方应用的appid,类型为String
mTencent = Tencent.createInstance(APP_ID, this.getApplicationContext())
// 1.4版本:此处需新增参数,传入应用程序的全局context,可通过activity的getApplicationContext方法获取<br>
}

//以下代码是唤起第三方应用QQ,并进行登录
                mTencent.logout(this)
                if (!mTencent.isSessionValid) {
                //进行登录操作
                    mTencent.login(this, "all", loginListener)
                    //进行扫码登录操作
                   mTencent.login(this, "all", loginListener, true)
                }

你的AppId则要替换成具体应用的AppId,例如你的AppId是”222222″,则标签应该是这样的:

  1. 登录成功之后,进行回调操作
1.实现UIlistener()类
2.登录成功,会得到JSON数据
3.务必,将数据通过initOpenidAndToken()方法进行配置
4.调用getUserInfo()得到用户信息

        loginListener = object : BaseUiListener() {
            override fun doComplete(values: JSONObject) {
                initOpenidAndToken(values)
                getUserInfo()
            }
        }


    /**
     * 根据QQ授权登录之后,得到的token。进行配置
     * 1.必须进行配置,不然取不到QQ用户的一些基本信息
     */
    fun initOpenidAndToken(jsonObject: JSONObject) {
        try {
            val token = jsonObject.getString(Constants.PARAM_ACCESS_TOKEN)
            val expires = jsonObject.getString(Constants.PARAM_EXPIRES_IN)
            val openId = jsonObject.getString(Constants.PARAM_OPEN_ID)
            if (!TextUtils.isEmpty(token) && !TextUtils.isEmpty(expires)
                    && !TextUtils.isEmpty(openId)) {
                mTencent.setAccessToken(token, expires)
                mTencent.openId = openId
            }
        } catch (e: Exception) {
        }
    }

    /**
     * 取用户信息
     */
    fun getUserInfo() {
        val userInfo = UserInfo(this, mTencent.qqToken)
        userInfo.getUserInfo(object : IUiListener {

            override fun onComplete(response: Any?) {
                val type = object : TypeToken<QQUserInfoModel>() {}.type
                val qqUserInfoModel = GsonUtils.fromJson<QQUserInfoModel>(response.toString(), type)
            }

            override fun onCancel() {

            }

            override fun onError(error: UiError?) {

            }

        })

    }
    
    private open inner class BaseUiListener : IUiListener {

        override fun onComplete(response: Any?) {
            doComplete((response as JSONObject?)!!)
        }

        protected open fun doComplete(values: JSONObject) {

        }

        override fun onError(e: UiError) {

        }

        override fun onCancel() {

        }
    }

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

   override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        if (requestCode == Constants.REQUEST_LOGIN || requestCode == Constants.REQUEST_APPBAR) {
            //当QQ登录完成后,进行回调
            Tencent.onActivityResultData(requestCode, resultCode, data, loginListener)
        }
        super.onActivityResult(requestCode, resultCode, data)
    }
  1. 开发过程中常见的一些问题
    详情跳转: Android SDK常见问题
  2. 常用的API接口
    详情跳转 Android_SDK功能列表

猜你喜欢

转载自blog.csdn.net/u013290250/article/details/100039602
今日推荐