2 votes

FacebookSDK dans iOS n'affiche pas le bouton de fermeture et ne peut pas être fermé

Bonjour, j'ai intégré le SDK de Facebook dans une application iOS 6. L'authentification et le partage de Facebook fonctionnent parfaitement, mais il n'y a aucune disposition pour fermer la boîte de dialogue FB. Lorsque la boîte de dialogue FB s'ouvre, elle ne se ferme qu'une fois l'authentification réussie. Il n'y a pas de disposition pour fermer ou revenir en arrière. Comment puis-je créer un bouton de fermeture ? Le code que j'utilise est présenté ci-dessous.

-(NSDictionary *)shareFacebook
{

    NSDictionary *userInfo;
    if (FBSession.activeSession.isOpen)
    {

        if (FBSession.activeSession.isOpen)
        {

            [self.closeButton setHidden:NO];
            [FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id<FBGraphUser> user, NSError *error) {

                NSUserDefaults *standardUserDefaults=[NSUserDefaults standardUserDefaults];
                [standardUserDefaults setObject:user forKey:@"fbUserInfo"];

                    [self.manager authenticateUserUsingFB:[user objectForKey:@"email"]];

            }];
        }

    }
    else{
        NSLog(@"fb session not active.");
        [self openSessionWithAllowLoginUI:YES];
    }
    return userInfo;
}

- (void)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {

    NSArray *permissions = [[NSArray alloc] initWithObjects:

                            @"user_photos",
                            @"publish_actions",
                            @"read_stream",
                            @"friends_photos",
                            @"email" ,nil];

    [FBSession setActiveSession:[[FBSession alloc] initWithPermissions:permissions]];

    [[FBSession activeSession] openWithBehavior:FBSessionLoginBehaviorForcingWebView

                              completionHandler:^(FBSession *session,

                                                  FBSessionState state,

                                                  NSError *error) {

                                  NSLog(@" state=%d",state);
                                  if(FBSessionStateOpen)
                                  {
                                      [self shareFacebook];
                                  }
                              }];

}

5voto

user2381529 Points 51

Ajoutez le paquet de ressources Facebook SDK pour iOS en faisant glisser le fichier FacebookSDKResources.bundle du dossier FacebookSDK.framework/Resources dans la section Frameworks de votre navigateur de projet. http://developers.facebook.com/docs/getting-started/facebook-sdk-for-ios/

2voto

Stas Points 4493

Je sais ce qui cause ce bug ! Le bouton et la vue de l'icône (il y a deux vues dans le coin supérieur droit de la boîte de dialogue - un bouton de fermeture et une vue de l'icône) existent réellement (vous pouvez cliquer dessus pour les voir) mais ne sont pas visibles. Ceci est dû au fait que le projet ne peut pas voir les fichiers image réels qui sont situés dans le dossier FBDialog.bundle . Vous devez copier ces images depuis le bundle et les ajouter au projet puis définir les images directement. Votre méthode init peut ressembler à quelque chose comme ceci :

 //This is your FBDialog.m file
- (id)init {
  if (self = [super initWithFrame:CGRectZero]) {
    .........

    UIImage* iconImage = [UIImage imageNamed:@"fbicon.png"];
    UIImage* closeImage = [UIImage imageNamed:@"close.png"];

    _iconView = [[UIImageView alloc] initWithImage:iconImage];
    [self addSubview:_iconView];

    _closeButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain];
    [_closeButton setImage:closeImage forState:UIControlStateNormal];
    [_closeButton addTarget:self action:@selector(cancel)
      forControlEvents:UIControlEventTouchUpInside];

    .........

Il existe peut-être une meilleure façon de corriger ce problème, mais cette méthode a fonctionné pour moi.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X