2012-10-16 12 views
16

Ho problemi ad accedere con le autorizzazioni di pubblicazione in Facebook 3.1 ios sdk.Accesso SDK di Facebook iOS 3.1 con callback di autorizzazione di pubblicazione

La mia app ha un pulsante per condividere un video e quando l'utente fa clic su Voglio aggiungere il permesso di base + di pubblicazione. A quanto ho capito, devo fare due chiamate -

  1. openActiveSessionWithReadPermissions, e quindi
  2. reauthorizeWithPublishPermissions

Ecco il codice che sto usando ora:

//Opens a Facebook session and optionally shows the login UX. 
- (void)openSessionForReadPermissions 
{ 
    [FBSession openActiveSessionWithReadPermissions:nil 
             allowLoginUI:YES 
            completionHandler: 
    ^(FBSession *session, 
     FBSessionState state, NSError *error) { 

     //this is called even from the reauthorizeWithPublishPermissions 
     if (state == FBSessionStateOpen && !error) 
     { 
      [self openSessionForPublishPermissions]; 
     } 
     else if (state == FBSessionStateClosedLoginFailed) 
     { 
      [FBSession.activeSession closeAndClearTokenInformation]; 

      [[NSNotificationCenter defaultCenter] postNotificationName:FBLoginErrorNotification object:session]; 
     } 
    }]; 
} 

-(void)openSessionForPublishPermissions 
{  
    NSArray* permissions = [NSArray arrayWithObject:@"publish_stream"]; 

    [[FBSession activeSession] reauthorizeWithPublishPermissions:permissions 
               defaultAudience:FBSessionDefaultAudienceFriends 
               completionHandler: 
    ^(FBSession *session, NSError *error) 
    { 
     if (!error) 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginSuccessNotification 
       object:session]; 
     } 
     else 
     { 
      [[NSNotificationCenter defaultCenter] 
       postNotificationName:FBLoginErrorNotification 
       object:session]; 
     } 
    }]; 
} 

vedo che il blocco in openSessionForReadPermissions è chiamato due volte (una volta con FBSessionStateOpen e una volta con FBSessionStateOpenTokenExtended dalla chiamata openSessionForPublishPermissions), un Ho ottenuto un ErrorReauthorizeFailedReasonUserCancelled quando provo per la prima volta ad accedere all'app (se O cancellassi tutte le autorizzazioni delle app prima).

Qual è il modo corretto per implementare questo accesso? L'app non richiede il log-in di Facebook, fatta eccezione per questa funzione, quindi il processo di login dovrebbe essere sullo stesso pulsante.

Grazie!

+0

+1 Siamo bloccati con lo stesso problema, soprattutto perché la chiamata di autorizzazione mista è stata privata. –

+0

reauthorizeWithPublishPermissions è ammortizzato. Utilizzare invece requestNewPublishPermissions. – John

risposta

26

Mi sono imbattuto in questo stesso problema. La soluzione che ho trovato è stata la chiamata a [self openSessionForPublishPermissions]; in un blocco dispatch_async.

Esempio:

dispatch_async(dispatch_get_current_queue(), ^{ 
    [self openSessionForPublishPermissions]; 
}); 

Il motivo è che la chiamata a ri-autorizzare .. deve essere dopo il ciclo degli eventi di cui openActiveSession .. si chiama.

+0

Grazie! Questo bug ha distrutto la mia testa per giorni. – Tiddly

0

Qualche possibilità potrebbe essere un timeout per il raggiungimento di un punto di interruzione? Trovato questo errore una volta, ma non l'ha fatto di nuovo dopo l'esecuzione con i punti di interruzione disabilitati.

Problemi correlati