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

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

Android第三方QQ登录,实用教程_第1张图片
Android第三方QQ登录,实用教程_第2张图片
Android第三方QQ登录,实用教程_第3张图片
Android第三方QQ登录,实用教程_第4张图片
Android第三方QQ登录,实用教程_第5张图片

2.下载相关SDK

SDK下载地址:https://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD
Android第三方QQ登录,实用教程_第6张图片

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

  1. 需要将 open_sdk_r6137_lite.jar包放到自己的项目当中去,并引用
    Android第三方QQ登录,实用教程_第7张图片
  2. Androidminfist.xml里面需要配置相关代码
       
       
           
               
               
               
               
               
				
           
       
  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方法获取
} //以下代码是唤起第三方应用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() {}.type
                val qqUserInfoModel = GsonUtils.fromJson(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功能列表

你可能感兴趣的:(android,第三方QQ登录)