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一定要设置自己申请的,并且要和应用包名,签名信息保持一致的。