
近年來三方導流,方便用戶使用App,以及方便App資料分享越來越多的App支持了三方登錄以及三方分享網頁和圖片.在此,整理了一系列三方庫的集成方法以及集成中遇到的問題 .
一:參考
1:Maven參考
implementation 'com.tencent.tauth:qqopensdk:3.52.0'

2:jar 包下載
二:QQ三方配置
1:AndroidManifest.xml配置

<!--QQ需要的權限-->
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<application>
<!--qq-->
<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" />
<!--tencent你的AppId-->
<data android:scheme="xxxid" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden"
android:screenOrientation="behind"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity android:name=".QQThirdActivity"/>
</application>
2:Activity呼叫頁面配置(且QQ的監聽只能在Activity中監聽)
import android.content.Intent
import android.os.Bundle
import android.widget.Button
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import com.tencent.tauth.IUiListener
import com.tencent.tauth.Tencent
import com.tencent.tauth.UiError
import com.wu.third.databinding.ActivityQqBinding
class QQThirdActivity : AppCompatActivity(), IUiListener {
var mTencent: Tencent? = null
//qq的權限
val ACOPE_ALL = "all"
val url = "https://www.baidu.com/"
var img = "https://gimg2.baidu.com/image_search/src=http%3A%2F%2Fimg.redocn.com%2Fsheying%2F20140704%2Fyuntaishanfengjing_2695407.jpg&refer=http%3A%2F%2Fimg.redocn.com&app=2002&size=f9999,10000&q=a80&n=0&g=0n&fmt=jpeg?sec=1639293976&t=cc27d9362325a51c8ee2c2c16a6dbe25"
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
var binding = DataBindingUtil.setContentView<ActivityQqBinding>(this, R.layout.activity_qq)
mTencent = Tencent.createInstance("xxxx", this.getApplicationContext())
binding.btLogin.setOnClickListener {
//QQ 登錄
if (mTencent!!.isQQInstalled(this))mTencent!!.login(this, ACOPE_ALL, this)
}
binding.btShare.setOnClickListener {
//QQ分享網頁
if (mTencent!!.isQQInstalled(this)) ThirdUtil.shareQQ(this, mTencent!!, "標題", "這是簡介", img, url)
}
binding.btShareImg.setOnClickListener {
//QQ分享圖片
if (mTencent!!.isQQInstalled(this))
ThirdUtil.shareQQImg(this, mTencent!!, "path");
}
}
override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
super.onActivityResult(requestCode, resultCode, data)
//設定回呼
Tencent.onActivityResultData(requestCode, resultCode, data, this)
}
//成功
override fun onComplete(p0: Any?) {
ThirdUtil.loginQQ(this, mTencent!!, p0!!)
}
//失敗
override fun one rror(p0: UiError?) {
}
//取消
override fun onCancel() {
}
override fun onWarning(p0: Int) {
}
}
三:功能實作
1:QQ登錄
1.呼叫登錄方法
//QQ登錄
if (mTencent!!.isQQInstalled(this)) mTencent!!.login(this, ACOPE_ALL, this)
2.登陸回呼執行:執行IUiListener回呼,獲取Object資料

