iOS - Facebook SDK allowLoginUI 不起作用
Posted
技术标签:
【中文标题】iOS - Facebook SDK allowLoginUI 不起作用【英文标题】:iOS - Facebook SDK allowLoginUI not working 【发布时间】:2014-07-23 07:07:01 【问题描述】:我正在尝试使用以下代码从 facebook 获取基本用户信息
- (void)viewDidLoad
[super viewDidLoad];
if(![[FBSession activeSession] isOpen])
NSLog(@"Creating new session");
[FBSession openActiveSessionWithPermissions:nil
allowLoginUI:NO
completionHandler:^(FBSession *session, FBSessionState state, NSError *error)
[self makeRequestForUserData];
];
else
- (void) makeRequestForUserData
[FBRequestConnection startForMeWithCompletionHandler:^(FBRequestConnection *connection, id result, NSError *error)
if (!error)
NSLog(@"user info: %@", result);
[self.txtDetails setText: [result string]];
//[[FBSession activeSession] closeAndClearTokenInformation];
else
NSLog(@"error %@", error.description);
];
当 closeAndClearToken 被注释并且 allowLoginUI 设置为 NO 或 YES 时没有发生错误并且我得到数据,问题是是否有人登录到 fb,我得到最后一个登录用户的数据。当我取消注释 closeAndClearToken 我收到以下错误:
错误 = 代码 = 2500; message = "必须使用活动访问令牌来查询有关当前用户的信息。"; 类型 = OAuthException; ;
【问题讨论】:
您是否在 facebook 上注册了您的应用程序? @BogdanSomlea 是的,我做到了 所以我没想到会这样,但问题是,我在 viewDidLoad 中编写了这段代码并将其放入 viewDidAppear 工作正常。 因为在 viewDidLoad 中,你的 activeSession 状态,如果你刚刚创建了会话,它还没有打开。这一切的发生都是因为 openActiveSession 在不同的线程上运行并且还没有被带回主线程 请将此问题标记为已解决 【参考方案1】:这是一个类方法,带有completionHandler,您将在其中获取用户。只要在任何地方调用这个方法,它应该可以工作,如果你在 facebook 上设置你的应用程序。
+ (void)requestFacebookDataWithCompletionHandler:(void (^)(NSDictionary *))handler
// If the session state is any of the two "open" states when the button is clicked
if (FBSession.activeSession.state == FBSessionStateOpen
|| FBSession.activeSession.state == FBSessionStateOpenTokenExtended)
[FBSession.activeSession closeAndClearTokenInformation];
if (handler)
handler(nil);
// If the session state is not any of the two "open" states when the button is clicked
else
// Open a session showing the user the login UI
// You must ALWAYS ask for public_profile permissions when opening a session
[FBSession openActiveSessionWithReadPermissions:@[@"public_profile",@"email"]
allowLoginUI:YES
completionHandler:
^(FBSession *session, FBSessionState state, NSError *error)
[[FBRequest requestForMe] startWithCompletionHandler: ^(FBRequestConnection *connection,
NSDictionary<FBGraphUser> *user,
NSError *error)
if (!error)
if (handler)
handler(user);
];
DAppDelegate* appDelegate = [UIApplication sharedApplication].delegate;
[appDelegate sessionStateChanged:session state:state error:error];
];
您还必须在 AppDelegate 中添加一些方法;但你会在那里找到这些方法: https://developers.facebook.com/docs/facebook-login/ios/v2.0 。希望它会工作
【讨论】:
我现在得到的错误是:对端点“我”的请求出错:必须为调用此端点指定一个打开的 FBSession。以上是关于iOS - Facebook SDK allowLoginUI 不起作用的主要内容,如果未能解决你的问题,请参考以下文章
Facebook SDK:在IOS7上无法完成操作(com.facebook.sdk错误2)
Facebook SDK 错误 Domain=com.facebook.sdk Code=5 在 ios 中获取好友列表时
facebook-ios-sdk 是不是使用 iOS 6 Facebook 集成来支持登录而不打开本机 Facebook 应用程序?