11

使用 Facebook iOS SDK 3.1.1,我正在使用此调用执行登录 -

NSArray *permissions = [[NSArray alloc] initWithObjects: @"email", @"user_birthday", @"user_location", nil];

@try {
    return [FBSession openActiveSessionWithReadPermissions:permissions
                                              allowLoginUI:allowLoginUI
                                         completionHandler:^(FBSession *session,
                                                             FBSessionState state,
                                                             NSError *error) {
                                             [self sessionStateChanged:session
                                                                 state:state
                                                                 error:error];
                                         }];
}
@catch { ... }

在极少数情况下,此方法会抛出NSInvalidArgumentException消息Access options are not permitted for this account type. The options argument must be nil.,这是从 中抛出的[ACAccountStore requestAccessToAccountsWithType:options:completion:]

检查 Apple 的文档ACAccountStore,我看到了该方法的评论:

“某些帐户类型(例如 Facebook)需要选项字典。如果未为此类帐户类型提供选项字典,则此方法将抛出 NSInvalidArgumentException。相反,如果帐户类型不需要选项字典,则选项参数必须为零。”

除了 Facebook,Apple 要求它为零,但这个方法是从 Facebook 调用的,所以也许这是一个错误 - 无论是在 Facebook 还是在 iOS 6.0/.1,但我在网上找不到任何关于这个问题的信息。

有任何想法吗?

4

1 回答 1

4

我找到了解决此错误的方法。请注意,此处也描述了该错误:https ://developers.facebook.com/bugs/139251032898548

Facebook SDK 不会对 accountTypeWithAccountTypeIdentifier 的返回值进行空检查。请参阅https://github.com/facebook/facebook-ios-sdk/blob/master/src/FBSystemAccountStoreAdapter.m?source=c#L176

要解决此问题,您可以在尝试使用 facebook lgoin 之前进行以下检查:

if ([[[ACAccountStore alloc]init] accountTypeWithAccountTypeIdentifier:@"com.apple.facebook"] == nil) {
   NSLog(@"Cannot proceed, not facebook account type identifier");
   return;
}
于 2013-05-22T05:31:29.343 回答