3:獲取資料
//QQ 登錄
fun loginQQ(context: Context, mTencent: Tencent, any: Any) {
var jsObj = any as JSONObject
if (jsObj != null) {
var ret = jsObj.getInt(SocialConstants.PARAM_OPEN_ID)
//授權成功
if (ret == 0) {
//此處登錄授權成功
val openId: String = jsObj.getString(SocialConstants.PARAM_OPEN_ID)
val access_token: String = jsObj.getString(Constants.PARAM_ACCESS_TOKEN)
val expires: String = jsObj.getString(Constants.PARAM_EXPIRES_IN)
mTencent.openId = openId
mTencent.setAccessToken(access_token, expires)
//獲取用戶唯一ID
getUnionId(
context,
mTencent
)
} else {
// todo 授權失敗
}
}
}
4.獲取UnionID
//獲取用戶唯一ID
private fun getUnionId(context: Context, mTencent: Tencent) {
var listener = object : IUiListener {
override fun onComplete(response: Any?) {
if (response != null) {
val jsonObject = response as JSONObject
try {
val unionid = jsonObject.getString("unionid")
getUserInfo(
context,
mTencent,
unionid
)
} catch (e: Exception) {
// todo 資料例外
}
} else {
// todo 資料例外
}
}
override fun one rror(p0: UiError?) {
// todo 獲取唯一ID失敗
}
override fun onCancel() {
}
override fun onWarning(p0: Int) {
}
}
val unionInfo = UnionInfo(context, mTencent.qqToken)
unionInfo.getUnionId(listener)
}
5.獲取用戶資訊
//獲取用戶資訊
private fun getUserInfo(context: Context, mTencent: Tencent, unionid: String) {
val info = UserInfo(context, mTencent.qqToken)
info.getUserInfo(object : IUiListener {
override fun onComplete(value: Any?) {
val jsonObject = value as JSONObject
if (jsonObject == null) return
//名字
val name = jsonObject.getString("nickname")
//頭像
val urlface = jsonObject.getString("figureurl_qq")
//性別
val gender = jsonObject.getString("gender")
//省會
val province = jsonObject.getString("province")
//城市
val city = jsonObject.getString("city")
Log.e("QQ資料", name + ":" + urlface + ":" + gender + ":" + province + ":" + city)
}
override fun one rror(p0: UiError?) {
// todo 用戶資訊失敗
}
override fun onCancel() {
}
override fun onWarning(p0: Int) {
}
})
}
2:QQ分享網頁
//QQ分享網頁
fun shareQQ(
context: QQThirdActivity,
mTencent: Tencent,
title: String,
desc: String,
imgUrl: String,
url: String
) {
val params = Bundle()
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT) //分享型別 分享網頁
params.putString(
QQShare.SHARE_TO_QQ_TITLE,
title
) // 標題 限制(長度 128 )QQ_SHARE_TITLE_MAX_LENGTH
params.putString(
QQShare.SHARE_TO_QQ_SUMMARY,
desc
) // 摘要限制(512) QQ_SHARE_SUMMARY_MAX_LENGTH = 512
params.putString(QQShare.SHARE_TO_QQ_TARGET_URL, url) // 內容地址 最好控制下長度 長連接報過錯
params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL, imgUrl) // 網路圖片地址(本地地址)
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "xxx") // 應用名稱
// 分享操作要在主執行緒中完成
mTencent.shareToQQ(context, params, object : IUiListener {
override fun onComplete(p0: Any?) {
// todo 分享成功
}
override fun one rror(p0: UiError?) {
// todo 分享失敗
}
override fun onCancel() {
}
override fun onWarning(p0: Int) {
}
})
}
3.分享圖片
// 分享圖片
fun shareQQImg(qqThirdActivity: QQThirdActivity, mTencent: Tencent, path: String) {
val params = Bundle()
params.putString(QQShare.SHARE_TO_QQ_IMAGE_LOCAL_URL, path) //分享圖片地址 最好做個限制大小
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "xxxApp")// 應用名稱
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_IMAGE)//分享型別 分享圖片
// 分享操作要在主執行緒中完成
mTencent.shareToQQ(qqThirdActivity, params, object : IUiListener {
override fun onComplete(p0: Any?) {
// todo 分享成功
}
override fun one rror(p0: UiError?) {
// todo 分享失敗
}
override fun onCancel() {
}
override fun onWarning(p0: Int) {
}
})
}
總結:
QQ三方庫簡單的集成以及主要功能實作,以此記錄,歡迎問題探討,來都來了點個贊再走吧!!!
1:集成檔案QQ
2:QQ資源檔案
3:原始碼地址
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/356802.html
標籤:其他
下一篇:Android 實作圓形按鈕
