2015-12-05 14 views
9

Utilizzo l'API Android di parse.com e ho aggiunto il supporto per l'accesso a Facebook/Twitter. Funziona beneDisconnettersi o cambiare account utilizzando Parse Autenticazione Twitter/Facebook

La parte difficile sembra essere disconnettere.

Se accedo al mio applicazione utilizzando Twitter:

ParseTwitterUtils.logIn(UserLoginActivity.this, twitterLoginCallback); 

oppure utilizzando Facebook:

ParseFacebookUtils.logInWithReadPermissionsInBackground(UserLoginActivity.this, null, facebookLoginCallback); 

sono richiamato in una finestra web per entrare le mie credenziali di Twitter e quindi consentire o negare accesso alla mia app. Una volta che lo consento, sono in grado di accedere con successo e ho accesso al mio nome di schermo. Tutto bene!

Quando provo ad accedere fuori della mia ParseUser, faccio ottenere disconnesso. Tuttavia, se faccio nuovamente clic sul pulsante di accesso di Facebook o Twitter, sono pre-autenticato come account precedente, non posso cambiare account.

ho provato:

  • Controllo Chrome e browser e non vengono registrati a Twitter.
  • Disconnessione del nativo Twitter/Facebook app

La mia logica login iniziato come semplice:

ParseUser.logOut(); 

Per Twitter ho provato

  • Disinstallare la mia domanda - questo non risolvere ma non è una soluzione ideale.
  • Non chiamare Parse.enableLocalDatastore(this); nel mio Application come suggerito qui: https://stackoverflow.com/a/26338326/494356
  • Scollegamento l'account Twitter come suggerito qui: https://stackoverflow.com/a/34052718/494356. Questo ha anche il cattivo effetto collaterale della creazione di un nuovo ParseUser ogni volta (ma ancora per lo stesso account Twitter)
  • Ho provato a cambiare i permessi da 'Sola lettura' a 'Lettura e scrittura' come suggerito qui https://stackoverflow.com/a/27714159/494356. (Perchè questo avrebbe avuto importanza in realtà non ha senso per me comunque)
  • Ho provato a regolare l'authtoken a null ParseTwitterUtils.getTwitter().setAuthToken(null); ParseTwitterUtils.getTwitter().setAuthTokenSecret(null);

Per Facebook ho cercato

  • Disinstallare la mia domanda - Questo fa non risolvere il problema.
  • Utilizzo delle funzioni di Facebook SDK Logout:

    AccessToken.setCurrentAccessToken(null);

    Profile.setCurrentProfile(null);

    LoginManager.getInstance().logOut();

  • Ci deve essere utilizzato un Session.closeAndClearTokenInformation() come suggerito here. Ma Facebook ha Deprecated the Session class e non è più nell'SDK.

  • Scollegamento dell'account Facebook come suggerito here. Ancora una volta questo causa ParseUsers duplicati e sono ancora in grado di accedere utilizzando le credenziali salvate.

Apprezzerei molto qualsiasi risposta o suggerimento. Anche se puoi rispondere solo per Twitter o Facebook, ma non per entrambi, mi piacerebbe comunque sentirlo.

+1

Sono curioso ora dal momento che hai menzionato la mia risposta sull'altra domanda simile su quale sia il tuo caso d'uso per la tua applicazione? Che comportamento vuoi avere? Vuoi che l'utente di analisi rimanga sempre lo stesso e che l'utente usi più account Twitter per ottenere lo stesso utente di analisi? È solo per scopi di test? Fondamentalmente ho difficoltà a capire che tipo di applicazione vorrebbe che il loro utente dovesse eseguire le azioni che stai descrivendo. – craigts

+0

@craigts Il mio caso d'uso è questo: voglio accedere con il mio account Twitter per usare l'app. Il mio amico arriva e vuole provarlo. Esco dalla mia app e il mio amico può accedere utilizzando il proprio account Twitter. Quando il mio amico si disconnette, se uno di noi accede nuovamente, otteniamo il nostro account originale. – Khalos

+1

l'immersione nei documenti sembra definitivamente non supporta questo scenario. Penso che le uniche soluzioni specifiche a questo problema siano: 1) bug Parse per implementare questo caso d'uso, 2) modificare il codice Parse da soli, o 3) gestire manualmente l'autenticazione di Twitter e Facebook. Un suggerimento che eviti questo problema potrebbe essere quello di provare e configurare la tua app in modo che abbia più senso per l''amico' nel tuo scenario scaricare e provare l'app stessa. Forse offrire qualche sorta di incentivo sia per l'utente e il loro amico. – craigts

risposta

0

Nella nostra app la procedura di accesso/disconnessione funziona correttamente per Facebook, E-Mail e persino un proprio login google. Posso dirti le differenze che vedo al primo sguardo e forse una di queste fa il trucco per te.

Prima di tutto non lavoriamo con l'istanza ParseUser direttamente nel nostro codice, ma abbiamo una classe MyUser che si estende ParseUser. In secondo luogo, la logica di accesso è incapsulata in un servizio in background e non viene richiamata direttamente nella nostra attività. Questo probabilmente non risolverà il problema. Tuttavia, nel servizio in background memorizziamo nella cache anche l'istanza , recuperarla se ne abbiamo bisogno e utilizzare tale istanza per disconnettere l'utente (MyUser.logOut()). Ed è impostato su null dopo il logout.

Ultimo ma non meno importante: state eseguendo le ultime versioni del Parse SDK?

+0

Ho anche una classe che estende 'ParseUser'. Chiamare 'logOutInBackground()' dovrebbe essere lo stesso indipendentemente dal fatto che sia chiamato in un'attività o servizio, ma farò un tentativo. Sto usando l'ultima versione di Parse SDK (1.11.0). – Khalos

Problemi correlati