Обновление изображения профиля Twitter с помощью iOS SLRequest приводит к ошибке 215: неверные данные аутентификации

Я пытаюсь опубликовать новое изображение профиля в соответствии с документацией Twitter по адресу https://dev.twitter.com/rest/reference/post/account/update_profile_image и вот мой код:

NSData *jpeg = UIImageJPEGRepresentation(img, 0.9);
NSString *base64 = [jpeg base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1.1/account/update_profile_image.json"];
NSDictionary *params = @{@"image" : base64
                         };
SLRequest *request =
[SLRequest requestForServiceType:SLServiceTypeTwitter
                   requestMethod:SLRequestMethodPOST
                             URL:url
                      parameters:params];
[request setAccount:self.twitterAccount];
[request performRequestWithHandler:^(NSData *responseData,
                                     NSHTTPURLResponse *urlResponse,
                                     NSError *error) {
    ...
}

Но ответ URL:

errors =     (
            {
        code = 215;
        message = "Bad Authentication data.";
    }
);

Что я делаю неправильно? Мой ACAccount действителен (я только что попытался выйти из Twitter и войти в него в Settings.app).


person Can Poyrazoğlu    schedule 13.01.2016    source источник
comment


Ответы (1)


Ваш код выглядит нормально, но вы должны что-то упустить.

Удостоверься что:

  • Что ваша учетная запись Twitter подключена и указана в настройках Twitter приложения «Настройки». Я знаю, что вы уже проверили, но важно, чтобы вы проверили это. Может быть, даже перезагрузите телефон и убедитесь, что после этого ваш дескриптор Twitter присутствует.
  • Ваше приложение запросило и предоставило разрешение на доступ к учетной записи (используя метод requestAccessToAccountsWithType). После предоставления разрешения вы должны увидеть свое приложение в списке настроек Twitter (в приложении «Настройки») в разделе «РАЗРЕШИТЬ ЭТИ ПРИЛОЖЕНИЯ ИСПОЛЬЗОВАТЬ ВАШУ УЧЕТНУЮ ЗАПИСЬ».
  • Учетная запись Twitter, которую вы устанавливаете для SLRequest, действительна и не является nil.

Учитывая указанные выше условия, я только что смог успешно изменить изображение своего профиля. Вот пример кода, основанный на предоставленном вами коде:

ACAccountStore *accountStore = [[ACAccountStore alloc] init];
ACAccountType *accountType = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
[accountStore requestAccessToAccountsWithType:accountType options:nil completion:^(BOOL granted, NSError *error)
{
    if (granted)
    {
        NSArray *accounts = [accountStore accountsWithAccountType:accountType];
        ACAccount *twitterAccount = [accounts lastObject];

        NSData *jpeg = UIImageJPEGRepresentation([UIImage imageNamed:@"photo.jpg"], 0.9);
        NSString *base64 = [jpeg base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength];
        SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
                                                requestMethod:SLRequestMethodPOST
                                                          URL:[NSURL URLWithString:@"https://api.twitter.com/1.1/account/update_profile_image.json"]
                                                   parameters:@{@"image" : base64}];
        [request setAccount:twitterAccount];
        [request performRequestWithHandler:^(NSData *responseData,
                                             NSHTTPURLResponse *urlResponse,
                                             NSError *error)
         {
             NSLog(@"%@", [NSJSONSerialization JSONObjectWithData:responseData options:kNilOptions error:nil]);
         }];
    }
}];
person Artal    schedule 16.01.2016
comment
Это было мое плохое. Не знаю, как я допустил такую ​​простую ошибку, но мой self.twitterAccount был равен нулю. В некоторых моих тестах этого не было, я понятия не имею, почему это не сработало в то время. Но тогда всегда было ноль. После получения действительного объекта учетной записи Twitter все заработало. - person Can Poyrazoğlu; 18.01.2016
comment
Не могли бы вы добавить небольшое обновление в свой ответ относительно проверки того, равен ли twitterAccount нулю, что было фактическим решением моей проблемы, чтобы я мог вознаградить вас наградой? - person Can Poyrazoğlu; 19.01.2016
comment
@CanPoyrazoğlu готово (добавлено в список на всякий случай). Спасибо! :) - person Artal; 19.01.2016