我一直在环顾四周,看到类似的帖子,但没有像这样可以给我答案的东西。这是我的应用程序设置和流程:
- 用户必须通过 Facebook 登录,使用 Facebook Graph。LoginView 以模态方式呈现,非动画
- 当用户登录时,我可以检索 FBID 并使用此 fbid 将其发送到我的网络服务 (REST)
- Web 服务从 NSURL 获取 FBID 并将其与数据库匹配以检索其他用户信息
- 使用 JSONserialization 我解析从 Web 服务接收到的 JSON 并将其显示在视图中
问题:除了我从 Facebook 获得的 FBID 之外,所有内容都返回 NULL。但是,如果我从 Facebook 注销然后登录,那就是它起作用的时候。
这是我的代码:
viewDidAppear 方法:
-(void)viewDidAppear:(BOOL)animated
{
[super viewDidAppear:NO];
if (FBSession.activeSession.isOpen) {
[self populateUserDetails];
}
//Connect to WebService
NSURL *url = [NSURL URLWithString:[NSString stringWithFormat:@"http://atnightcorp.com/api/member/id/%@/format/json", fbid]];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[NSURLConnection connectionWithRequest:request delegate:self];
NSArray *pics = [member valueForKeyPath:@"photos"];
NSString *picCount = [NSString stringWithFormat:@"%d", [pics count]];
[photosCount setTitle:picCount forState:UIControlStateNormal];
NSLog(@"PHOTO: %@", picCount);
NSLog(@"FB: %@", fbid);
}
我尝试将 NSURL 请求和连接代码放在 viewDidLoad 中,但后来我什么也没有得到。
我的 NSURLConnection 方法:
- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
{
data = [[NSMutableData alloc]init];
}
- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)theData
{
[data appendData:theData];
}
- (void)connectionDidFinishLoading:(NSURLConnection *)connection
{
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
member = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableLeaves error:nil];
}
- (void)connection:(NSURLConnection *)connection didFailWithError:(NSError *)error
{
UIAlertView *errorView = [[UIAlertView alloc]initWithTitle:@"Error" message:@"The download could not complete. Please make sure you are connected to internet" delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil];
[errorView show];
[UIApplication sharedApplication].networkActivityIndicatorVisible = NO;
}
您在上面看到的 populateUserDetails 方法:
- (void)populateUserDetails
{
if (FBSession.activeSession.isOpen) {
[[FBRequest requestForMe] startWithCompletionHandler:
^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error) {
if (!error) {
self.userProfileImage.profileID = user.id;
self.navigationItem.title = user.name;
self.fbid = user.id;
}
}];
}
}
一旦用户登录,此方法基本上设置 FBID。您应该知道的其他重要事项可以帮助您理解我的项目:
- FBID 在我的 .H 文件中设置为 NSString 属性
- 所有 facebook 连接的事情都在 AppDelegate 中进行
- 找出用户是谁后,我需要动态设置 NSURL。
- 如果我在 NSURL 中手动输入 FBID,那么它可以工作。
- 一切都应该在用户登录时执行,我认为检索 fbid 和从 Web 服务接收数据的时间是错误的,但我无法修复它。
- 如果您需要其他任何东西,我会详细说明并在需要时发布更多代码。-
请帮忙,因为我过去 3 天一直在寻找答案。