Hello,各位老铁,今天要分享的是一个老生常谈的一个功能,也是网上一搜一大片的技术点,没什么技术含量,就是整合一下,提供一下方便,相对于友盟,ShareSdk中夹杂着一些别的功能,此文封装的绝对纯净,除了官网所提供的,不夹杂任何的代码逻辑,登录就是登录,分享就是分享,实实在在的以官网为标准。
目前已经上传到了GitHub,地址是:
https://github.com/AbnerMing888/AndroidShare

大家可以下载依赖使用,也可以maven远程使用。由于特别简单,本文概述如下:
1、使用步骤
2、功能具体调用
3、其他注意事项
4、总结
第一步,根项目下build.gradle
- repositories {
- ……
- maven { url "https://gitee.com/AbnerAndroid/android-maven/raw/master" }
- }
第二步,在需要的module下build.gradle
implementation 'com.vip:share:1.0.0'
第三步,初始化,传自己申请的微信,QQ,微博信息
- ShareUtils.get().initShare(
- this,
- BuildConfig.WX_ID,
- BuildConfig.QQ_ID,
- BuildConfig.WB_KEY
- )
第四步,清单文件注册,WXEntryActivity需要在wxapi包下创建,一定要按照标准,可直接复制Demo中的,tencent1112002456是填自己申请的。
- android:name=".wxapi.WXEntryActivity"
- android:configChanges="keyboardHidden|orientation|screenSize"
- android:exported="true"
- android:theme="@android:style/Theme.Translucent.NoTitleBar" />
-
- android:name="com.tencent.tauth.AuthActivity"
- android:launchMode="singleTask"
- android:noHistory="true">
-
-
"android.intent.action.VIEW" /> -
-
-
"android.intent.category.DEFAULT" /> -
"android.intent.category.BROWSABLE" /> -
-
- <data android:scheme="tencent1112002456" />
-
-
二、功能具体调用
具体的功能调用,大家可以直接参考Demo中的MainActivity,或参照下面。
QQ登录
- ShareUtils.get()
- .login(this, ShareUtils.QQ)
- .setOnQqCallBackListener({
- //登录成功
- Toast.makeText(this, it.toString(), Toast.LENGTH_LONG).show()
- }, {
- //登录失败
- })
微信登录,回调在WXEntryActivity类中
ShareUtils.get().login(this, ShareUtils.WEIXIN)
微博登录
- ShareUtils.get().login(this, ShareUtils.WEIBO)
- .setOnWbCallBackListener({
- //成功
- Toast.makeText(this, "微博登录成功", Toast.LENGTH_LONG).show()
- }, {
- //失败
- })
QQ好友分享链接
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareUrl(
- this,
- ShareUtils.QQ,
- "我是测试分享标题",
- "我是测试分享链接",
- "https://www.vipandroid.cn/ming/page/open.html",
- imagePath,
- ).setOnQqCallBackListener({
- Log.e(TAG, "分享成功")
- }, {
- Log.e(TAG, "分享失败")
- })
QQ好友分享图片
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareImage(
- this,
- ShareUtils.QQ,
- imagePath,
- ).setOnQqCallBackListener({
- Log.e(TAG, "分享成功")
- }, {
- Log.e(TAG, "分享失败")
- })
QQ空间分享链接
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareUrl(
- this,
- ShareUtils.QQ,
- "我是测试分享标题",
- "我是测试分享链接",
- "https://www.vipandroid.cn/ming/page/open.html",
- imagePath,
- ShareUtils.SCENE
- )
QQ空间分享图片
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareImage(
- this,
- ShareUtils.QQ,
- imagePath,
- ShareUtils.SCENE
- ).setOnQqCallBackListener({
- Log.e(TAG, "分享成功")
- }, {
- Log.e(TAG, "分享失败")
- })
微博分享图片
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareImage(this, ShareUtils.WEIBO, imagePath)
微博分享链接
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareUrl(
- this, ShareUtils.WEIBO,
- "我是测试标题", "我是测试描述", "https://www.vipandroid.cn", imagePath
- )
微信好友分享链接
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareUrl(
- this,
- ShareUtils.WEIXIN,
- "我是测试标题",
- "我是测试描述",
- "https://www.vipandroid.cn",
- imagePath
- )
微信好友分享图片
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareImage(this, ShareUtils.WEIXIN, imagePath)
微信朋友圈分享链接
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareUrl(
- this,
- ShareUtils.WEIXIN,
- "我是测试标题",
- "我是测试描述",
- "https://www.vipandroid.cn",
- imagePath, ShareUtils.SCENE
- )
微信朋友圈分享图片
- //注意,图片地址需要自己生成,这里我使用的是简单的测试
- val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
- val imagePath = "$absoluteFile/ic_launcher.png"
- ShareUtils.get().qwShareImage(this, ShareUtils.WEIXIN, imagePath, ShareUtils.SCENE)
三、其他注意事项
回调
- override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
- super.onActivityResult(requestCode, resultCode, data)
- if (data != null) {
- //QQ回调
- ShareUtils.get().onQqActivityResult(requestCode, resultCode, data)
- //微博回调
- ShareUtils.get().onWbShareActivityResult(data, object : WbShareCallback {
- override fun onComplete() {
-
-
- }
-
-
- override fun onError(p0: UiError?) {
- }
-
-
- override fun onCancel() {
-
-
- }
-
-
- })
- }
-
-
- }
WXEntryActivity
用于接收微信登录或分享后的状态回调,可以在这里做一些其他的操作。
- class WXEntryActivity : Activity(), IWXAPIEventHandler {
-
-
- private var mIWXAPI: IWXAPI? = null
-
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
- mIWXAPI = WXAPIFactory.createWXAPI(this, BuildConfig.WX_ID)
- mIWXAPI!!.handleIntent(intent, this)
- }
-
-
- override fun onNewIntent(intent: Intent?) {
- super.onNewIntent(intent)
- setIntent(intent)
- mIWXAPI!!.handleIntent(intent, this)
- }
-
-
- override fun onReq(resp: BaseReq?) {
-
-
- }
-
-
- override fun onResp(resp: BaseResp?) {
- when (resp!!.errCode) {
- BaseResp.ErrCode.ERR_OK -> {
- if (resp.type == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {
- //分享,做一些其他操作
-
-
- finish()
- } else if (resp.type == ConstantsAPI.COMMAND_SENDAUTH) { //登陆
- val code = (resp as SendAuth.Resp).code
- Toast.makeText(this, "微信登录成功", Toast.LENGTH_LONG).show()
-
-
- //根据code,和服务端进行绑定,获取信息后执行后续操作
-
-
- finish()
- }
- }
- else -> {
- finish()
- }
- }
- }
-
-
- }
混淆策略
- -keep class com.tencent.mm.opensdk.** {*;}
-
- -keep class com.tencent.wxop.** {*;}
-
- -keep class com.tencent.mm.sdk.** {*;}
-
- -keep class * extends android.app.Dialog
四、总结
关于文中的分享图片地址,大家记得改为自己要分享的图片地址,QQ的ID,微信的ID,微博的KEY一定要设置自己申请的,并且要和应用包名,签名信息保持一致的。
-
相关阅读:
Python和Java代码实现:黄金分割法求解一维最优化问题
javaWEB如何实现一个电影票预定购票系统javaee电影选票选座平台
vscode配置opencv/qt配置opencv)
【juc】countdownlatch实现并发网络请求
前端面试宝典React篇03 如何避免生命周期中的坑?
ms sql 常用基础函数
估值一亿的AI核心代码
小心你的字典和样板代码
leetcode 1642. Furthest Building You Can Reach(能到达的最远的建筑)
冷知识:SSD或U盘或FLASH闪存要温度高通电使用,温度低断电保存,数据才能更久不丢失!
-
原文地址:https://blog.csdn.net/ming_147/article/details/128103307