调用[FBSession openActiveSessionWithPermissions ...]

2019-07-03 16:59发布

与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. Access options are not permitted for this account type. The options argument must be nil. ,这是从抛出[ACAccountStore requestAccessToAccountsWithType:options:completion:]

检查的苹果的文档ACAccountStore ,我看到那个方法此评论:

“某些帐户类型(如Facebook)需要一个选项字典。此方法只要这种帐户类型不设置选项字典将抛出NSInvalidArgumentException。相反,如果该帐户类型不需要选择词典,选项参数必须是零。”

苹果公司要求这是零,除了脸谱,但这种方法从Facebook调用,所以也许这是一个错误 - 无论是在Facebook或在iOS的6.0 / .1但我找不到任何关于这个问题在网络上任何东西。

有任何想法吗?

Answer 1:

我发现了一个解决有关此错误。 请注意,这个bug在这里描述,以及: 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;
}


文章来源: NSInvalidArgumentException thrown from ACAccountStore when calling [FBSession openActiveSessionWithPermissions…] on iOS 6.0 and iOS 6.0.1