集成一个以官网(微信,QQ,微博)为标准的登录分享功能

简介: 今天要分享的是一个老生常谈的一个功能,也是网上一搜一大片的技术点,没什么技术含量,就是整合一下,提供一下方便,相对于友盟,ShareSdk中夹杂着一些别的功能,此文封装的绝对纯净,除了官网所提供的,不夹杂任何的代码逻辑,登录就是登录,分享就是分享,实实在在的以官网为标准。

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是填自己申请的。


<activityandroid:name=".wxapi.WXEntryActivity"android:configChanges="keyboardHidden|orientation|screenSize"android:exported="true"android:theme="@android:style/Theme.Translucent.NoTitleBar"/><activityandroid:name="com.tencent.tauth.AuthActivity"android:launchMode="singleTask"android:noHistory="true"><intent-filter><actionandroid:name="android.intent.action.VIEW"/><categoryandroid:name="android.intent.category.DEFAULT"/><categoryandroid:name="android.intent.category.BROWSABLE"/><dataandroid:scheme="tencent1112002456"/></intent-filter></activity>


二、功能具体调用

具体的功能调用,大家可以直接参考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好友分享链接


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$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好友分享图片


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareImage(
this,
ShareUtils.QQ,
imagePath,
                ).setOnQqCallBackListener({
Log.e(TAG, "分享成功")
                }, {
Log.e(TAG, "分享失败")
                })


QQ空间分享链接


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareUrl(
this,
ShareUtils.QQ,
"我是测试分享标题",
"我是测试分享链接",
"https://www.vipandroid.cn/ming/page/open.html",
imagePath,
ShareUtils.SCENE                )


QQ空间分享图片


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareImage(
this,
ShareUtils.QQ,
imagePath,
ShareUtils.SCENE                ).setOnQqCallBackListener({
Log.e(TAG, "分享成功")
                }, {
Log.e(TAG, "分享失败")
                })


微博分享图片


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareImage(this, ShareUtils.WEIBO, imagePath)


微博分享链接


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareUrl(
this, ShareUtils.WEIBO,
"我是测试标题", "我是测试描述", "https://www.vipandroid.cn", imagePath                )


微信好友分享链接


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareUrl(
this,
ShareUtils.WEIXIN,
"我是测试标题",
"我是测试描述",
"https://www.vipandroid.cn",
imagePath                )


微信好友分享图片


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareImage(this, ShareUtils.WEIXIN, imagePath)


微信朋友圈分享链接


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareUrl(
this,
ShareUtils.WEIXIN,
"我是测试标题",
"我是测试描述",
"https://www.vipandroid.cn",
imagePath, ShareUtils.SCENE                )


微信朋友圈分享图片


//注意,图片地址需要自己生成,这里我使用的是简单的测试valabsoluteFile=Environment.getExternalStorageDirectory().absoluteFilevalimagePath="$absoluteFile/ic_launcher.png"ShareUtils.get().qwShareImage(this, ShareUtils.WEIXIN, imagePath, ShareUtils.SCENE)


三、其他注意事项


回调


overridefunonActivityResult(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 {
overridefunonComplete() {
                }
overridefunonError(p0: UiError?) {
                }
overridefunonCancel() {
                }
            })
        }
    }


WXEntryActivity


用于接收微信登录或分享后的状态回调,可以在这里做一些其他的操作。


classWXEntryActivity : Activity(), IWXAPIEventHandler {
privatevarmIWXAPI: IWXAPI?=nulloverridefunonCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
mIWXAPI=WXAPIFactory.createWXAPI(this, BuildConfig.WX_ID)
mIWXAPI!!.handleIntent(intent, this)
    }
overridefunonNewIntent(intent: Intent?) {
super.onNewIntent(intent)
setIntent(intent)
mIWXAPI!!.handleIntent(intent, this)
    }
overridefunonReq(resp: BaseReq?) {
    }
overridefunonResp(resp: BaseResp?) {
when (resp!!.errCode) {
BaseResp.ErrCode.ERR_OK-> {
if (resp.type==ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {
//分享,做一些其他操作finish()
                } elseif (resp.type==ConstantsAPI.COMMAND_SENDAUTH) { //登陆valcode= (respasSendAuth.Resp).codeToast.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一定要设置自己申请的,并且要和应用包名,签名信息保持一致的。

相关文章
|
3月前
|
存储 JavaScript 开发工具
uniapp-实现微信授权登录
uniapp-实现微信授权登录
740 0
|
3月前
|
存储 JSON JavaScript
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-1
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
67 0
|
3月前
|
小程序
内网环境中ruoyi若依实现微信小程序授权登录解决办法
内网环境中ruoyi若依实现微信小程序授权登录解决办法
181 0
|
2月前
|
前端开发 安全 Java
SpringBoot 实现登录验证码(附集成SpringSecurity)
SpringBoot 实现登录验证码(附集成SpringSecurity)
|
4月前
|
小程序 API 开发者
微信小程序授权登录流程以及应用到的API
微信小程序授权登录流程以及应用到的API
203 0
|
1月前
|
前端开发 JavaScript Java
springboot 集成easy-captcha实现图像验证码显示和登录
springboot 集成easy-captcha实现图像验证码显示和登录
143 0
|
2月前
|
小程序 JavaScript
微信小程序授权登录?
微信小程序授权登录?
|
3月前
|
JSON 前端开发 安全
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)-2
前后端分离项目知识汇总(微信扫码登录,手机验证码登录,JWT)
58 0
|
3月前
|
小程序 数据安全/隐私保护
微信小程序实现一个简单的登录功能
微信小程序实现一个简单的登录功能
|
3月前
|
NoSQL 前端开发 Java
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)
Sa-Token实现分布式登录鉴权(Redis集成 前后端分离)

热门文章

最新文章