【发布时间】:2023-04-01 21:13:02
【问题描述】:
我看过很多展示如何在 MVP 中实现登录的项目,但找不到与 Google/Facebook 登录相关的任何内容。
登录流程与Android组件生命周期强绑定的情况下怎么办?我看到 MVP 的主要好处在于我们在 Context 之上构建了一个抽象,但是当我们需要遵循时,这个抽象会显得过于复杂,例如 Facebook 登录流程:你需要注册 FacebookCallback 和 CallbackManager,调用logInWithReadPermissions()(将活动/片段传递给它),将onActivityResult() 委托给callbackManager,这将触发FacebookCallback 的方法。
我的想法是创建类似的东西
interface AuthInteractor {
void doFacebookLogin();
void doGoogleLogin();
}
谁的实现将知道上下文并初始化GoogleApiClient。它将被注入 Presenter,但是所有这些回调(尤其是在 Facebook 的 SDK 中)会变得过于复杂。在这种情况下省略 MVP 不是更好吗?
【问题讨论】:
-
不太确定你的问题,但我不同意接口,恕我直言,我会创建一个实现相同接口并抽象每个登录流程的特殊性的 FacebookLogin 和 GoogleLogin 类。
-
@jonathanrz 是的,我在以前的项目中也是这样做的,我将重用这段代码,两个经理可以是 AuthInteractorImpl 的成员。但我真的不喜欢这样的架构,最好在没有 MVP 的情况下写这个
-
由于身份验证流程应该留在控制器中,我不明白为什么它会破坏 MVP 模式。
-
@jonathanrz 如果演示者不是 Activity - 它无权访问 Context,但我需要它在流程中进行多次调用。
-
Android中上下文的依赖是个大问题。为了避免这种情况,我通常会保留对我的 Application 类的静态引用,这样我就可以在代码中的任何地方获取上下文。由于您的应用程序对象将离开您的应用程序的完整生命周期,因此您不必担心静态引用会泄漏内存