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


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

    目前已经上传到了GitHub,地址是:

    https://github.com/AbnerMing888/AndroidShare

    大家可以下载依赖使用,也可以maven远程使用。由于特别简单,本文概述如下:

    1、使用步骤

    2、功能具体调用

    3、其他注意事项

    4、总结

    一、使用步骤

    第一步,根项目下build.gradle

    1. repositories {
    2. ……
    3. maven { url "https://gitee.com/AbnerAndroid/android-maven/raw/master" }
    4. }

    第二步,在需要的module下build.gradle

     implementation 'com.vip:share:1.0.0'

    第三步,初始化,传自己申请的微信,QQ,微博信息

    1. ShareUtils.get().initShare(
    2. this,
    3. BuildConfig.WX_ID,
    4. BuildConfig.QQ_ID,
    5. BuildConfig.WB_KEY
    6. )

    第四步,清单文件注册,WXEntryActivity需要在wxapi包下创建,一定要按照标准,可直接复制Demo中的,tencent1112002456是填自己申请的。

    1. android:name=".wxapi.WXEntryActivity"
    2. android:configChanges="keyboardHidden|orientation|screenSize"
    3. android:exported="true"
    4. android:theme="@android:style/Theme.Translucent.NoTitleBar" />
    5. android:name="com.tencent.tauth.AuthActivity"
    6. android:launchMode="singleTask"
    7. android:noHistory="true">
    8. "android.intent.action.VIEW" />
    9. "android.intent.category.DEFAULT" />
    10. "android.intent.category.BROWSABLE" />
    11. <data android:scheme="tencent1112002456" />

    二、功能具体调用

    具体的功能调用,大家可以直接参考Demo中的MainActivity,或参照下面。

    QQ登录

    1. ShareUtils.get()
    2. .login(this, ShareUtils.QQ)
    3. .setOnQqCallBackListener({
    4. //登录成功
    5. Toast.makeText(this, it.toString(), Toast.LENGTH_LONG).show()
    6. }, {
    7. //登录失败
    8. })

    微信登录,回调在WXEntryActivity类中

    ShareUtils.get().login(this, ShareUtils.WEIXIN)

    微博登录

    1. ShareUtils.get().login(this, ShareUtils.WEIBO)
    2. .setOnWbCallBackListener({
    3. //成功
    4. Toast.makeText(this, "微博登录成功", Toast.LENGTH_LONG).show()
    5. }, {
    6. //失败
    7. })

    QQ好友分享链接

    1. //注意,图片地址需要自己生成,这里我使用的是简单的测试
    2. val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
    3. val imagePath = "$absoluteFile/ic_launcher.png"
    4. ShareUtils.get().qwShareUrl(
    5. this,
    6. ShareUtils.QQ,
    7. "我是测试分享标题",
    8. "我是测试分享链接",
    9. "https://www.vipandroid.cn/ming/page/open.html",
    10. imagePath,
    11. ).setOnQqCallBackListener({
    12. Log.e(TAG, "分享成功")
    13. }, {
    14. Log.e(TAG, "分享失败")
    15. })

    QQ好友分享图片

    1. //注意,图片地址需要自己生成,这里我使用的是简单的测试
    2. val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
    3. val imagePath = "$absoluteFile/ic_launcher.png"
    4. ShareUtils.get().qwShareImage(
    5. this,
    6. ShareUtils.QQ,
    7. imagePath,
    8. ).setOnQqCallBackListener({
    9. Log.e(TAG, "分享成功")
    10. }, {
    11. Log.e(TAG, "分享失败")
    12. })

    QQ空间分享链接

    1. //注意,图片地址需要自己生成,这里我使用的是简单的测试
    2. val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
    3. val imagePath = "$absoluteFile/ic_launcher.png"
    4. ShareUtils.get().qwShareUrl(
    5. this,
    6. ShareUtils.QQ,
    7. "我是测试分享标题",
    8. "我是测试分享链接",
    9. "https://www.vipandroid.cn/ming/page/open.html",
    10. imagePath,
    11. ShareUtils.SCENE
    12. )

    QQ空间分享图片

    1. //注意,图片地址需要自己生成,这里我使用的是简单的测试
    2. val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
    3. val imagePath = "$absoluteFile/ic_launcher.png"
    4. ShareUtils.get().qwShareImage(
    5. this,
    6. ShareUtils.QQ,
    7. imagePath,
    8. ShareUtils.SCENE
    9. ).setOnQqCallBackListener({
    10. Log.e(TAG, "分享成功")
    11. }, {
    12. Log.e(TAG, "分享失败")
    13. })

    微博分享图片

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

    微博分享链接

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

    微信好友分享链接

    1. //注意,图片地址需要自己生成,这里我使用的是简单的测试
    2. val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
    3. val imagePath = "$absoluteFile/ic_launcher.png"
    4. ShareUtils.get().qwShareUrl(
    5. this,
    6. ShareUtils.WEIXIN,
    7. "我是测试标题",
    8. "我是测试描述",
    9. "https://www.vipandroid.cn",
    10. imagePath
    11. )

    微信好友分享图片

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

    微信朋友圈分享链接

    1. //注意,图片地址需要自己生成,这里我使用的是简单的测试
    2. val absoluteFile = Environment.getExternalStorageDirectory().absoluteFile
    3. val imagePath = "$absoluteFile/ic_launcher.png"
    4. ShareUtils.get().qwShareUrl(
    5. this,
    6. ShareUtils.WEIXIN,
    7. "我是测试标题",
    8. "我是测试描述",
    9. "https://www.vipandroid.cn",
    10. imagePath, ShareUtils.SCENE
    11. )

    微信朋友圈分享图片

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

    三、其他注意事项

    回调

    1. override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
    2. super.onActivityResult(requestCode, resultCode, data)
    3. if (data != null) {
    4. //QQ回调
    5. ShareUtils.get().onQqActivityResult(requestCode, resultCode, data)
    6. //微博回调
    7. ShareUtils.get().onWbShareActivityResult(data, object : WbShareCallback {
    8. override fun onComplete() {
    9. }
    10. override fun onError(p0: UiError?) {
    11. }
    12. override fun onCancel() {
    13. }
    14. })
    15. }
    16. }

    WXEntryActivity

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

    1. class WXEntryActivity : Activity(), IWXAPIEventHandler {
    2. private var mIWXAPI: IWXAPI? = null
    3. override fun onCreate(savedInstanceState: Bundle?) {
    4. super.onCreate(savedInstanceState)
    5. mIWXAPI = WXAPIFactory.createWXAPI(this, BuildConfig.WX_ID)
    6. mIWXAPI!!.handleIntent(intent, this)
    7. }
    8. override fun onNewIntent(intent: Intent?) {
    9. super.onNewIntent(intent)
    10. setIntent(intent)
    11. mIWXAPI!!.handleIntent(intent, this)
    12. }
    13. override fun onReq(resp: BaseReq?) {
    14. }
    15. override fun onResp(resp: BaseResp?) {
    16. when (resp!!.errCode) {
    17. BaseResp.ErrCode.ERR_OK -> {
    18. if (resp.type == ConstantsAPI.COMMAND_SENDMESSAGE_TO_WX) {
    19. //分享,做一些其他操作
    20. finish()
    21. } else if (resp.type == ConstantsAPI.COMMAND_SENDAUTH) { //登陆
    22. val code = (resp as SendAuth.Resp).code
    23. Toast.makeText(this, "微信登录成功", Toast.LENGTH_LONG).show()
    24. //根据code,和服务端进行绑定,获取信息后执行后续操作
    25. finish()
    26. }
    27. }
    28. else -> {
    29. finish()
    30. }
    31. }
    32. }
    33. }

    混淆策略

    1. -keep class com.tencent.mm.opensdk.** {*;}
    2. -keep class com.tencent.wxop.** {*;}
    3. -keep class com.tencent.mm.sdk.** {*;}
    4. -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