0

私は現在Social.frameworkのみを使用しており(FacebookSDKは使用していません)、基本的なユーザーデータのリクエストとアクセスを開始しています。これが私が持っているすべてのコードです(お気づきのように、いくつかのプロパティが外部で宣言されています)。適切な権限を取得するという点ではすべて正常に機能しますが、ユーザーのプロフィール写真を要求すると、次の出力エラーが発生します。

2013-01-27 21:28:44.324 TestApp[9230:1a703] Account saved to accountStore
2013-01-27 21:28:45.002 TestApp[9230:1d603] (null)
2013-01-27 21:28:45.003 TestApp[9230:1d603] Request error: The operation couldn’t be     completed. (Cocoa error 3840.)

そしてここにコードがあります:

- (IBAction)btnFbLoginPressed:(id)sender
{
ACAccountType *fbAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier: ACAccountTypeIdentifierFacebook];
NSArray *permissions = @[@"email"];
self.requestAccessOptions = @{ACFacebookAppIdKey:FB_API_KEY, ACFacebookPermissionsKey:permissions, ACFacebookAudienceKey:ACFacebookAudienceOnlyMe};

[self.accountStore requestAccessToAccountsWithType:fbAccountType options:self.requestAccessOptions completion:^(BOOL granted, NSError *e) {
    if (granted && e == nil) {

        NSArray *readPermissions = @[@"user_photos"];
        NSDictionary *readAcccessOptions = @{ACFacebookAppIdKey:FB_API_KEY, ACFacebookPermissionsKey:readPermissions, ACFacebookAudienceKey:ACFacebookAudienceOnlyMe};

        [self.accountStore requestAccessToAccountsWithType:fbAccountType options:readAcccessOptions completion:^(BOOL granted, NSError *e) {
            if (granted && e == nil) {

                NSArray *accounts = [self.accountStore accountsWithAccountType:fbAccountType];
                self.facebookAccount = [accounts lastObject];

                [self.accountStore saveAccount:self.facebookAccount withCompletionHandler:^(BOOL success, NSError *error) {
                    if (error != nil || !success) {
                        NSLog(@"Error saving account to accountStore: %@", error.localizedDescription);
                    } else {
                        NSLog(@"Account saved to accountStore");
                    }
                }];

                NSString *uid = [NSString stringWithFormat:@"%@", [[self.facebookAccount valueForKey:@"properties"] valueForKey:@"uid"]];
                NSString *url = [NSString stringWithFormat:@"https://graph.facebook.com/%@/picture", uid];
                NSURL *profilePictureURL = [NSURL URLWithString:url];

                SLRequest *profilePictureRequest = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodGET URL:profilePictureURL parameters:nil];
                profilePictureRequest.account = self.facebookAccount;

                [profilePictureRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *e)
                 {
                     NSDictionary *responseDataDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&e];
                     NSLog(@"%@", responseDataDictionary);
                     if (e != nil) {
                         NSLog(@"Request error: %@", e.localizedDescription);
                     } else {

                     }
                 }];

            } else {
                NSLog(@"Read permissions request error: %@", e.localizedDescription);
            }
        }];

    } else {
        NSLog(@"Basic permissions request error: %@", e.localizedDescription);
    }
}];
}

reponseDataDictionaryがnullであり、データを解析するときに何かが発生することがわかります。同じエラーコードについてSO上の他のスレッドがいくつかあることに気づきましたが、これまでのところ運がありません。私の推測では、1)Facebookコードに問題があるか、2)データを誤って解析しています。どんな助けでもありがたいです!

注:ソーシャル/アカウントフレームワークのみを使用することに固執したいと思います。

更新:コメントの提案のおかげでわずかな変更。

変更されたコード:

[profilePictureRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *e)
{
   NSLog(@"Request error value: %@", e.localizedDescription);

   NSError *jsonError = nil;
   NSDictionary *responseDataDictionary = [NSJSONSerialization JSONObjectWithData:responseData options:NSJSONReadingAllowFragments error:&jsonError];
   NSLog(@"Response data dictionary value: %@", responseDataDictionary);
   if (jsonError != nil) {
       NSLog(@"Serialization error: %@", jsonError.localizedDescription);
   } else {
       NSLog(@"Serialization successful");
   }
}];

出力:

2013-01-28 18:55:16.265 TestApp[9565:1ae03] Account saved to accountStore
2013-01-28 18:55:17.640 TestApp[9565:1b503] Request error value: (null)
2013-01-28 18:55:17.640 TestApp[9565:1b503] Response data dictionary value: (null)
2013-01-28 18:55:17.642 TestApp[9565:1b503] Serialization error: The operation couldn’t be completed. (Cocoa error 3840.)
4

1 に答える 1

1

profilePictureRequest は、JSON ではなく画像を返しています。+ (CIImage *)imageWithData:(NSData *)data応答を画像に変換するために使用します。

于 2013-01-28T19:13:15.280 に答える