iphone - Facebook SSO 并请求 iOS SDK

标签 iphone objective-c ios facebook

我正在尝试向当前用户发布留言墙。在执行请求之前,我正在验证 session 并在未验证时进行授权。为了澄清,我省略了一些声明和变量的初始化。问题在于此处显示的代码是在执行 fbDidLogin-delegate 方法之前执行的。所以看起来 Facebook 对象在请求之前没有有效的访问 token 。我做了一个单例。下次我运行该程序时它会起作用。

代表

- (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];
}

View Controller

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..功能

+ (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;
}

最佳答案

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

关于iphone - Facebook SSO 并请求 iOS SDK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7151737/

相关文章:

iphone - NSString 超出范围问题?

iphone - 如何在从 Apple 获取应用程序 ID 之前测试 iOS Facebook 应用程序?

当某些 pod 文件包含在桥接 header 中包含的文件中时,iOS 项目将不会构建

ios - 将 "new" View 添加到没有 View 的应用程序中

ios - Expo Camera 预览组件突然开始显示黑屏

ios - Swift,从字符串中获取变量名

ios - tableView 在超过 16 个项目时崩溃

objective-c - 对类和对象 iVar 感到困惑

ios - 使用 NSMutableAttributedString 更改 NSString 的颜色和大小部分

php - 来自 HTTP 请求的 $_POST 数组值