2012-02-25 3 views
0

Je fais et app que vous modifiez des images et vous pouvez le télécharger sur Twitter, Facebook, etc ... Mon problème c'est avec Facebook. aussi fbDidLogin n'a jamais été appelé. Je suis l'allot des tutoriels à cela et recherche allot et essaie allot des solutions et rien.Publication d'images sur Facebook iOS

Parce que je ne sais pas si l'utilisateur va exporter la photo sur Facebook, je me connecte seulement quand c'est nécessaire je laisse le code. J'espère que quelqu'un peut m'aider.

Ce que je besoin est de publier mon image que je crée dans le mur des utilisateurs

//<FBSessionDelegate, FBDialogDelegate, FBRequestDelegate> 

- (void)publishFacebook:(UIImage *)img { 

    [self loginFacebook]; 
    NSMutableDictionary * params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
             img, @"picture", @"Testing...", @"caption", 
             nil]; 
    [_facebook requestWithGraphPath:@"me/photos" andParams:params andHttpMethod:@"POST" andDelegate:self]; 
    NSLog(@"Image posted"); 
} 

- (void)loginFacebook { 

    if (_facebook == nil) { 
     _facebook = [[Facebook alloc] initWithAppId:kAppId andDelegate:self]; 
    } 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) { 
     _facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
     _facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
    } 

    if (![_facebook isSessionValid]) { 
     NSArray *permissions = [NSArray arrayWithObjects:@"email", @"offline_access", @"publish_stream", nil]; 
     [_facebook authorize:permissions]; 
     [defaults synchronize]; 
    } 
} 

- (void)fbDidLogin { 
    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
    [defaults setObject:[_facebook accessToken] forKey:@"FBAccessTokenKey"]; 
    [defaults setObject:[_facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
    [defaults synchronize]; 

} 

Et dans mon délégué app

// Pre 4.2 support 
- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
    return [[_viewController facebook] handleOpenURL:url]; 
} 

// For 4.2+ support 
- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    return [_viewController.facebook handleOpenURL:url]; 
} 

aller à l'application Facebook, et il demande tous les autorisations etc .. et IT dit dans la console "Image Publié" mais si je reste dans l'application Facebook sans accepter ou de refuser, il suffit de rester là exécuter l'image de téléchargement ...

Si dans la Facebook App J'accepte toutes les autorisations qu'il renvoie à mon application normale. Les méthodes de l'application Delegate retournent des valeurs normales sur une page Web de Facebook avec une chaîne très longue.

Que pouvais-je faire?

Merci

+0

@Emesto Je ne pouvais vraiment pas comprendre ce que vous essayez de dire ... mais je vais essayer de vous aider avec votre code .. Avant cela, vous pouvez juste regarder ma question SO ... http: // stackoverflow. com/q/9238700/1083859 –

+0

@RA salut les hommes, je vérifie le poste et que c'est pour publier une image mais avec url, c'est différent parce que j'ai un UIImage que je veux télécharger et publier sur Facebook – Edig

Répondre

1

Essayez ce code ...

-(void)buttonPressed:(id)sender{ //start the facebook action by clicking any button 
    facebook = [[Facebook alloc] initWithAppId:@"YOUR_APP_ID" andDelegate:self]; 

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
      if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) { 
       facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"]; 
       facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"]; 
      } 
    if (![facebook isSessionValid]) { 
     [facebook authorize:nil]; 
    }else{ 
    [self postWall]; 
    } 
    // Pre 4.2 support 
    - (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { 
     return [facebook handleOpenURL:url]; 
    } 
// after 4.2 support 
    - (BOOL)application:(UIApplication *)application openURL:(NSURL *)url 
    sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    return [facebook handleOpenURL:url]; 
} 
    - (void)fbDidLogin { 
     NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults]; 
     [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"]; 
     [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"]; 
     [defaults synchronize]; 
     [self postWall]; 
    } 
    -(void)postWall{ 

      NSString *filePath = [[NSBundle mainBundle] pathForResource:@"image" ofType:@"jpg"]; 
NSData *imageData = [NSData dataWithContentsOfFile:filePath]; 
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
           @"Test message", @"message", imageData, @"source", nil]; 
[facebook requestWithGraphPath:@"me/photos" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

     NSLog(@"Image posted"); 
    } 
-(void)fbDidNotLogin:(BOOL)cancelled{ 
    if (cancelled) { 
     UIAlertView *alertView=[[UIAlertView alloc]initWithTitle:@"Could not Login" message:@"Facebook Cannot login for your application" delegate:self cancelButtonTitle:@"Ok" otherButtonTitles: nil]; 
     [alertView show]; 
    } 
} 

Check out avez-vous mis délégué FBsessionDelegate, FBRequestDelegate dans votre File.Try contrôleur pour exécuter votre facebook dans votre application elle-même et non pas dans SAFARI .Pour ce faire, vérifiez ce lien. Facebook Implementation within app (without opening in safari or native app)

révisé: code modifié avec la méthode postWall et ajouté fbDidNotLoginMethod.This est la bonne.

+0

je vais le vérifier , parce que ce dont j'ai besoin c'est de se connecter et de tout faire dans la même fonction je la teste et je te dis merci – Edig

+0

Désolé pour trop de temps mais ça marche :) – Edig

Questions connexes