【问题标题】:Facebook iOS SDK 3.0 - session not openFacebook iOS SDK 3.0 - 会话未打开
【发布时间】:2012-08-16 16:03:50
【问题描述】:

我正在使用最新的 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

这是第二个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 原生深度链接:启用 3- iOS Bundle ID:com.mycompany.appname

【问题讨论】:

    标签: objective-c ios facebook


    【解决方案1】:

    我在我的项目中使用了这个框架。它工作正常。 这是我的相关代码

       -(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:(
        )>
    

    【讨论】:

    • 谢谢你的回答,我会试试的,但是使用FBSessionFBSession 类的实例有区别吗?
    • 你有没有 - (void)sessionStateChanged:(FBSession *)session state:(FBSessionState) state error:(NSError *)error
    • 是的,我在ViewController 课程中有一个,但它从来没有被调用过,你知道为什么吗?
    • 它应该在 appdelegate 中。因为你在 appdelegate 中定义了会话。
    • 好的。你提出要求了吗?你能得到任何关于会话的信息吗?
    【解决方案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];
    }
    

    【讨论】:

    • [session facebookSession handleOpenURL:url] 在语法上不正确。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多