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

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

作者: 小城哇哇 | 来源:发表于2022-11-30 21:32 被阅读0次

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

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

    github.com/AbnerMing88…

    image.png

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

    1、使用步骤

    2、功能具体调用

    3、其他注意事项

    4、总结

    一、使用步骤

    第一步,根项目下build.gradle

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

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

     implementation 'com.abner: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()
                }
            }
        }
    
    
    }
    
    

    混淆策略

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

    本文转自 [https://juejin.cn/post/7170688130175991838],如有侵权,请联系删除。

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/kzisfdtx.html