gpt4 book ai didi

ios - Facebook iOS SDK 3.6 startWithGraphPath 完成 block 未执行

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:22:45 24 4
gpt4 key购买 nike

我已经与 Facebook 集成,这样我就可以将状态发布到我的供稿中。我的一些代码基于 publish to feed developer tutorial .当从我的 iOS 应用程序运行以下图形 API 请求时,请求的完成 block 从未被调用,并且 XCode 调试日志中没有出现错误。

[FBRequestConnection
startWithGraphPath:@"me/feed"
parameters:params
HTTPMethod:@"POST"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
if (error) {
DLog(@"error: domain = %@, code = %d", error.domain, error.code);
} else {
DLog(@"Posted action, id: %@", result[@"id"]);
}
}];

我有两个方便的函数,它们在执行此请求之前针对当前的 activeSession 执行检查。它们看起来像这样:

+ (BOOL)facebookSessionIsOpen {
return (FBSession.activeSession.isOpen);
}

+ (BOOL)facebookSessionHasPublishPermissions {
if ([FBSession.activeSession.permissions indexOfObject:@"publish_actions"] == NSNotFound ||
[FBSession.activeSession.permissions indexOfObject:@"publish_stream"] == NSNotFound ||
[FBSession.activeSession.permissions indexOfObject:@"manage_friendlists"] == NSNotFound) {
return NO;
} else {
return YES;
}
}

这两个函数都返回 YES,表示具有必要发布权限的事件 session 。更令人困惑的是,我可以使用以下代码在成功执行相同的检查后毫无问题地提取用户的个人资料(提取个人资料不需要授予发布权限):

[FBRequestConnection
startWithGraphPath:@"me"
parameters:[NSDictionary dictionaryWithObject:@"picture,id,birthday,email,location,hometown" forKey:@"fields"]
HTTPMethod:@"GET"
completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
NSDictionary* resultDict = (NSDictionary*)result;

NSString* emailAddress = resultDict[@"email"];
NSString* location = resultDict[@"location"][@"name"];
NSString* birthday = resultDict[@"birthday"];
NSString* homeTown = resultDict[@"hometown"][@"name"];
...
}];

关于如何调试这个问题有什么建议吗?

最佳答案

原来问题出在线程问题上。 Facebook iOS SDK 似乎不喜欢在与您调用 openActiveSessionWithReadPermissions 的线程不同的线程上执行 FBRequest 并立即死锁。事实证明我在一个单独的线程中运行 postStatus 请求,如下所示:

dispatch_queue_t some_queue = dispatch_queue_create("some.queue.name", NULL);
dispatch_async(some_queue, ^{
[FacebookHelper postStatusToFacebookUserWall:newStatus withImage:imageData];
}];

确保您的 openActiveSessionWithReadPermissions 和任何 FBRequest 排列都发生在同一线程上,否则您可能会遇到这些静默故障。

关于ios - Facebook iOS SDK 3.6 startWithGraphPath 完成 block 未执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18137976/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com