使用 iOS SLRequest 更新 Twitter 个人资料图片导致错误 215 错误的身份验证数据
Updating Twitter profile picture with iOS SLRequest results in error 215 bad authentication data
我正在尝试根据 https://dev.twitter.com/rest/reference/post/account/update_profile_image 上的 Twitter 文档 post 新个人资料图片,这是我的代码:
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
有效(我刚刚尝试在 Settings.app 中退出和登录 Twitter)。
你的代码看起来不错,但你肯定遗漏了什么。
确保:
- 您的 Twitter 帐户已连接并列在“设置”应用的 Twitter 设置中。我知道你已经检查过了,但你必须核实它。甚至可能重新启动您的 phone 并确保之后您的 Twitter 句柄在那里。
- 您的应用已请求并授予权限
访问帐户(使用
requestAccessToAccountsWithType
方法)。授予权限后,您应该会在 "ALLOW THESE APPS TO USE YOUR ACCOUNT". 下的 Twitter 设置(在“设置”应用程序中)中看到您的应用程序
- 您设置为
SLRequest
的 Twitter 帐户有效并且不是 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]);
}];
}
}];
我正在尝试根据 https://dev.twitter.com/rest/reference/post/account/update_profile_image 上的 Twitter 文档 post 新个人资料图片,这是我的代码:
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
有效(我刚刚尝试在 Settings.app 中退出和登录 Twitter)。
你的代码看起来不错,但你肯定遗漏了什么。
确保:
- 您的 Twitter 帐户已连接并列在“设置”应用的 Twitter 设置中。我知道你已经检查过了,但你必须核实它。甚至可能重新启动您的 phone 并确保之后您的 Twitter 句柄在那里。
- 您的应用已请求并授予权限
访问帐户(使用
requestAccessToAccountsWithType
方法)。授予权限后,您应该会在 "ALLOW THESE APPS TO USE YOUR ACCOUNT". 下的 Twitter 设置(在“设置”应用程序中)中看到您的应用程序
- 您设置为
SLRequest
的 Twitter 帐户有效并且不是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]);
}];
}
}];