AndroidShare
Introduction: Android 官网(微信,QQ,微博)集成,包含登录和分享。
Tags:
AndroidShare 是通过官方(微信,QQ,微博)提供的依赖进行二次封装的一个库,封装之后,登录和分享试用起来就十分的简单。
Demo 效果预览
apk 下载【使用 APK 等一定阅读问题须知第 3 条】

效果

问题须知【一定要阅读】
1、Demo 里的微信,QQ,微博的 Key 或者 Id,都是用的测试的,大家在用的时候,务必换成自己申请的。
2、Demo 代码下载后,是不能实现登录分享的,因为需要签名,毕竟牵扯到保密,签名文件并没有提交,大家如果测试,可以更换成自己的签名文件即可,查看效果,扫描二维码下载即可。
3、大家下好 apk,如果图片报错,需要大家自己把 Demo 中 mipmap 下的 ic_launcher.png 复制到手机 sd 卡根路径下即可,仅做测试用,实际大家还是按照需求而定。
具体调用
第一步,根项目下 build.gradle
repositories {
……
maven { url "https://gitee.com/AbnerAndroid/almighty/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 是填自己申请的。
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<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="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 好友分享链接
//注意,图片地址需要自己生成,这里我使用的是简单的测试
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()
}
}
}
}
欢迎关注作者
微信搜索【Android 干货铺】,或扫描下面二维码关注,查阅更多技术文章!

License
Copyright (C) AbnerMing, AndroidShare Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
