10

次のコードを使用して ACAccountStore からアカウントを取得しようとしています:

- (void) facebookLoginOnSuccess: (void (^)(void)) successBlock onError:(void(^)(NSError *error))errorBlock{

    self.facebookPermissions = @[
        @"offline_access",
        @"publish_stream",
        @"user_birthday",
        @"user_location",
        @"email"
    ];
    
        
    NSDictionary *options = @{
        @"ACFacebookAppIDKey": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"],
        @"ACFacebookAppVersionKey": @"1.0",
        @"ACFacebookPermissionsKey": self.facebookPermissions,
        @"ACFacebookPermissionGroupKey": @"write"
    };
    
    [self accountLoginFor:ACAccountTypeIdentifierFacebook withOptions:options OnSuccess:successBlock onError:errorBlock];

}

- (void) accountLoginFor: (NSString *) accountTypeID withOptions: (NSDictionary *) options OnSuccess: (void (^)(void)) successBlock onError:(void(^)(NSError *error))errorBlock{

    ACAccountStore *accountStore = [[ACAccountStore alloc] init];
    ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:accountTypeID];
    
    [accountStore requestAccessToAccountsWithType:accountType
                                          options:options
                                       completion:^(BOOL granted, NSError *error){
        if (granted){
            NSArray *accountsArray = [accountStore accountsWithAccountType:accountType];
            NSLog(@"%@",accountsArray);
        }
        else {
            NSLog(@"Error accessing account: %@", [error localizedDescription]);
        }
    }];
    
}

しかし、私はこのエラーが発生しています:

Error Domain=com.apple.accounts Code=6 "The operation couldn't be completed. (com.apple.accounts error 6.)"

そして、関連するものは何も見つかりません。この質問だけです。何が間違っている可能性がありますか?

アップデート

これは Apple Developer Docs で見つけました。

アカウント フレームワーク

Facebook アカウントへのアクセスを要求する場合、オプション ディクショナリで必要な唯一のキーは ACFacebookAppIdKey です。ACFacebookPermissionGroupKey と ACFacebookAppVersionKey は廃止されました。

publish_streamなどの ACFacebookPermissionsKey で書き込み権限を要求する場合、ACFacebookAudienceKey の値を指定する必要があります。これは、ACFacebookAudienceEveryoneACFacebookAudienceFriends、またはACFacebookAudienceOnlyMeのいずれかです。

そこで、オプションを次のように変更しました。

    NSDictionary *options = @{
        @"ACFacebookAppIDKey": [[NSBundle mainBundle] objectForInfoDictionaryKey:@"FacebookAppID"],
        @"ACFacebookPermissionsKey": self.facebookPermissions,
        @"ACFacebookAudienceKey": ACFacebookAudienceFriends
    };

しかし、私は同じエラーが発生しています。

4

3 に答える 3

34

iOS 6 の [設定] からアカウントをセットアップしていない場合、エラー コード6がスローされます。ユーザーが単に許可を拒否した場合は、エラー コード7がスローされます。ケース 6 の場合は、最初に [設定] でアカウントを設定するようユーザーに依頼することをお勧めします。

NSDictionary *options = @{
ACFacebookAppIdKey: @"1234567890",
ACFacebookPermissionsKey: @[@"publish_stream"],
ACFacebookAudienceKey: ACFacebookAudienceFriends
};

[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:options completion:^(BOOL granted, NSError *error)
{
    if (granted)
    {
        NSArray *accounts = [self.accountStore accountsWithAccountType:facebookAccountType];

        if([accounts count]>0)
            self.facebookAccount = [accounts lastObject];
    }
    else
    {
        dispatch_async(dispatch_get_main_queue(), ^{

            // Fail gracefully...
            NSLog(@"%@",error.description);
            if([error code]== ACErrorAccountNotFound)
                [self throwAlertWithTitle:@"Error" message:@"Account not found. Please setup your account in settings app."];
            else
                [self throwAlertWithTitle:@"Error" message:@"Account access denied."];

        });
    }
}];
于 2012-10-16T10:31:44.367 に答える
4

jAmi は正しい考えを持っていますが、コード内のマジック ナンバーの考えは好きではありません。数値が組み込まれた列挙型があります (ACErrorCode)。

于 2012-11-05T19:41:21.520 に答える
1

私自身の解決策は、lib を直接試すのではなく、Facebook SDKを使用することでしたが、現在は機能しています。

于 2012-10-04T20:56:37.050 に答える