2013-10-14 6 views
3

Je dois créer un nouvel album photo en utilisant le SDK Facebook sur iOS. Mon code fonctionnait, mais a récemment commencé à retourner des erreurs comme ceci:Créer un album photo avec Facebook SDK sur iOS en utilisant Open Graph

{ 
    "com.facebook.sdk:ErrorSessionKey" = "<FBSession: 0x7290850, state: FBSessionStateOpenTokenExtended, loginHandler: 0x7290c40, appID: 380841565285975, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x8a933e0>, expirationDate: 4001-01-01 00:00:00 +0000, refreshDate: 2013-10-14 03:16:01 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(\n \"create_note\",\n \"basic_info\",\n \"share_item\",\n \"status_update\",\n \"publish_actions\",\n \"video_upload\",\n email,\n \"photo_upload\",\n installed,\n \"publish_stream\",\n \"user_birthday\",\n \"user_location\"\n)>"; 
    "com.facebook.sdk:HTTPStatusCode" = 500; 
    "com.facebook.sdk:ParsedJSONResponseKey" =  { 
     body =   { 
      error =    { 
       code = 2; 
       message = "An unexpected error has occurred. Please retry your request later."; 
       type = OAuthException; 
      }; 
     }; 
     code = 500; 
    }; 
} 

Selon https://developers.facebook.com/docs/reference/api/errors/, et l'erreur avec le code 2 est: « problème côté serveur, l'application devrait réessayer après avoir attendu, jusqu'à une application définie seuil".

Cela a échoué depuis au moins quelques jours, et je n'arrive pas à trouver quelqu'un d'autre ayant des problèmes similaires, donc je suppose que le problème est le mien.

Des idées quelle pourrait être la cause? Le code pertinent est ci-dessous. La méthode createFacebookAlbum est celle qui échoue.

- (void)shareToFacebook { 
if (FBSession.activeSession.isOpen) { 
    NSLog(@"SESSION IS OPEN"); 

    [self createFacebookAlbum]; 
} else { 
    NSLog(@"SESSION IS NOT OPEN"); 
    NSArray* permissions = [NSArray arrayWithObject:@"email"]; 
    [FBSession openActiveSessionWithReadPermissions:permissions allowLoginUI:YES completionHandler:^(FBSession *session, FBSessionState state, NSError *error) { 
     [self sessionStateChanged:session state:state error:error]; 

     if (error) { 
      /* handle failure */ 
      NSLog(@"error:%@, %@", error, [error localizedDescription]); 
      UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"There was a problem with your Facebook permissions." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles: nil]; 
      [alert show]; 
     } 
     else if (state == FBSessionStateClosed || state == FBSessionStateClosedLoginFailed) { 
      [FBSession.activeSession closeAndClearTokenInformation]; 
     } 
     else if (state == FBSessionStateOpenTokenExtended || state == FBSessionStateOpen) { 
      if(!self.presentedFacebookSheet) { 
       [self performSelector:@selector(reauthorizeAndContinuePostToFacebook) withObject:nil afterDelay:0.5]; 
       self.presentedFacebookSheet = YES; 
      } 
     } 
     }]; 
    } 
} 

- (void)reauthorizeAndContinuePostToFacebook { 
    NSArray *permissions = [NSArray arrayWithObjects:@"publish_actions", nil]; 

    [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceFriends completionHandler:^(FBSession *session, NSError *error) { 
     [self shareToFacebook]; 
    }]; 
} 

- (void)createFacebookAlbum { 
    NSMutableDictionary* parameters = [NSMutableDictionary dictionary]; 
    [parameters setObject:@"Test name" forKey:@"name"]; 
    [parameters setObject:@"Test message" forKey:@"message"]; 

    FBRequest* request = [FBRequest requestWithGraphPath:@"me/albums" parameters:parameters HTTPMethod:@"POST"]; 

    NSLog(@"creating facebook album"); 
    FBRequestConnection *connection = [[FBRequestConnection alloc] init]; 
    [connection addRequest:request 
     completionHandler:^(FBRequestConnection *connection, id result, NSError *error) { 
      if (!error) { 
       NSString* albumId = [result objectForKey:@"id"]; 
       NSLog(@"OK %@", albumId); 
      } 
      else { 
       NSLog(@"Error: %@",error.userInfo); 
      } 
     }]; 
    [connection start]; 
} 

- (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error { 
    switch (state) { 
     case FBSessionStateOpen: 
     { 
      [[FBRequest requestForMe] startWithCompletionHandler: 
      ^(FBRequestConnection *connection, 
       NSDictionary<FBGraphUser> *user, 
       NSError *error) { 
       if (error) { 
        //error 
       } 
       else { 
        NSLog(@"User session found"); 
       } 
      }]; 
     } 
      break; 
     case FBSessionStateClosed: 
     case FBSessionStateClosedLoginFailed: 
      [FBSession.activeSession closeAndClearTokenInformation]; 
      break; 
     default: 
      break; 
    } 
} 
+0

Avez-vous changé quelque chose dans votre info.plist avant cela a commencé? Avez-vous essayé de retirer le jeton (se déconnecter) et d'essayer à nouveau? – Wain

+0

Non, c'est une application existante sur le magasin que je n'ai pas touché dans quelques mois. J'ai essayé de supprimer et d'installer l'application, mais pas de chance. J'ai même essayé avec un ID de paquet et un identifiant d'application différents ... pas de chance avec ça, non plus. –

Répondre

4

J'ai eu le même problème que vous. Il y a un mois, je pouvais créer des albums sans user_photos.

Mais maintenant plus maintenant.

J'ai ajouté la permission: user_photos et cela fonctionne à nouveau.

Voir aussi cet article sur facebook changement des autorisations https://developers.facebook.com/docs/reference/api/album/

+0

Merci, cela l'a résolu. Je devais être sûr de me déconnecter d'abord de l'utilisateur afin que les permissions soient re-demandées, mais après cela cela a bien fonctionné. Le lien de documentation ci-dessus mentionne toujours que pour créer un album, vous devez seulement avoir besoin de publish_actions. Mais, user_photos est définitivement requis! Profitez de votre générosité, merci d'aider. –

Questions connexes