iOS:Facebooklogin访问令牌错误:由于模拟器错误,从NSUserDefaults回落到加载访问令牌

根据说明configuration后,我一直在得到这个错误,我无法在我的应用程序成功地使用Facebooklogin。 我在XCode 8.1上运行它,并使用一个iOS 10.1模拟器。

我遵循Facebook iOS SDK指南中的步骤,并将Facebookloginbutton放在我的视图控制器中。 我显示了NSUserdefaults,其中一个键是“com.facebook.sdk:serverConfiguration”,所以我相信这是保存在那里。

- (void)viewDidLoad { [super viewDidLoad]; if ([FBSDKAccessToken currentAccessToken]) { // User is logged in, do work such as go to next view controller. NSLog(@"test"); } else { FBSDKLoginButton *loginButton = [[FBSDKLoginButton alloc] init]; loginButton.center = self.view.center; [self.view addSubview:loginButton]; } _loginButton.readPermissions = @[@"public_profile", @"email", @"user_friends"]; NSLog(@"%@", [[NSUserDefaults standardUserDefaults] dictionaryRepresentation]); } 

如果问题是iOS模拟器在应用程序重新启动后退出,这是由Facebook SDK中的错误引起的。 它可以防止模拟器caching访问令牌。

您可以通过添加以下行来解决这个问题:

key = [NSString stringWithFormat:@"%@_fix", key];

FBSDKKeychainStore.m:94FBSDKKeychainStore.m:135之前:

[[NSUserDefaults standardUserDefaults] setObject:value forKey:key];

为了摆脱这些相当烦人的日志消息( 就是这些 ),请转到FBSDKCoreKit的FBSDKKeychainStore.m文件和注释行93和134:

 //NSLog(@"Falling back to storing access token in NSUserDefaults because of simulator bug"); 

Voilá…走了!

注意: 这是Facebook SDK for iOS版本4.23.0的最新版本。

对于CocoaPods:该文件可以在Xcode工作区中find:
Pods> Pods> FBSDKCoreKit> FBSDKKeychainStore.m