2010-05-24 3 views
1

Le code de connexion de Facebook me trompe un peu. Je n'ai aucun problème à faire un login, et un post de mur, cependant, je ne peux simplement pas comprendre comment les méthodes de délégué pour FBDialog et FBStreamDialog sont supposées fonctionner.Quand Facebook Connect est-il supposé appeler ses méthodes de délégué?

- (void)postToWall { 

    FBStreamDialog *dialog = [[[FBStreamDialog alloc] init] autorelease]; 
    dialog.delegate = self; 
    dialog.userMessagePrompt = @"Enter your message:"; 
    dialog.attachment = [NSString stringWithFormat:@"JSONpost code"]; 
    [dialog show]; 

} 

J'adhère à ces protocoles dans mon contrôleur:

<FBDialogDelegate, FBSessionDelegate, FBRequestDelegate> 

je mets en œuvre alors les deux méthodes:

- (void) dialogDidCancel:(FBDialog *)dialog { 

    NSLog(@"Failed"); 
} 

- (void) dialogDidSucceed:(FBDialog *)dialog { 

    NSLog(@"Success"); 
} 

Après je tape "publish" et les méthodes de postToWall est fait exécuter le "pop up" Facebook dans l'interface utilisateur est vide, sauf un petit "X" dans le coin supérieur droit et un "F" (logo facebook) dans le coin supérieur gauche. L'interface utilisateur restera là jusqu'à ce que je tape sur le "X", ce qui entraîne l'appel de la méthode dialogDidCancel délégué. Les données de poste apparaissent sur la page Facebook, tout semble fonctionner.

Pourquoi la méthodedialogDidSucceedjamais appelé? J'ai besoin de cela pour libérer mon contrôleur facebook et restaurer l'interface utilisateur à l'endroit où l'utilisateur était avant de "démarrer" FB Connect.

Merci :)

+0

a le même problème, impatient de voir une réponse! Nous pensons que le problème est du côté de Facebook. Tout a bien fonctionné la semaine dernière! – Nixarn

+0

Ahh merci de m'avoir fait savoir que je ne suis pas complètement seul. J'ai fait l'authentification de connexion la semaine dernière sans aucun problème, puis je suis retourné cette semaine pour faire la fonctionnalité streamDialog et il se trouve juste là :) :) Les trucs de FB Connect semblent juste piratés ensemble, à la fois en termes de regarder la source et examiner l'expérience de l'utilisateur. – RickiG

+0

Yay, quelqu'un a posté le bug sur Facebook. J'espère qu'ils vont le réparer bientôt! http://bugs.developers.facebook.com/show_bug.cgi?id=10531 – Nixarn

Répondre

0

Je vois où est le problème, mais ne savez pas si tout ce que nous pouvons faire à ce sujet. Cela se produit dans la méthode UIWebView Delegate de la classe FBDialog. Si vous cliquez sur le bouton Ignorer, le fichier request.URL est rempli avec 'fbconnect: success', il devrait vraiment être 'fbconnect: cancel' mais d'autres personnes ont déjà signalé ce problème auparavant. Notre problème est que lorsque vous cliquez sur le bouton Publier, le fichier request.URL devrait lire 'fbconnect: succès' mais il finit par contenir 'http://www.facebook.com/fbconnect/prompt_feed.php', donc, il n'appelle jamais rejectWithSuccess: YES ou dialogDidSucceed.

Je ne trouve aucun endroit où l'URL de publication du bouton Publier est défini, mais si nous pouvons le remplacer par fbconnect: succès, cela peut fonctionner.

FBDialog.m 
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request 
    navigationType:(UIWebViewNavigationType)navigationType { 
    NSURL* url = request.URL; 
    if ([url.scheme isEqualToString:@"fbconnect"]) { 
    if ([url.resourceSpecifier isEqualToString:@"cancel"]) { 
     [self dismissWithSuccess:NO animated:YES]; 
    } else { 
     [self dialogDidSucceed:url]; 
    } 
    return NO; 
    } else if ([_loadingURL isEqual:url]) { 
    return YES; 
    } else if (navigationType == UIWebViewNavigationTypeLinkClicked) { 
    if ([_delegate respondsToSelector:@selector(dialog:shouldOpenURLInExternalBrowser:)]) { 
     if (![_delegate dialog:self shouldOpenURLInExternalBrowser:url]) { 
     return NO; 
     } 
    } 

    [[UIApplication sharedApplication] openURL:request.URL]; 
    return NO; 
    } else { 
    return YES; 
    } 
} 
+0

Salut Mike. Je vois ce que tu veux dire. J'ai essayé d'appeler manuellement [self dismissWithSuccess: YES animated: YES] pas de chance. J'ai essayé de passer à travers la méthode ci-dessus et, comme vous, je ne reçois jamais d'autres URL que le prompt_feed.J'ai essayé de télécharger quelques exemples de tutoriels, etc. Dès que je les modifie pour utiliser le FBStreamDialog, il se bloque en raison de méthodes de délégation incorrectes. Cela rend FBConnect inutile pour mon but, qui est de publier des données de mon application sur le mur des utilisateurs. Y a-t-il des composants "plus mûrs" pour faire cela? – RickiG