0
- (id)init {
if (self == [super init]) {
    facebook = [[Facebook alloc] initWithAppId:kAppId];

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

    if (![facebook isSessionValid]) {
        permissions =  [[NSArray arrayWithObjects:
                         @"read_stream", @"user_birthday", 
                         @"publish_stream", nil] retain];
        [facebook authorize:permissions delegate:self];
    }

    [self login];
}
return self;

}

- (void)login {
if (![_session isConnected]) {
    [self postToWall];  
}


if (![facebook isSessionValid]) {
   [facebook authorize:permissions delegate:self];
}
}

- (void)fbdidLogin {
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.accessToken forKey:@"FBAccessToken"];
[[NSUserDefaults standardUserDefaults] setObject:self.facebook.expirationDate forKey:@"FBExpirationDate"];

// User has logged in to Facebook, now get their userId from Facebook
[facebook requestWithGraphPath:@"me" andDelegate:self];
}

-(void)postToWall
{
SBJSON *jsonWriter = [[SBJSON new] autorelease];

NSDictionary *actionLinks = [NSArray arrayWithObjects:[NSDictionary dictionaryWithObjectsAndKeys:
                                                       @"Always Running",@"text",@"http://itsti.me/",@"href", nil], nil];

NSString *actionLinksStr = [jsonWriter stringWithObject:actionLinks];
NSDictionary *attachment = [NSDictionary dictionaryWithObjectsAndKeys:
                            @"Your Happiness!", @"name",
                            @"asda", @"caption",
                            @"asdf", @"description",
                            nil];
NSString *attachmentStr = [jsonWriter stringWithObject:attachment];
NSMutableDictionary *params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
                               @"Share on Facebook",  @"user_message_prompt",
                               actionLinksStr, @"action_links",
                               attachmentStr, @"attachment",
                               nil];


[facebook dialog:@"stream.publish" andParams:params andDelegate:self];

}

- (BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url {

return [facebook handleOpenURL:url]; 
}

这是我调用facebook对话框的方法。但是每次我点击发布时;权限框首先出现。我需要在发布对话框出现后给予权限。我想给予权限,我想要它保存它;保存后我不想再看到权限框。我该怎么做?我的代码有什么问题?

编辑:我的访问令牌和到期日期为空我猜这是因为这个。

4

2 回答 2

1

有几件事要检查,您调用方法登录处理方法“fbdidLogin”而不是 fbDidLogin。这是区分大小写的。

确保在您的视图控制器头文件中添加了 FBSessionDelegate 作为您支持的协议之一。这可能是不调用 fbDidLogin 的原因。您总是可以添加一个 NSLog 来验证是否达到了 fbDidLogin 方法。

于 2011-08-16T16:39:06.257 回答
0

您需要实现 Facebook 的单点登录功能。

http://developers.facebook.com/docs/guides/mobile/#ios

此链接有实现 SSO 的分步指南,如果您仔细遵循它,您的应用将请求一次权限,然后它将永远不会再次请求权限(直到用户删除您的应用)

请注意,您需要访问 www.facebook.com 并使用“开发者工具”创建一个新的 Facebook 应用程序,您将成为该应用程序的管理员,并且您将拥有您的 AppID,您也将需要它。

于 2011-08-16T09:15:18.100 回答