2015-11-18 5 views
7

Stiamo utilizzando:.l'accesso a questa applicazione ancora una volta di riconnettersi con Facebook - il codice di errore 190

Parse - 1.8.3 FBSDK * - 4.6.0 ParseUI - 1.1.6 ParseFacebookUtilsV4 - 1.8.3 IOS Target - 9.0

Ecco il nostro problema. Un utente è registrato nella multa dell'app. Entrano in Facebook.com-> Account-> Impostazioni e rimuovono l'autorizzazione dall'app (rimuovila completamente).

Quando l'utente avvia nuovamente la nostra app, viene accolta con una finestra di dialogo da FBSDK che dice "Effettuare nuovamente il login a questa app per ricollegarsi a Facebook" (le opzioni sono OK e Annulla).

Ho cercato su google/SO questo e ho visto altri con questo problema, ma nel loro caso è leggermente diverso (e forse funzionale). Questo perché, quando fai clic su "OK" in quella finestra di dialogo, non fa nulla. Sembra che cliccando ok si supponga di fare un flusso di login (che sarebbe stellare), ma ancora una volta - non fa nulla.

ho attinto le notifiche trasmesse dal FBSDK e posso vedere che ricevo una notifica per:

com.facebook.sdk.FBSDKAccessTokenData.FBSDKAccessTokenDidChangeNotification

a seguito di un codice di errore 190 e sub_code 458.

La mia domanda è in due parti: 1) Come faccio a ottenere il mio pulsante "ok" nella finestra di dialogo FBSDK che viene automaticamente presentata per fare effettivamente qualcosa con il pulsante ok? 2) Come faccio manualmente (supponendo che il pulsante sopra non funzioni per qualche motivo) test per lo stato accessToken e autorizzi nuovamente l'utente?

Sembra che ci debba essere una soluzione semplice e ho trascorso alcuni giorni e non posso anticiparlo.

Grazie per qualsiasi aiuto o guida!

+0

Vedo ora che la questione di Fare clic su OK e non lavorare è perché non v'è alcun token di accesso, e questa convenzione non permessi. Pertanto, in FBSDK quando viene chiamato (_FBSDKLoginRecoveryAttempter attemptRecoveryFromError :), la parte di accesso non viene mai eseguita. Questo sembra un bug? C'è un modo per sovrascrivere questo comportamento e fornire il mio tentativo di recupero login? –

+0

Ok, ho aggiornato Parse e FBSDK ai pod più recenti del cacao per vedere se questo fa la differenza e non lo fa. Questo è facile da ricreare. Semplice rimuovere i privilegi delle app dalla scheda App Impostazioni account Facebook e avviare l'app iOS. Con l'ultimo SDK ora tenterà di accedere quando viene cliccato "OK" dalla finestra di dialogo degli errori, ma il login non sembra impostare un token valido e quindi l'app è bloccata in uno stato in cui la finestra di dialogo di errore viene visualizzata ad ogni avvio dell'app o quando l'app arriva in primo piano. –

+0

Se non sbaglio, è qualcosa di simile a utilizzare oauth2 refreshToken per l'autenticazione. Passa un po 'più di tempo e rendilo più chiaro, forse l'ho affrontato e in grado di aiutarti. –

risposta

3

Mi sono imbattuto in un problema simile (tuttavia non ha nulla a che fare con Parse). Ecco le mie risposte alle due domande che hai chiesto:

  1. Sembra pulsante OK della finestra di dialogo FBSDK non funziona per questo:

    Attempt to present <FBSDKContainerViewController: 0x126b222a0> on 
    <FBSDKContainerViewController: 0x126a26d10> whose view is not in the window hierarchy! 
    

    Almeno vedo l'avvertimento sopra nella Xcode console quando provo ad accedere a Facebook nella mia app (su un dispositivo collegato a un Macbook) e il mio tentativo fallisce. Non ho trovato un modo per aggirare questo particolare problema. Ma ho trovato un modo per evitare la finestra di dialogo FBSDK. Vedi l'elemento successivo.

  2. I test per la validità del metodo di accesso richiedendo le informazioni sull'utente FB. Se la richiesta non riesce con un errore, potrebbe significare che il metodo accessToken non è valido. Ecco un esempio di codice:

    FBSDKGraphRequest *request = [[FBSDKGraphRequest alloc] 
        initWithGraphPath:@"me" parameters:@{@"fields": @"id, first_name, last_name"}]; 
    
    // The next line is important. 
    // It prevents FB SDK from handling the error automatically 
    // and allows you to handle the error yourself. 
    // In this way you avoid(!) the FBSDK dialog that says 
    // "Please login to this app again to reconnect with Facebook". 
    [request setGraphErrorRecoveryDisabled:YES]; 
    
    [request startWithCompletionHandler: 
        ^(FBSDKGraphRequestConnection *connection, id result, NSError *error){ 
    
        if (error) { 
         // An error occurred. Most likely the accessToken is not valid. 
         // Start the FB log-in process to obtain a valid token. 
        }else{ 
         // Everything's all right. Go on. 
        } 
    }]; 
    
+0

Questo è molto buono. la disabilitazione del recupero degli errori è il trucco, credo. Abbiamo finito per controllare il token di sessione e fare alcune cose per garantire lo stato lì, e questo ha funzionato. Ma questo ha una sovrapposizione più diretta e forte con ciò che abbiamo fatto per aggirare la situazione. –

Problemi correlati