4 votes

Facebook iOS SDK 3.0 - session non ouverte

Je suis en train d'utiliser la dernière version du SDK Facebook iOS 3.0

J'ai besoin d'aide dans le processus de connexion :

Tout d'abord, je déclare cette propriété dans AppDelegate.h:

@property (nonatomic, strong) FBSession *session;

et dans la classe ViewController, je l'obtiens pour l'utiliser dans le code comme ceci :

AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
[delegate.session someproperty];

J'ai également cette méthode dans ViewController qui est appelée depuis viewDidLoad:

-(void)login
{
    AppDelegate *delegate = [[UIApplication sharedApplication]delegate];
    [delegate.session accessToken];
    NSLog(@"%d",delegate.session.isOpen);
    if (!delegate.session.isOpen)
    {
        delegate.session = [[FBSession alloc] init];
        if (delegate.session.state == FBSessionStateCreatedTokenLoaded)
        {
            [delegate.session openWithCompletionHandler:^(FBSession *session,
                                                      FBSessionState status,
                                                      NSError *error) 
            {
              NSLog(@"%d", delegate.session.isOpen); // Première Ligne //////////////////
            }];
        }
        NSLog(@"%@", delegate.session.description);   // Deuxième Ligne //////////////////
    }
 }

Après que l'application Facebook soit autorisée, le premier NSLog affiche zéro, et le deuxième NSLog indique que l'état de la session est FBSessionStateCreated et non FBSessionStateOpen ?

voici la sortie pour le deuxième NSLog :

2012-08-16 18:37:24.327 Facebook3[2418:f803] , expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:()>

Qu'est-ce que je manque ici.

Note : dans les paramètres de l'application sur https://developers.facebook.com j'ai configuré l'application comme ceci: 1- Configuré pour SSO iOS: Activé 2- Deep Linking Natif iOS: Activé 3- ID de Bundle iOS : com.mycompany.appname

5voto

meth Points 1684

J'ai utilisé ce framework pour mon projet. il fonctionne correctement. voici mon code associé

   -(IBAction)logIn:(id)sender;
{
    AppDelegate *appdelegate = (AppDelegate *)[[UIApplication sharedApplication] delegate];
    if (!FBSession.activeSession.isOpen) {
        [appdelegate sessionOpener];
    }
    else {
        [self loginHelp];
    }

et ma fonction sessionOpener est;

    -(void) sessionOpener
{

    [FBSession sessionOpenWithPermissions:nil
                        completionHandler:^(FBSession *session,
                                            FBSessionState status,
                                            NSError *error) {
                            // la session est peut-être ouverte maintenant.
                            if (!error) {
                                [self.viewController loginHelp];
                            }
                        }];

     NSLog(@"%d", FBSession.activeSession.isOpen);
    NSLog(@"%@", FBSession.activeSession.description );
}

cela fonctionne pour moi. cela peut être utile pour vous.

et mon affichage console est:

     1
2012-08-16 22:24:55.899 TaraftarlikOyunu[838:c07] , expirationDate: 2012-10-15 19:02:34 +0000, refreshDate: 2012-08-16 19:05:03 +0000, attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:(
    )>

2voto

Daniel Nord Points 119

J'avais le même problème que vous et j'avais mélangé l'utilisation de FBSession et l'instance de FBSession lors de l'appel de handleOpenURL. J'ai changé de

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation {
    [FBSession.activeSession facebookSession handleOpenURL:url];
}

à cela

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation {
    [session facebookSession handleOpenURL:url];
}

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