2011-01-24 10 views
10

È possibile utilizzare l'SDK di Facebook iOS per autenticarsi all'interno di un'app (non andare in Safari) e mantenere anche quelle credenziali di autenticazione per il prossimo avvio dell'app?SDK Facebook iPhone/iOS - è possibile accedere all'app e mantenere le credenziali di accesso?

Quando provo a utilizzare l'app di dimostrazione nel simulatore, si passa sempre al safari per l'autenticazione, il che sembra un po 'schifoso. E poi, quando autenticherò ... se ucciderò completamente l'app chiederà di autenticarmi di nuovo (e poi dimmi che ho già effettuato l'accesso)

C'è un modo, solo per presentare l'utente con solo una email campo e un campo password e quindi mantenere quelle informazioni .. all'interno della app?

+1

non è possibile utilizzare WebView invece di avviare Safari? –

+0

certo, ma anche quello sembra dilettante. preferirei solo campi email e password – cannyboy

+1

Solo una nota di chiunque si imbatta in questa domanda in futuro che una vista Web è il metodo di autenticazione previsto se si utilizza l'SDK nel simulatore o su un telefono senza Facebook app installata. Se l'app di Facebook è disponibile, il flusso è molto più semplice. Ma Facebook certamente non vuole che l'e-mail e la password associate all'account siano mantenute "all'interno dell'app". (Ovvero, all'interno di app di terze parti.) –

risposta

9

Dai un'occhiata a questa domanda e rispondere: Iphone facebook connect example calls safari. I don't want to use safari. Inoltre, ti consigliamo di archiviare gli elementi di autenticazione in NSUserDefaults e di controllarli per evitare nuovi accessi.

EDIT Alcuni codice di esempio:

Per salvare roba login:

[[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"]; 
[[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"]; 
[[NSUserDefaults standardUserDefaults] synchronize]; 

Per controllare per cose login:

_facebook = [[[Facebook alloc] initWithAppId:@"[app_id]"] retain]; 
_facebook.accessToken = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"]; 
_facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"]; 
if (![_facebook isSessionValid]) { 
    [_facebook authorize:_permissions delegate:self]; 
} 
else { 
    [_facebook requestWithGraphPath:@"me" andDelegate:self]; 
} 
+0

proverò a utilizzare nsuserdefaults. per quanto riguarda l'utilizzo di uiwebview, sembra un po 'goffo. Potrei provare ad avere e-mail e password su uitextfields e iniettarli con javascript in un uiwebview invisibile, e facendo clic sul pulsante di conferma con javascript anche – cannyboy

+1

ho aggiunto un altro codice di esempio. Per quanto sembra goffo ..anche se sono d'accordo con te sul fatto che l'implementazione di Facebook sia migliore e meno "goffa", direi che l'uso di "UIWebView" è perfettamente accettabile e (ora) previsto per l'accesso a Facebook. IMHO, non mi preoccuperei troppo di questo ... – donkim

5

si può incidere intorno a fermarlo se questo è quello che vuoi veramente, tenendo presente che la maggior parte delle altre app che migrano dal vecchio Facebook connettono API al grafico si comporteranno nel nuovo modo

Nel facebook.m trovare il seguente metodo

- (void)authorizeWithFBAppAuth:(BOOL)tryFBAppAuth 
        safariAuth:(BOOL)trySafariAuth 

trovare il fondo della logica didOpenOtherApp e commentare tutti sopra esso in modo che si apra sempre in linea e tini questa sezione di codice i thats contenuto nel! DidOpenOtherApp bretelle

// If single sign-on failed, open an inline login dialog. This will require the user to 
    // enter his or her credentials. 
    if (!didOpenOtherApp) { 
    [_loginDialog release]; 
    _loginDialog = [[FBLoginDialog alloc] initWithURL:loginDialogURL 
              loginParams:params 
              delegate:self]; 
    [_loginDialog show]; 
    } 

Tuttavia in questo modo si stanno facendo più probabile che l'utente dovrà inserire le proprie credenziali, il che è sicuramente di peggio che mettere su con l'approccio di commutazione app veloce?

3

Al momento della prima autenticazione, assicurati di chiedere l'autorizzazione "offline_access". Questo renderà il token che OAuth ritorna a te NON verrà invalidato alla fine della sessione, ma rimarrà valido letteralmente fino a quando non arrivano e utilizzano l'API per registrare la tua app su Facebook.

Quindi, ovviamente, è necessario salvare il token (mi sento come se NSUserDefaults sia un bel posto per esso) e riutilizzarlo in successive interazioni con gli FB.

Problemi correlati