【问题标题】:Facebook SSO and request iOS SDKFacebook SSO 和请求 iOS SDK
【发布时间】:2011-08-22 18:17:06
【问题描述】:

我正在尝试向当前用户发布一条墙消息。在我发出请求之前,我正在验证会话并授权(如果不是)。为了澄清起见,我省略了一些声明和变量的初始化。问题是这里显示的代码是在执行 fbDidLogin-delegate 方法之前执行的。所以看起来 Facebook 对象在请求之前没有有效的访问令牌。我做了一个单身人士。下次我运行该程序时,它就可以工作了。

委托

- (void)fbDidLogin 
{
    NSLog(@"DEBUG: DID LOG IN");

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    [defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
    [defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
    [defaults synchronize];
}

视图控制器

Facebook *facebook = [SocialMedia sharedFacebookAuthorized];

        NSString *name = nil;
        NSString *message = nil;
        NSString *picture = nil;

        if (self.didPassTest) {
            // Code
        } else {
            // Code
        }

        NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                       name, @"name",
                                       message, @"message",
                                       picture, @"picture",
                                       description, @"description",
                                       link, @"link",
                                       caption, @"caption", nil];

        [facebook requestWithGraphPath:@"me/feed" andParams:params andHttpMethod:@"POST" andDelegate:self]; 

SharedFacebook..function

+ (Facebook *)sharedFacebookAuthorized 
{
    [self sharedFacebook];

    NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
    if ([defaults objectForKey:@"FBAccessTokenKey"] && [defaults objectForKey:@"FBExpirationDateKey"]) {
        facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
        facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
    }

    NSArray *permissions = [[NSArray arrayWithObjects:@"email", @"read_stream", @"publish_stream", nil] retain];

    NSLog(@"START?");

    if (![facebook isSessionValid]) {
        [facebook authorize:permissions];
        NSLog(@"INSIDE?");
    }

    NSLog(@"CONTINUE?");    
    return facebook;
}

【问题讨论】:

    标签: iphone objective-c ios facebook


    【解决方案1】:

    这是一个异步任务。在从图形 API 请求任何内容之前,您必须等待授权异步调用完成。在此处查看我对类似问题的回复:How to react to asynchronous events (login)?

    【讨论】:

    • dtuckernet:谢谢您的回复,您理解我的问题。但是我如何使用这些块?我以前从未使用过。
    • dtuckernet: 还有没有别的办法?我需要在 > 3.2 上进行这项工作,并且在 iOS 4 中添加了块。
    • 您可以为此定义自己的委托。这与 Facebook SDK 使用委托的方式相同。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-12
    • 1970-01-01
    • 2015-01-24
    相关资源
    最近更新 更多