1.登录账号,创建应用,生成APPID与APPKEY
2.下载相关SDK
SDK下载地址:https://wiki.open.qq.com/wiki/mobile/SDK%E4%B8%8B%E8%BD%BD
3.将其SDK里面相关的文件拷到自己的项目当中去
- 需要将 open_sdk_r6137_lite.jar包放到自己的项目当中去,并引用
- 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>
- 代码实现功能
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.实现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)
}
- 开发过程中常见的一些问题
详情跳转: Android SDK常见问题 - 常用的API接口
详情跳转 Android_SDK功能列表