1.全局弹窗 google、facebook 登录实现

由于google,facebook登录成功或者失败的回调需要有Activity来承载(登录sdk要求) 。
实现全局Dialog登录弹窗的方案采用:

一个透明TransportActivity + 一个底部弹出FragmentDialog组成

由于 TransportActivity与FragmentDialog不在同一个module中,为了更好的解耦引入ARouter

interface TouristDelegate : IProvider {
    // 传递参数
    fun setBundle(bundle: Bundle)
    //显示dialog
    fun show(tag: String, context: FragmentManager)
    //dimiss 回调
    fun finishCallBack(callBack: CallBack)
}

定义登录ui承载的FragmentDialog对外提供服务,类图如下:
在这里插入图片描述

接口A转处理类B的内部接口IB

基于以上方案可以实现TransportActivity(透明Activity)与 承载登录Ui的DialogFragment解耦。

方案二:

reView Google与faceBook sdk 发现并非必须提供一个Activity来承载登录成功的回调接口,Fragment也可以。
这样就可以去掉,ARouter与对外提供的服务接口、 TransportActivity(透明Activity)直接全局调用
承载登录Ui的DialogFragment来进行登录授权

遇到问题:

1.修改完module生成aar,发布到Maven 仓库后。aar包中的依赖无法引用到

解决:module中的依赖需要生成pom.xml 才可以被maven识别。自行创建生成Pom的Task脚本
引用地址:https://github.com/chrisbanes/gradle-mvn-push

2.第一个问题的缓存导致无法更新本地新上传到maven仓库的Aar包。两个缓存位置分别 D:\normalsoft\java\jdk1.8.0_181\caches, C:\Users\Administrator.gradle\caches中

引用地址:https://blog.csdn.net/qq_36497605/article/details/90295200

相关代码:

class TransportActivity : BaseActivity() {
    private var mDialogFragment: Fragment? = null
    lateinit var mBinding: ComponentActivityTransportBinding
    override fun initLayout() {
        super.initLayout()
        mActivityParent.setBackgroundColor(Color.TRANSPARENT)
        mBinding = ComponentActivityTransportBinding.inflate(layoutInflater)
        contentView = mBinding.root
        mDialogFragment =
            ARouter.getInstance().build(PathConfig.BINDSHEET_FRAGMENT).navigation() as Fragment
        mDialogFragment?.let {
            if (it is TouristDelegate) {
                it.finishCallBack(CallBack {
                    finish()
                })
                it.setBundle(bundle)
                it.show(it::class.java.simpleName, supportFragmentManager)
            }
        } ?: Logger.e("mDialogFragment is null, please check fragment")
    }

    override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) {
        super.onActivityResult(requestCode, resultCode, data)
        if (ConstantPool.isOversean) {
            mDialogFragment?.onActivityResult(requestCode, resultCode, data)
                ?: Logger.e("mDialogFragment is Null")
        }
    }
}

总结:通过以上验证了。透明Activity与Dialog交互。通过扩展Arouter provider接口 对两个类解耦。正确的通过 Module生成aar 上传Maven仓库。

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