116052018028+林振楠
QQ的三方登陸與分享
一、準備工作
進入QQ互聯官網,點選應用開放平臺下的管理中心跳轉到個人開發者的註冊申請介面
2.申請好個人開發者賬後,點選建立一個專案,可以獲得一個APPID和APPKEY,記得儲存,後面要用
3.進入SDK下載頁面下載Android_SDK_Vx.x.x,解壓之後得到以下
進入libs下將open_sdk_3.5.1.157_re503bfe_lite.jar檔案拷貝到專案的libs資料夾下
二、實現QQ第三方登陸
新增許可權
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
新增activity,對應跳轉qq登陸的介面
<!-- QQ的第三方登陸 -->-
<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="tencent1111333510" />
</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程式碼:
定義常量
private Tencent mTencent; //Tencent例項
private String APP_ID = "1111333510";
private IUiListener loginListener; //監聽
private String SCOPE = "all"; //範圍
初始化監聽器
private void initQqLogin(){
mTencent = Tencent.createInstance(APP_ID, this);
//建立QQ登入回撥介面
loginListener = new IUiListener() {
@Override
public void onComplete(Object o) {
JSONObject jo = (JSONObject) o;
Log.e("COMPLETE:", jo.toString());
//登入成功後回撥該方法
Toast.makeText(MainActivity6.this, "登入成功", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(UiError uiError) {
//登入失敗後回撥該方法
Toast.makeText(MainActivity6.this, "登入失敗", Toast.LENGTH_SHORT).show();
Log.e("LoginError:", uiError.toString());
}
@Override
public void onCancel() {
//取消登入後回撥該方法
Toast.makeText(MainActivity6.this, "取消登入", Toast.LENGTH_SHORT).show();
}
@Override
public void onWarning(int i) {
}
};
}
實現登陸結果回撥
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mTencent.onActivityResultData(requestCode, resultCode, data, loginListener);
if (requestCode == Constants.REQUEST_API) {
if (resultCode == Constants.REQUEST_QQ_SHARE ||
resultCode == Constants.REQUEST_QZONE_SHARE ||
resultCode == Constants.REQUEST_OLD_SHARE) {
mTencent.handleResultData(data, loginListener);
}
}
}
在onCreate方法中定義一個按鈕初始化環境並呼叫登入介面:
Button btn = findViewById(R.id.ic_qq);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
initQqLogin();
mTencent.login(MainActivity6.this, SCOPE, loginListener);
}
});
效果圖
![在這裡插入圖片描述](https://img-blog.csdnimg.cn/2020122118280067.gif#pic_center
三、實現QQ分享
實現Activity程式碼:
定義常量
private IUiListener shareListener ;
初始化監聽器
//QQ分享監聽
private void initShare(){
mTencent = Tencent.createInstance(APP_ID, this);
shareListener = new IUiListener() {
@Override
public void onComplete(Object o) {
//分享成功後回撥
Toast.makeText(MainActivity6.this, "分享成功!", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(UiError uiError) {
//分享失敗後回撥
}
@Override
public void onCancel() {
//取消分享後回撥
}
@Override
public void onWarning(int i) {
}
};
}
實現分享方法,更多型別的分享可以參考QQ分享
public void share(View view)
{
Bundle params = new Bundle();
params.putInt(QQShare.SHARE_TO_QQ_KEY_TYPE, QQShare.SHARE_TO_QQ_TYPE_DEFAULT);
params.putString(QQShare.SHARE_TO_QQ_TITLE, "標題");
params.putString(QQShare.SHARE_TO_QQ_SUMMARY,"摘要");
params.putString(QQShare.SHARE_TO_QQ_TARGET_URL,"http://blog.csdn.net/u013451048");
params.putString(QQShare.SHARE_TO_QQ_IMAGE_URL,"http://avatar.csdn.net/C/3/D/1_u013451048.jpg");
params.putString(QQShare.SHARE_TO_QQ_APP_NAME, "CSDN");
mTencent.shareToQQ(MainActivity6.this, params, shareListener);
}
在onCreate方法中定義一個按鈕初始化環境並呼叫分享:
initShare();
share(v);
分享效果:
分享失敗原因是appid未通過稽核,只允許開發者進行第三方登陸
四、常見錯誤
2020-12-21 15:46:44.906 5812-5861/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: Thread-2
Process: com.example.myapplication, PID: 5812
java.lang.NoClassDefFoundError: Failed resolution of: Lorg/apache/http/conn/scheme/SchemeRegistry;
at com.tencent.open.utils.HttpUtils.getHttpClient(ProGuard:634)
at com.tencent.open.utils.HttpUtils.openUrl2(ProGuard:507)
at com.tencent.open.utils.g$1.run(ProGuard:197)
Caused by: java.lang.ClassNotFoundException: Didn't find class "org.apache.http.conn.scheme.SchemeRegistry" on path: DexPathList[[zip file "/data/app/~~5B-Ts-GeXWFIk_rTJLbHvA==/com.example.myapplication-K1q4IBrjVFa7bt0J17Ckxg==/base.apk"],nativeLibraryDirectories=[/data/app/~~5B-Ts-GeXWFIk_rTJLbHvA==/com.example.myapplication-K1q4IBrjVFa7bt0J17Ckxg==/lib/x86, /system/lib, /system_ext/lib, /product/lib]]
at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:207)
at java.lang.ClassLoader.loadClass(ClassLoader.java:379)
at java.lang.ClassLoader.loadClass(ClassLoader.java:312)
at com.tencent.open.utils.HttpUtils.getHttpClient(ProGuard:634)
at com.tencent.open.utils.HttpUtils.openUrl2(ProGuard:507)
at com.tencent.open.utils.g$1.run(ProGuard:197)
原因: 從 Android 9 開始,預設情況下Apache HTTP 客戶端內容庫已從 bootclasspath 中移除且不可用於應用。
解決:
在AndroidManifest.xml的application中設定此屬性
android:usesCleartextTraffic="true"
且在application節點下新增以下內容
<uses-library android:name="org.apache.http.legacy" android:required="false"/>
參考文章:
QQ官方文件:https://wiki.connect.qq.com/qq%E7%99%BB%E5%BD%95
CSDN文章:https://blog.csdn.net/chinaboyliusir/article/details/82755193
作者:林振楠
原文連結
相關文章
- 吉林開票-吉林開票
- 20261134虞振偉
- 斯特林
- Windows域林Windows
- 嘉楠科技IPO招股書及簡要資料
- 柔性振動盤 機器人上料 視覺振盤機器人視覺
- 林料速有我林聯七置辦明smg
- 布林帶策略
- 王建林說
- 吉林開票
- STM32內建晶振和外接晶振的精度差別
- RTC-晶振基礎
- RTC-晶振指標指標
- 【3】斯特林數
- 斯特林數求解
- TypeScript 布林型別TypeScript型別
- 布林線的用法圖解:如何運用布林線逃頂和抄底圖解
- C#快速入門教程(10)——布林型別與布林運算C#型別
- 康帕斯史楠:釘釘是員工管理領導的神器
- ES-布林查詢
- Boost 矩形布林運算
- HTML 布林屬性值HTML
- 吉林哪裡有開發票|吉林哪裡可以開發票
- 嘉楠科技:4Q19營收4.63億元 同比增長66.8%營收
- 大規模資料處理實戰-蔡元楠-極客時間
- 新版Keil開啟晶振模擬
- 鄉村沒有人,談何振興
- TRIZ 機械振動原理 例項
- Markdown學習20221418曾慶林
- 從布林值到異常
- 面試題:布林變數面試題變數
- 你好,布林瑪!(Blazor元件庫)Blazor元件
- 域、域樹、域林、根域
- 【叢林】CSS background 背景淺談CSS
- 面試題(一)北京巨集林面試題
- 【叢林】CSS 邊框淺談CSS
- 日本農林水產省:2020上半年日本農林水產品出口下降8.2%
- 孫楠被曝在徐州有別墅 家裡還有外籍傭人EQ