2013-05-15 11 views
11

Ich fand interessantes Problem.FBSession requestNewPublishPermissions wie mit "Skip" Benutzeraktion umgehen

Wenn ich neue Berechtigungen veröffentlichen anfordernden bin, zeigt den Dialog fb sdk mit der Schaltfläche „Überspringen“. Ich Umgang es wie dieses

 

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

Aber wenn der Benutzer „Skip“ innerhalb des Dialog gedrückt - Fehler gleich Null ist.

Wie geht man damit um? Vielleicht verstehe ich nicht. Thx.

+0

weiß nich helfen wird, die die frack diese Downvoted ... gespeichert Sie meinen Arsch. –

+0

dasselbe Problem gefunden. Facebook dialog zeigt "skip" taste aus dem nichts –

Antwort

8

das gleiche für mich scheint, das ist Bug in Facebook SDK, aber ich bin mir nicht sicher. Ich habe zusätzliche Überprüfung hinzugefügt, wenn Sitzung neue Berechtigungen hat.

- (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; 
    } 

Hoffnung diese

+2

du bist der kumpel mann. Ich weiß nicht, wer das hier downstimmte, wenn man bedenkt, dass sogar die Scrumptious-Beispiel-App von Facebook darunter leidet. Ich habe dieses Niveau von Plebbery in der frangin Sample-App nicht erwartet. –

+5

Sie können einfach [[FBSession activeSession] .permissions containsObject: @ "publish_actions"] für true überprüfen, anstatt die activeSessionHasPermissions zu verwenden: method @evfemist wrote. –

Verwandte Themen