2016-03-19 14 views
6

Ho visto molti progetti che mostrano come implementare l'accesso in MVP, ma non riesco a trovare nulla relativo al login Google/Facebook.Come faccio a seguire l'architettura MVP con SDK di terze parti?

Che cosa dovremmo fare nel caso in cui il flusso di login è fortemente legato al ciclo di vita dei componenti Android? Vedo il vantaggio principale di MVP in quanto costruiamo un'astrazione sopra Context, ma questa astrazione apparirà troppo complessa quando dovremo seguire, per esempio, il flusso di login di Facebook: devi registrare FacebookCallback con CallbackManager, chiamare logInWithReadPermissions() (passando Attività/Frammento di esso), delegare onActivityResult() a callbackManager e questo attiverà i metodi di FacebookCallback.

Quello che ho in mente è quello di creare qualcosa di simile

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

cui attuazione sapere Contesto e inizializzare GoogleApiClient. Verrà iniettato in Presenter, ma con tutte queste chiamate (specialmente nell'SDK di Facebook) le cose diventeranno troppo complicate. Non è meglio omettere l'MVP in questi casi?

+0

Non è così sicuro della tua domanda, ma io non sono d'accordo con l'interfaccia, IMHO vorrei creare una classe FacebookLogin e GoogleLogin che implementa la stessa interfaccia e astratta la particolarità di ogni flusso di login. – jonathanrz

+0

@jonathanrz sì, ho fatto lo stesso nei miei progetti precedenti e ho intenzione di riutilizzare questo codice, due manager possono essere membri di AuthInteractorImpl. Ma davvero non mi piace tale architettura e scrivere meglio questo senza MVP – Yaroslav

+0

poiché il flusso di autenticazione dovrebbe rimanere nel controller, non vedo perché questo rompa il pattern MVP. – jonathanrz

risposta

2

immagino che stai chiedendo questa domanda, perché si sta cercando di unire due "idee" a uno solo nella tua testa:

  1. Attività/Frammento sono viste MVP
  2. di terze parti dipendono SDK sulla attività (o, almeno, Context) al fine di ottenere l'accesso alle risorse della piattaforma disponibili per l'applicazione

sono incappato in problemi simili a circa due anni fa, quando ho ricercato le implementazioni MVP in Android, e sono arrivato a una conclusione che l'unico modo per risolvere tutto issu Questo tipo di approccio è quello di abbandonare l'idea di Activity/Fragment come viste MVP.

ho postato una discussione dettagliata di questo problema in questo post: Why Activities in Android are not UI Elements

e c'è anche un tutorial su come implementare un MVP meglio in Android: MVP and MVC in Android