我的应用在保存 access_token 时遇到问题。问题是,当 iPhone 没有安装 Facebook 应用程序时,safari 会处理这个问题,没有问题。但是一旦 iPhone 安装了 Facebook 应用程序。它只是不保存访问 token ,每次需要对 Facebook 执行某些操作时都会打开 Facebook 应用程序。然后它说,你已经给了......许可......
这就是我在 viewdidload 中所做的,以便第一次请求许可并从用户默认值接收访问 token :
facebook = [[Facebook alloc] initWithAppId:@"APPID"];
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
if ([defaults objectForKey:@"FBAccessTokenKey"]
&& [defaults objectForKey:@"FBExpirationDateKey"]) {
facebook.accessToken = [defaults objectForKey:@"FBAccessTokenKey"];
facebook.expirationDate = [defaults objectForKey:@"FBExpirationDateKey"];
}
NSArray* permissions = [[NSArray arrayWithObjects:
@"read_stream", @"offline_access", nil] retain];
if (![facebook isSessionValid]) {
[facebook authorize:permissions delegate:self];
}
这就是我在 fbdidlogin 中所做的:
- (void)fbDidLogin {
NSUserDefaults *defaults = [NSUserDefaults standardUserDefaults];
[defaults setObject:[facebook accessToken] forKey:@"FBAccessTokenKey"];
[defaults setObject:[facebook expirationDate] forKey:@"FBExpirationDateKey"];
[defaults synchronize];
}
但是对于某种方式,当 Facebook 应用程序控制时,这只是行不通......每次 View 确实加载时,它都会授权,再次加载。
有人知道吗?
谢谢!
顺便说一句:我还有以下行:
(BOOL)application:(UIApplication *)application handleOpenURL:(NSURL *)url { return [[controller facebook] handleOpenURL:url]; }
最佳答案
我刚遇到这个问题,相信我可能已经找到了您的解决方案。当您在 Facebook 上创建应用程序时,您必须编辑您的应用程序设置以允许本地 iOS 应用程序。选择的 ios 包 ID 必须与您正在创建的应用程序中的包 ID 完全匹配。 Facebook 声明他们会在授权您的应用程序之前检查这一点。有趣的是,如果您从设备中删除 facebook 应用程序,然后尝试使用网络浏览器对其进行身份验证,并且似乎完全绕过此“安全”。这就是乔斯解决方案“有效”的原因。 Facebook 不会发回错误消息,因此追踪起来很有趣。我想我会把这个答案放在那里,希望能为 future 的开发者省去一些麻烦。我希望这会有所帮助。
关于iphone - fbDidLogin 的问题从未调用过 iOS,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7044412/