เวอร์ชันล่าสุด (1.2.0) ง่ายกว่า เบากว่า เน้นธุรกิจมากกว่า
ด้วยเป้าหมายการออกแบบที่เรียบง่าย เบากว่า และมุ่งเน้นความต้องการทางธุรกิจมากขึ้น จึงให้การสนับสนุนฟังก์ชันการเข้าสู่ระบบและการแชร์สำหรับ Weibo , WeChat , QQ , Tim , เวอร์ชันแชท QQ และ DingTalk
ที่อยู่โครงการ: GitHub - SocialSdkLibrary
ที่อยู่บล็อก: เข้าถึงการเข้าสู่ระบบและการแชร์แบบเนทีฟของ WeChat, Weibo, QQ และ DingTalk ได้อย่างรวดเร็ว
? เวอร์ชัน WeChatQQWeibo SDK สามารถอัปเกรดได้ เมื่ออัปเกรดเวอร์ชันถัดไป Weibo จะมีการเปลี่ยนแปลงครั้งใหญ่
?362 บน 2020.1.21? La เปิดตัวเวอร์ชัน 1.2.0
อัปเดตปลั๊กอิน รองรับ Gradle
เวอร์ชันล่าสุด ใช้ Gradle + APT + ASM
เพื่อค้นหาคลาส Platform
โดยอัตโนมัติ ลงทะเบียนรหัสเริ่มต้นโดยอัตโนมัติ และมีในตัว การแยกวิเคราะห์ json
และการร้องขอ http
การกำหนดค่าเริ่มต้นนั้นง่ายกว่า
? 2019.6.13 รองรับการเข้าสู่ระบบสแกนรหัส WeChat
? เมื่อวันที่ 28 พฤษภาคม 2019 โปรเจ็กต์ได้รับอันดับที่ 329? จัดการวงจรชีวิตโดยอัตโนมัติ พารามิเตอร์การโทรกลับแบบรวม และเปิดตัวเวอร์ชันเสถียร 1.0.1 ❤️
? 2019.3.28 ใช้ gradle plugin
เพื่อจัดการการขึ้นต่อกันโดยอัตโนมัติ ออกแบบหมายเลขเวอร์ชันใหม่ เวอร์ชันเสถียร 0.1.1 ❤️
? 2018.12.27 ปลั๊กอิน gradle
เสร็จสมบูรณ์, แพลตฟอร์มแยก, การพึ่งพาอัตโนมัติ, ระดับใหม่?
? 2018.12.21 ครบ 225 แล้ว เริ่มเตรียมแยกแพลตฟอร์มไลบรารีต่างๆ เพื่อรองรับการเข้าถึงที่ยืดหยุ่น⛽️
?เมื่อวันที่ 26 กันยายน 2561 โครงการได้รับดาวดวงที่ 202 ขอบคุณเพื่อนร่วมงานใหม่ที่มาเสริม 2 ดาว?
? เมื่อวันที่ 7 มิถุนายน 2018 โครงการได้รับสโตนที่ 100? และอันสุดท้ายคืออันสุดท้ายที่ฉันขอจากเพื่อนร่วมงาน?
? 2018.5.12 แก้ไขปัญหาหน่วยความจำและขยายฟังก์ชันเป็นเวอร์ชันเสถียร 1.1.0 ❤️
? 2018.2.12 รองรับการแชร์ DingTalk?
? 2017.12.12 การปรับโครงสร้างโค้ดอย่างง่ายและการทดสอบเวอร์ชันเสถียร 1.0.0 ❤️
โอเพ่นซอร์ส: ไม่มีไข่อีสเตอร์, ไม่มีไข่อีสเตอร์, ไม่มีไข่อีสเตอร์;
ง่าย: คุณเพียงแค่ต้องใส่ใจกับการเข้าสู่ระบบ การแบ่งปันคลาสการจัดการ และออบเจ็กต์โครงสร้างข้อมูล และไม่จำเป็นต้องใส่ใจกับความแตกต่างระหว่างแพลตฟอร์ม
น้ำหนักเบา: ประกอบด้วย SDK
ของบริษัทอื่นและเฟรมเวิร์กอะซิงโครนัสธรรมดา (38k) คำขอเครือข่ายและการแยกวิเคราะห์ JSON
จะถูกแทรกจากภายนอก ลดการพึ่งพาซ้ำซ้อน และรับประกันความสามัคคีในระดับสูงกับโปรเจ็กต์โฮสต์
ครอบคลุม: การแชร์มินิโปรแกรม การคัดลอกลิงก์ การสแกนรหัส QR เพื่อเข้าสู่ระบบ การส่งเสริมการขนส่งแบบหลายรูปแบบ ฯลฯ
การออกแบบตามความต้องการ:
code
ในเครื่องเท่านั้น และเซิร์ฟเวอร์จะได้รับ token
?wxOnlyAuthCode
web
เพื่อความเข้ากันได้Intent
เพื่อปลุกการแชร์ เช่น การรองรับการแชร์วิดีโอในเครื่อง การแชร์ข้อความธรรมดา qq
ฯลฯtoken
อย่างต่อเนื่องเพื่อหลีกเลี่ยงการอนุญาตหลายครั้ง คุณสามารถเลือกระยะเวลาที่ถูกต้องในครั้งถัดไปที่โทเค็นได้รับอนุญาต สามารถรับข้อมูลได้โดยตรง อย่างไรก็ตาม หากผู้ใช้เปลี่ยนบัญชี WeChat เขาจะไม่สามารถสลับบัญชีได้ ควรพิจารณาเรื่องเวลาอย่างรอบคอบSocialSdk
; ขั้นตอนที่ 1 : เพิ่มเส้นทางการพึ่งพาปลั๊กอิน
โครงการ/build.gradle
buildscript {
repositories {
maven { url "https://dl.bintray.com/zfy/maven" }
}
dependencies {
// 请查看文初最新版本,这边可能忘记更新!!!
classpath 'com.zfy.social:social-sdk-plugin:1.2.0'
}
}
allprojects {
repositories {
maven { url "https://dl.bintray.com/zfy/maven" }
}
}
ขั้นตอนที่ 2 : พารามิเตอร์การกำหนดค่า
แอพ/build.gralde
เพื่อเหตุผลด้านความปลอดภัย ขอแนะนำให้กำหนดค่าใน local.properties
เพื่อหลีกเลี่ยงการส่งไปยังรีโมต
// 在顶部引用插件
apply plugin: 'socialsdk'
// android 配置模块
android {
...
}
// socialsdk 配置模块
socialsdk {
wx {
appId = '111xxx2222'
appSecret = '111xxx2222'
// 微信授权是否只返回 code, 用于服务端授权的场景
onlyAuthCode = false
}
qq {
appId = '111xxx2222'
appSecret = '111xxx2222'
}
wb {
appId = '111xxx2222'
url = '111xxx2222'
}
dd {
appId = '111xxx2222'
}
}
ข้างต้นเป็นการกำหนดค่าที่ง่ายที่สุด สำหรับพารามิเตอร์การกำหนดค่าเพิ่มเติม โปรดดูการกำหนดค่าเริ่มต้น:
socialsdk {
// 调试模式,默认 false, 可以在代码中开启
debug = true
// 分享:选择停留在微信时自动返回成功,默认返回失败
shareSuccessIfStay = true
// 登录:token 过期时间,单位小时,默认立即过期,有效期内可以不需要再次唤醒第三方 app,但是二次登录也没办法切换账号,这会引发问题,所以默认立即过期
tokenExpiresHours = 100
// 使用 gson 作为数据解析,默认 true,你如果不用 gson 就需要自己编写 JSONAdapter
useGson = true
// 使用 okHttp 发送请求,默认 true,你如果不用 okhttp 就需要自己编写 RequestAdapter
useOkHttp = true
// 配置 app 名称,默认使用 R.string.app_name
appName = "哈哈哈"
// 唤醒过程中的 loading 颜色
color = "#FF0000"
wx { }
qq { }
wb { }
dd { }
}
ขั้นตอนที่ 3 : การเริ่มต้น
SocialOptions options = new SocialOptions . Builder ( this )
// 调试模式,开启 log 输出
. debug ( true )
// 加载缩略图失败时,降级使用资源图
. failImgRes ( R . drawable . share_default_img )
// 添加分享拦截器,重新处理分享的数据
. addShareInterceptor (( context , obj ) -> {
obj . setSummary ( "被重新组装" + obj . getSummary ());
return obj ;
})
// 构建
. build ();
// 初始化
SocialSdk . init ( options );
ฟังก์ชั่นการเข้าสู่ระบบรองรับสามแพลตฟอร์ม ได้แก่ QQ, WeChat และ Weibo
// 3个平台
Target . LOGIN_QQ ; // QQ 登录
Target . LOGIN_WX ; // 微信 登录
Target . LOGIN_WX_SCAN ; // 微信扫码 登录
Target . LOGIN_WB ; // 微博 登录
การเข้าสู่ระบบจะส่งคืน LoginResult
ซึ่งส่วนใหญ่ประกอบด้วยสามส่วน ได้แก่ ประเภทการเข้าสู่ระบบ ข้อมูลผู้ใช้พื้นฐาน และข้อมูลโทเค็น
LoginResult {
// 状态,成功,失败,取消等
public int state ;
// 目标平台
public int target ;
// 发生错误时使用
public SocialError error ;
// 针对登录类型可强转为 WbUser,WxUser,QQUser 来获取更加丰富的信息
public SocialUser socialUser ;
// 本次登陆的 token 信息,openId, unionId,token,expires_in
public AccessToken accessToken ;
// 授权码,如果 onlyAuthCode 为 true, 将会返回它
public String wxAuthCode ;
// 扫码登录二维码文件路径
public String wxCodePath ;
}
คุณต้องตั้งค่าการโทรกลับเข้าสู่ระบบเมื่อเข้าสู่ระบบ:
new OnLoginStateListener () {
@ Override
public void onState ( Activity act , LoginResult result ) {
switch ( result . state ) {
case LoginResult . STATE_START :
// 登录开始
break ;
case LoginResult . STATE_COMPLETE :
// 登录完成
break ;
case LoginResult . STATE_ACTIVE :
// 透明 Activity 开启
break ;
case LoginResult . STATE_SUCCESS :
// 登录成功
break ;
case LoginResult . STATE_FAIL :
// 登录失败
result . error
break ;
case LoginResult . STATE_CANCEL :
// 登录取消
break ;
case LoginResult . STATE_WX_CODE_RECEIVE :
// 获取到微信登录二维码
break ;
case LoginResult . STATE_WX_CODE_SCANNED :
// 微信登录二维码被扫描
break ;
}
}
};
รับข้อมูลผู้ใช้เพิ่มเติม:
SocialUser socialUser = loginResult . socialUser ;
// 基本信息可以从 SocialUser 在获取到
String userNickName = socialUser . getUserNickName ();
// 获取 openId
String openId = socialUser . getOpenId ();
// 微信获取 unionId,其他平台仍旧返回 openId
String unionId = socialUser . getUnionId ();
// 获取 userId,微信返回 unionId, 其他平台返回 openId
String userId = socialUser . getUserId ();
// 强转为平台用户,可以拿到更多信息
int target = result . getTarget ();
switch ( target ) {
case Target . LOGIN_QQ :
QQUser qqUser = ( QQUser ) socialUser ;
break ;
case Target . LOGIN_WB :
WbUser wbUser = ( WbUser ) socialUser ;
break ;
case Target . LOGIN_WX :
WxUser wxUser = ( WxUser ) socialUser ;
break ;
}
เริ่มต้นการเข้าสู่ระบบ:
LoginManager . login ( mActivity , Target . LOGIN_QQ , listener );
เข้าสู่ระบบด้วยพารามิเตอร์ เช่น การสแกนรหัส QR ของ WeChat เพื่อเข้าสู่ระบบ:
LoginObj obj = new LoginObj ();
// 根据文档要求,以下数据应在服务端缓存获取
// 如果不设置,将会使用配置时设置的 secret
obj . setAppSecret ( "0a3cb00******ee3654f499171" );
obj . setNonceStr ( "3611cdc33b******a49ca45bdfab2d" );
obj . setTimestamp ( "15604******6904" );
obj . setSignature ( "b28f69426******18c8ba792caa4a0a1bcc" );
// 如果不设置,将会使用 SocialValues.WX_SCOPE
obj . setScope ( SocialValues . WX_SCOPE );
LoginManager . login ( mActivity , Target . LOGIN_WX_SCAN , obj , listener );
เกี่ยวกับอายุ token
คุณสามารถตั้งค่า tokenExpiresHours
ในระหว่างการเริ่มต้นเพื่อควบคุมโทเค็นการอนุญาต นอกจากนี้ยังมีวิธีการล้าง token
การอนุญาต
// 清除全部平台的 token
LoginManager . clearAllToken ( context );
// 清除指定平台的 token
LoginManager . clearToken ( context , Target . LOGIN_QQ );
สิ่งสำคัญ: โปรดตรวจสอบความสามารถในการสนับสนุนระหว่างแพลตฟอร์มและประเภทข้อมูลอย่างรอบคอบ
เมื่อ Weibo ใช้ openApi
เพื่อแชร์ อาจมีความล่าช้าเป็นเวลานาน ขอแนะนำให้เพิ่มการแสดงแถบความคืบหน้าในวงจรชีวิตเพื่อหลีกเลี่ยงไม่ให้ผู้ใช้รอเป็นเวลานานโดยไม่ตอบสนอง
สำหรับตรรกะทางธุรกิจและการออกแบบ SDK
ประเภทข้อมูลที่ใช้ร่วมกันแบ่งออกเป็น 7 ประเภท ซึ่งสามารถครอบคลุมสถานการณ์ทางธุรกิจส่วนใหญ่ ได้แก่:
开启 App 类型,打开渠道应用;
文字类型,纯文本分享;
图片类型(jpg, png, gif(要求能动));
App 推广类型;
网页链接类型;
音频分享类型;
视频分享类型;
เพื่อให้แน่ใจว่าแต่ละแพลตฟอร์มมีลักษณะปิดและเป็นหนึ่งเดียว หากแพลตฟอร์มไม่รองรับการแชร์บางประเภท เราจะใช้การแชร์ web
แทน ตัวอย่างเช่น WeChat ไม่รองรับการแชร์ app
และโหมดการแชร์ web
จะถูกนำมาใช้ นำไปใช้หลังการแชร์
// 支持的分享渠道
Target . SHARE_DD ; // 钉钉好友
Target . SHARE_QQ_FRIENDS ; // qq好友
Target . SHARE_QQ_ZONE ; // qq空间
Target . SHARE_WX_FRIENDS ; // 微信好友
Target . SHARE_WX_ZONE ; // 微信朋友圈
Target . SHARE_WX_FAVORITE ; // 微信收藏
Target . SHARE_WB ; // 新浪微博
Target . SHARE_SMS ; // 短信分享
Target . SHARE_EMAIL ; // 邮件分享
Target . SHARE_CLIPBOARD ; // 粘贴板分享
เมื่อทำการแชร์ เราต้องสร้างข้อมูลสำหรับการแชร์ก่อน ออบเจ็กต์ ShareObj
จัดเตรียมวิธีการคงที่ที่หลากหลายเพื่อสร้างออบเจ็กต์ที่สอดคล้องกับประเภทของการแชร์อย่างรวดเร็ว
// 测试用的路径
localImagePath = new File ( Environment . getExternalStorageDirectory (), "1.jpg" ). getAbsolutePath ();
localVideoPath = new File ( Environment . getExternalStorageDirectory (), "video.mp4" ). getAbsolutePath ();
localGifPath = new File ( Environment . getExternalStorageDirectory (), "3.gif" ). getAbsolutePath ();
netVideoPath = "http://7xtjec.com1.z0.glb.clouddn.com/export.mp4" ;
netImagePath = "http://7xtjec.com1.z0.glb.clouddn.com/token.png" ;
netMusicPath = "http://7xtjec.com1.z0.glb.clouddn.com/test_music.mp3" ;
netMusicPath = "http://mp3.haoduoge.com/test/2017-05-19/1495207225.mp3" ;
targetUrl = "http://bbs.csdn.net/topics/391545021" ;
// 打开渠道对应app
ShareObj shareMediaObj = ShareObj . buildOpenAppObj ();
// 分享文字
ShareObj textObj = ShareObj . buildTextObj ( "分享文字" , "summary" );
// 分享图片
ShareObj imageObj = ShareObj . buildImageObj ( "分享图片" , "summary" , localImagePath );
// 分享gif
ShareObj imageGifObj = ShareObj . buildImageObj ( "分享图片" , "summary" , localGifPath );
// 分享app
ShareObj appObj = ShareObj . buildAppObj ( "分享app" , "summary" , localImagePath , targetUrl );
// 分享web
ShareObj webObj = ShareObj . buildWebObj ( "分享web" , "summary" , localImagePath , targetUrl );
// 分享视频
ShareObj videoObj = ShareObj . buildVideoObj ( "分享视频" , "summary" , localImagePath , targetUrl , localVideoPath , 10 );
// 本地视频分享、部分平台支持
ShareObj videoLocalObj = ShareObj . buildVideoObj ( "分享本地视频" , "summary" , localImagePath , targetUrl , localVideoPath , 0 );
// 分享音乐
ShareObj musicObj = ShareObj . buildMusicObj ( "分享音乐" , "summary" , localImagePath , targetUrl , netMusicPath , 10 );
ใช้การสนับสนุนพารามิเตอร์เพิ่มเติมสำหรับพารามิเตอร์บางตัวที่ไม่สามารถรวมเป็นหนึ่งได้:
// 使 ShareObj 支持短信分享
webObj . setSmsParams ( "13611301719" , "说啥呢" );
// 使 ShareObj 支持粘贴板分享
webObj . setClipboardParams ( "复制的内容" );
// 使 ShareObj 支持邮件分享
webObj . setEMailParams ( "[email protected]" , "主题" , "内容" );
// 使 ShareObj 在微信平台优先使用小程序分享
webObj . setWxMiniParams ( "51299u9**q31" , SocialValues . WX_MINI_TYPE_RELEASE , "/page/path" );
ใช้ OnShareStateListener
เป็นการโทรกลับเพื่อแชร์การฟัง
new OnShareStateListener () {
@ Override
public void onState ( Activity act , ShareResult result ) {
switch ( result . state ) {
case LoginResult . STATE_START :
// 分享开始
break ;
case LoginResult . STATE_COMPLETE :
// 分享完成
break ;
case LoginResult . STATE_ACTIVE :
// 透明 Activity 开启
break ;
case ShareResult . STATE_SUCCESS :
// 分享成功
break ;
case ShareResult . STATE_FAIL :
SocialError e = result . error ;
// 分享失败
break ;
case ShareResult . STATE_CANCEL :
// 分享取消
break ;
}
}
};
// 唤醒分享
ShareManager . share ( mActivity , Target . SHARE_QQ_FRIENDS , imageObj , mOnShareListener );
เกี่ยวกับการเขียนออบเจ็กต์การแชร์ใหม่ จริงๆ แล้วให้โอกาสในการประมวลผล ShareObj
ที่ต้องแชร์ก่อนแชร์อย่างสม่ำเสมอ ซึ่งคล้ายกับลักษณะของฟังก์ชันการแชร์ เช่น สถานการณ์ต่อไปนี้:
app
ในรูปภาพก่อนที่จะแชร์url
ที่แชร์มีพารามิเตอร์สาธารณะ เช่น shareId
ฯลฯ และสถิติการเข้าถึงจะทำใน H5
ในการเขียนออบเจ็กต์ที่ใช้ร่วมกัน เราใช้ Interceptors เพื่อให้บรรลุเป้าหมายนี้ เมื่อเริ่มต้น SDK
แล้ว Interceptors หลายรายการจะถูกเรียกตามลำดับ
UI
คุณจะต้องดำเนินการในเธรดหลัก
SocialOptions options = new SocialOptions . Builder ( this )
// ... 其他初始化代码
// 添加分享拦截器
. addShareInterceptor (( context , target , obj ) -> {
obj . setSummary ( "描述加前缀" + obj . getSummary ());
return obj ;
})
. addShareInterceptor (( context , target , obj ) -> {
obj . setTargetUrl ( obj . getTargetUrl ()+ "?id=100" );
return obj ;
})
// 构建
. build ();
// 初始化
SocialSdk . init ( options );
เรามักจะพบกับข้อกำหนดเมื่อทำการแชร์ เช่น การคัดลอกไปยังเพสต์บอร์ด/การรองรับการแชร์ทาง SMS/การรองรับการแชร์อีเมล ฯลฯ SocialSdk
มีฟังก์ชันเหล่านี้ในตัว และจำเป็นต้องเพิ่มพารามิเตอร์เพิ่มเติมหลังจากสร้าง ShareObj
เพื่อใช้งาน
shareObj . setSmsParams ( "13611301719" , "说啥呢" );
shareObj . setEMailParams ( "[email protected]" , "主题" , "内容" );
shareObj . setClipboardParams ( "复制的内容" );
รองรับการแชร์แอปเพล็ต WeChat รวมถึงใช้รูปแบบของพารามิเตอร์เพิ่มเติม
shareObj . setWxMiniParams ( "51299u9**q31" , SocialValues . WX_MINI_TYPE_RELEASE , "/page/path" );
เพื่อที่จะรวมและแบ่งปันข้อยกเว้นที่ส่งคืนเมื่อเกิดความล้มเหลวได้ดีขึ้น ข้อยกเว้นทั้งหมดที่ส่งคืนจะมี code
ซึ่งสามารถค้นหาปัญหาและให้พร้อมท์ที่เป็นมิตรมากขึ้นตาม code
ที่แตกต่างกัน
int CODE_COMMON_ERROR = 101 ; // 通用错误,未归类
int CODE_NOT_INSTALL = 102 ; // 没有安装应用
int CODE_VERSION_LOW = 103 ; // 版本过低,不支持
int CODE_SHARE_BY_INTENT_FAIL = 105 ; // 使用 Intent 分享失败
int CODE_STORAGE_READ_ERROR = 106 ; // 没有读存储的权限,获取分享缩略图将会失败
int CODE_STORAGE_WRITE_ERROR = 107 ; // 没有写存储的权限,微博分享视频copy操作将会失败
int CODE_FILE_NOT_FOUND = 108 ; // 文件不存在
int CODE_SDK_ERROR = 109 ; // sdk 返回错误
int CODE_REQUEST_ERROR = 110 ; // 网络请求发生错误
int CODE_CANNOT_OPEN_ERROR = 111 ; // 无法启动 app
int CODE_PARSE_ERROR = 112 ; // 数据解析错误
int CODE_IMAGE_COMPRESS_ERROR = 113 ; // 图片压缩失败
int CODE_PARAM_ERROR = 114 ; // 参数错误
int CODE_SDK_INIT_ERROR = 115 ; // SocialSdk 初始化错误
int CODE_PREPARE_BG_ERROR = 116 ; // 执行 prepareOnBackground 时错误
int CODE_NOT_SUPPORT = 117 ; // 不支持
ตัวอย่างเช่น คุณสามารถทำได้:
listener = new OnShareStateListener () {
@ Override
public void onState ( Activity act , ShareResult result ) {
switch ( result . state ) {
case ShareResult . STATE_FAIL :
SocialError e = result . error ;
showMsg ( "分享失败 " + e . toString ());
// 如下因为没有存储权限导致失败,请求权限
if ( Build . VERSION . SDK_INT >= Build . VERSION_CODES . M ) {
if ( e . getCode () == SocialError . CODE_STORAGE_READ_ERROR ) {
requestPermissions ( new String []{ Manifest . permission . READ_EXTERNAL_STORAGE }, 100 );
} else if ( e . getCode () == SocialError . CODE_STORAGE_WRITE_ERROR ) {
requestPermissions ( new String []{ Manifest . permission . WRITE_EXTERNAL_STORAGE }, 100 );
}
}
break ;
}
}
};
public class HuaweiPlatform extends AbsPlatform {
// 工厂函数
public static class Factory implements PlatformFactory {
@ Override
public IPlatform create ( Context context , int target ) {
return new HuaweiPlatform ( context , null , null , target );
}
@ Override
public int getPlatformTarget () {
return PLATFORM_HUAWEI ;
}
@ Override
public boolean checkShareTarget ( int shareTarget ) {
return false ;
}
@ Override
public boolean checkLoginTarget ( int loginTarget ) {
return loginTarget == LOGIN_HUAWEI ;
}
}
public HuaweiPlatform ( Context context , String appId , String appName , int target ) {
super ( context , appId , appName , target );
}
}
สิ่งที่สำคัญที่สุดคือการเขียนฟังก์ชั่นโรงงานของแพลตฟอร์ม เฟรมเวิร์กจะค้นหาและลงทะเบียนในระบบโดยอัตโนมัติ
SocialSdk
มีการจัดการวงจรชีวิตโดยอัตโนมัติภายใน ทรัพยากรทั้งหมดจะถูกรีไซเคิลหลังจากการแชร์การเข้าสู่ระบบแต่ละครั้งเสร็จสิ้น ขอแนะนำให้ Activity
เริ่มต้นการแชร์การเข้าสู่ระบบใช้ LifecycleOwner
AppCompatActivity
ได้โดยตรง และวงจรชีวิตจะถูกผูกไว้ ภายในเพื่อหลีกเลี่ยงไม่ให้หน่วยความจำรั่ว
ถาม:
libs/open_sdk_r2973327_lite.jar
อัปเดตด้วย 2019.12วีแชท:
com.tencent.mm.opensdk:wechat-sdk-android-without-mta:5.5.8
อัปเดตด้วย 2020.1.22เวยป๋อ:
com.sina.weibo.sdk:core:4.3.7:openDefaultRelease@aar
ติงทอล์ค:
com.alibaba.android:ddsharesdk:1.1.0