Facebook iOS SDK 3.0 - 会话未打开

时间:2012-08-16 16:03:50

标签: objective-c ios facebook

我正在使用最新的Facebook iOS SDK 3.0

我需要在登录过程中提供帮助:

首先,我在AppDelegate.h中声明此属性:

@property (nonatomic, strong) FBSession *session;

并且在ViewController类中我得到它在代码中使用它:

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

我在ViewController中也有这个从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); // First Line //////////////////
            }];
        }
        NSLog(@"%@", delegate.session.description);   // Second Line //////////////////
    }
 }

Facebook应用获得授权后,第一个NSLog打印为零,第二个NSLog表示session状态为FBSessionStateCreated而不是FBSessionStateOpen?< / p>

这是第二个NSLog

的输出
2012-08-16 18:37:24.327 Facebook3[2418:f803] <FBSession: 0x6890ff0, state:    FBSessionStateCreated, loginHandler: 0x0, appID: 193716877424306, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0x6890f20>, expirationDate: (null), refreshDate: (null), attemptedRefreshDate: 0001-12-30 00:00:00 +0000, permissions:()>

我在这里缺少什么。

注意:在https://developers.facebook.com的应用设置中,我将应用配置为: 1-为iOS SSO配置:已启用 2- iOS Native Deep Linking:已启用 3- iOS Bundle ID:com.mycompany.appname

2 个答案:

答案 0 :(得分:5)

我将这个框架用于我的项目。它工作正常。 这是我的相关代码

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

我的sessionOpener函数是;

    -(void) sessionOpener
{

    [FBSession sessionOpenWithPermissions:nil
                        completionHandler:^(FBSession *session,
                                            FBSessionState status,
                                            NSError *error) {
                            // session might now be open.
                            if (!error) {
                                [self.viewController loginHelp];
                            }
                        }];

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

它对我有用。可能对你有帮助。

我的控制台打印是:

     1
2012-08-16 22:24:55.899 TaraftarlikOyunu[838:c07] <FBSession: 0xd2512c0, state: FBSessionStateOpen, loginHandler: 0xd250240, appID: 433294056715040, urlSchemeSuffix: , tokenCachingStrategy:<FBSessionTokenCachingStrategy: 0xd24fda0>, 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:(
    )>

答案 1 :(得分:2)

我遇到了和你一样的问题,在调用handleOpenURL时,我在使用FBSession和FBSession实例之间混淆了。我改变了

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

到这个

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