2013-05-15 5 views
11

Ho trovato un problema interessante.FBSession requestNewPublishPermissions come gestire l'azione utente "Salta"

Quando sto richiedendo nuove autorizzazioni di pubblicazione, fb sdk mostra la finestra di dialogo con il pulsante "Salta". che sto gestire in questo modo

 

     [[[appDelegate facebook] session] requestNewPublishPermissions:permissions 
                 defaultAudience:FBSessionDefaultAudienceEveryone 
                completionHandler:^(FBSession *session, NSError *error) 
     { 
      if (!error) 
      { 
        //do smth if there is no error 
      } 
     }]; 

Ma quando l'utente preme "Salta" all'interno della finestra di dialogo - errore è pari a zero.

Come gestirlo? Forse non capisco smth. Thx.

+0

dunno che il frack downvoted questo ... ti ha salvato il culo. –

+0

ha riscontrato lo stesso problema. La finestra di dialogo di Facebook mostra il pulsante "Salta" da nessuna parte –

risposta

8

uguale per me, sembra che questo sia un bug nell'SDK di Facebook, ma non ne sono sicuro. Ho aggiunto un controllo aggiuntivo se la sessione ha nuove autorizzazioni.

- (void)postToFacebookWithMessage:(NSString *)message completionBlock:(void (^)(NSError *))completionBlock 
    { 
     NSArray *permissions = @[@"publish_actions"]; 

     void (^completionHandler)(FBSession *session, NSError *error) = ^(FBSession *session, NSError *error) { 
      if (error != nil) 
      { 
       if (completionBlock != nil) 
       { 
        completionBlock(error); 
       } 
      } 
      else if(![self activeSessionHasPermissions:permissions]) 
      { 
       NSError *error = [NSError errorWithDomain:@"Facebook" code:FBAccessDisabledCode userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Facebook access disabled", @"Facebook access disabled")}]; 
       if (completionBlock != nil) 
       { 
        completionBlock(error); 
       } 
      } 
      else 
      { 
       NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject]; 
       action[@"message"] = message; 

       [FBRequestConnection startForPostWithGraphPath:@"me/og.posts" graphObject:action completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
        // internal error 1611231 means that this was already posted 
        if (error.code == 5) 
        { 
         error = [NSError errorWithDomain:@"Facebook" code:FBDuplicateActionErrorCode userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Already posted to Facebook", @"Already posted to Facebook")}]; 
        } 

        if (completionBlock != nil) 
        { 
         completionBlock(error); 
        } 
       }]; 
      } 
     }; 

     if ([self activeSessionHasPermissions:permissions]) 
     { 
      completionHandler([FBSession activeSession], nil); 
     } 
     else 
     { 
      [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:completionHandler]; 
     } 
    } 

    - (BOOL)activeSessionHasPermissions:(NSArray *)permissions 
    { 
     __block BOOL hasPermissions = YES; 
     for (NSString *permission in permissions) 
     { 
      NSInteger index = [[FBSession activeSession].permissions indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) { 
       if ([obj isEqualToString:permission]) 
       { 
        *stop = YES; 
       } 
       return *stop; 
      }]; 

      if (index == NSNotFound) 
      { 
       hasPermissions = NO; 
      } 
     } 
     return hasPermissions; 
    } 

speranza che questo vi aiuterà

+2

tu sei l'uomo tizio. Non so chi ha downvoted questo considerando che anche l'app campione di Scrumptious di facebook ne soffre. Non mi aspettavo questo livello di plebbery nell'app campione di friggin. –

+5

Puoi semplicemente controllare [[FBSession activeSession] .permissions containsObject: @ "publish_actions"] per true invece di usare activeSessionHasPermissions: metodo @evfemist scritto. –