我看过很多项目,这些项目显示了如何在MVP中实现登录,但是找不到与Google/Facebook登录有关的任何内容。

如果登录流程与Android组件的生命周期紧密相关,我们该怎么办?我看到了MVP的主要好处是,我们在Context之上构建了一个抽象,但是当我们需要遵循这种抽象时,这种抽象显得太复杂了,例如,Facebook登录流程:您需要使用FacebookCallback注册CallbackManager,调用logInWithReadPermissions()(通过Activity/fragment ),将onActivityResult()委托(delegate)给callbackManager,这将触发FacebookCallback的方法。

我想到的是创建类似

interface AuthInteractor {
    void doFacebookLogin();
    void doGoogleLogin();
}

其实现将了解Context并初始化GoogleApiClient。它将被注入(inject)到Presenter中,但是所有这些回调(特别是在Facebook的SDK中)将变得太复杂了。在这种情况下省略MVP更好吗?

最佳答案

我猜您是在问这个问题,因为您试图将两个“想法”合并为一个想法:

  • Activity/fragment 是MVP View
  • 第三方SDK依赖于Activity(或至少是Context),以便访问对您的应用程序可用的平台资源

  • 大约两年前,当我研究Android中的MVP实现时,我偶然发现了类似的问题,得出的结论是,解决所有此类问题的唯一方法是放弃Activity/Fragment是MVP View 的想法。

    我在这篇文章中发布了对此问题的详细讨论:Why Activities in Android are not UI Elements

    还有一个关于如何在Android中实现更好的MVP的教程:MVP and MVC in Android

    关于android - 如何通过第三方SDK遵循MVP架构?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36102979/

    10-11 15:06