【问题标题】:Facebook dialog, logout and access token (Facebook iOS SDK)Facebook 对话框、注销和访问令牌 (Facebook iOS SDK)
【发布时间】:2011-05-11 15:49:21
【问题描述】:

当使用这样的代码创建 Facebook 对话框时

NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: apiKey, @"api_key", nil];
[facebook dialog:@"stream.publish" andParams:params andDelegate:self];

是否可以使用会话?

我成功在用户的帖子墙上发布了帖子,但是如何让用户退出? 此外,当我尝试访问当前用户信息时,我会收到此错误。

{
    error = {
        message = "An active access token must be used to query information about the current user.";
        type = OAuthException;
    };
}

【问题讨论】:

    标签: iphone ios facebook


    【解决方案1】:

    好像是权限问题,试试:

    [facebook setPermission:@"offline_access"];
    

    【讨论】:

    • 访问令牌怎么可能为空?我用 NSLog(@"%s", facebook.accessToken); 打印它它的值为空。所以我无法检索当前用户信息。
    • In NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys: apiKey, @"api_key", nil]; [facebook 对话:@"stream.publish" andParams:params andDelegate:self];仅使用 api_key。我在哪里使用了密钥?
    • 我成功使用 [facebook logout:self] 注销;但是由于 accessToken 总是返回 null 我不仅不能检索用户信息,而且只能在需要时使用带有“从 fb 注销”条目的自定义操作表
    • 如果用户退出,您将无法检索信息。
    • 对不起,我的意思是当用户登录并且他/她可以在他/她的墙上发帖时,访问令牌也会返回 null。现在我正在尝试使用 [[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"AccessToken"]; [[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"ExpirationDate"];并在 viewDidLoad 中恢复它们,但暂时没有成功
    【解决方案2】:

    我在 viewDidLoad 中创建 Facebook 对象

    _facebook = [[Facebook alloc] init];
    

    我有一个表格视图。当用户点击一个条目时,会弹出一个包含 3 个选项的操作表

    1 发送电子邮件

    在 Facebook 上分享 2 次​​p>

    3 从 Facebook 注销:仅当用户登录时它才应该存在,但目前它存在并且可以正常工作。 我用

    [_facebook logout:self]; 
    

    还有方法

    - (void)fbDidLogout is called.
    

    当用户点击“在 Facebook 上分享”时,运行此代码

    SBJSON *jsonWriter = [SBJSON new];
    NSDictionary *actionLinks = [NSArray arrayWithObjects:
                                    [NSDictionary dictionaryWithObjectsAndKeys:
                                                @"Some text", @"text",
                                            @"http://try.com",@"href", nil], nil];
    
    NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks];
    
    NSDictionary* attachment = [NSDictionary dictionaryWithObjectsAndKeys:
                                           @"is using...", @"name",
                                        @"It's an app….", @"caption",
                                        @"Download!", @"description",
                                        @"http://ituneslink", @"href",
                                        nil];
    
    NSString *attachmentStr = [jsonWriter stringWithObject:attachment];
    NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                                           API_KEY, @"api_key",
                                           @"Message",  @"user_message_prompt",
                                           actionLinksStr, @"action_links",
                                           attachmentStr, @"attachment",nil];
    
            [_facebook dialog:@"stream.publish" andParams:params andDelegate:self];
    
            [jsonWriter release];
    

    在viewDidLoad中,我也试过用

    _facebook.accessToken    = [[NSUserDefaults standardUserDefaults] stringForKey:@"AccessToken"];
    _facebook.expirationDate = (NSDate *) [[NSUserDefaults standardUserDefaults] objectForKey:@"ExpirationDate"];
    
    _permissions =  [[NSArray arrayWithObjects: @"read_stream", @"offline_access",nil] retain];
    
      if ([_facebook isSessionValid] == NO) {
          [_facebook authorize:API_KEY permissions:_permissions delegate:self];
      }
    

    输入 fbDidLogin:

    [[NSUserDefaults standardUserDefaults] setObject:_facebook.accessToken forKey:@"AccessToken"];
     [[NSUserDefaults standardUserDefaults] setObject:_facebook.expirationDate forKey:@"ExpirationDate"];
    

    但永远不会调用 fbDidLogin。

    编辑

    我使用 FB october api 解决了(虽然我没有找到 11 月的解决方案)。

    【讨论】:

    • @Fran:在这种情况下,您应该将此信息编辑到问题中。无论您后来为“解决某些问题”所做的一切都应该作为答案发布并被接受。
    • @Bill 蜥蜴:谢谢。但是是否还有另一个问题(即我已经接受了我的答案)?
    • @Fran:不,当没有其他答案有效时接受你自己的答案是完全可以的。不过,您确实需要确保您确实回答了这个问题。这似乎是一个后续问题。我说的对吗?
    • @Bill the Lizard:实际上,上面的代码适用于FB october api,但不适用于最后一个(11月)。
    猜你喜欢
    • 1970-01-01
    • 2011-09-07
    • 1970-01-01
    • 1970-01-01
    • 2011-05-19
    • 2015-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多