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 { ... }

このメソッドがNSInvalidArgumentExceptionmessage とともにスローされるまれなケースがあります。Access options are not permitted for this account type. The options argument must be nil.これは からスローされ[ACAccountStore requestAccessToAccountsWithType:options:completion:]ます。

のAppleのドキュメントを確認するとACAccountStore、そのメソッドに対する次のコメントが表示されます。

「特定のアカウント タイプ (Facebook など) にはオプション ディクショナリが必要です。このようなアカウント タイプにオプション ディクショナリが提供されていない場合、このメソッドは NSInvalidArgumentException をスローします。逆に、アカウント タイプにオプション ディクショナリが必要ない場合、オプション パラメータはゼロ。」

Apple は、Facebook を除いてこれを nil にする必要がありますが、このメソッドは Facebook から呼び出されているため、これは Facebook または iOS 6.0/.1 のバグである可能性がありますが、この問題について Web 上で何も見つけることができませんでした。

何か案は?

4

1 に答える 1

4

このバグの回避策を見つけました。バグはここにも記載されていることに注意してください: https://developers.facebook.com/bugs/139251032898548

Facebook SDK は、accountTypeWithAccountTypeIdentifier の戻り値に対して null チェックを行いません。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 に答える