我想将图片上传到Twitter。
我把代码编写为
- (void)postImage:(UIImage *)image withStatus:(NSString *)status
{
NSLog(@"Share on Twitter");
ACAccountType *twitterType =
[self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
SLRequestHandler requestHandler =
^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
if (responseData) {
NSInteger statusCode = urlResponse.statusCode;
if (statusCode >= 200 && statusCode < 300) {
NSDictionary *postResponseData =
[NSJSONSerialization JSONObjectWithData:responseData
options:NSJSONReadingMutableContainers
error:NULL];
NSLog(@"[SUCCESS!] Created Tweet with ID: %@", postResponseData[@"id_str"]);
}
else {
NSLog(@"[ERROR] Server responded: status code %d %@", statusCode,
[NSHTTPURLResponse localizedStringForStatusCode:statusCode]);
}
}
else {
NSLog(@"[ERROR] An error occurred while posting: %@", [error localizedDescription]);
}
};
ACAccountStoreRequestAccessCompletionHandler accountStoreHandler =
^(BOOL granted, NSError *error) {
if (granted) {
NSArray *accounts = [self.accountStore accountsWithAccountType:twitterType];
NSURL *url = [NSURL URLWithString:@"https://api.twitter.com"
@"/1.1/statuses/update_with_media.json"];
NSDictionary *params = @{@"status" : status};
SLRequest *request = [SLRequest requestForServiceType:SLServiceTypeTwitter
requestMethod:SLRequestMethodPOST
URL:url
parameters:params];
NSData *imageData = UIImageJPEGRepresentation(image, 1.f);
[request addMultipartData:imageData
withName:@"media[]"
type:@"image/jpeg"
filename:@"image.jpg"];
[request setAccount:[accounts lastObject]];
[request performRequestWithHandler:requestHandler];
}
else {
NSLog(@"[ERROR] An error occurred while asking for user authorization: %@",
[error localizedDescription]);
}
};
[self.accountStore requestAccessToAccountsWithType:twitterType
options:NULL
completion:accountStoreHandler];
}
我收到错误
The operation couldn’t be completed. (com.apple.accounts error 6.)
答案 0 :(得分:0)
您应该使用SLComposeViewController
课程。为此,应按顺序执行许多步骤。首先,应用程序可以可选地检查以验证是否可以将消息发送到指定的社交网络服务。这基本上等同于检查是否已在设备上配置了有效的社交网络帐户,并使用isAvailableForServiceType:
类方法实现,并将以下选项中所需的服务类型作为参数传递:
SLServiceTypeFacebook
SLServiceTypeTwitter
SLServiceTypeSinaWeibo
例如,以下代码验证应用程序是否可以使用Twitter服务:
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter])
{
// Device is able to send a Twitter message
}
此方法调用是可选的,如果尚未设置指定社交网络的帐户,则编写者只需将用户带到设备的设置应用程序,在该应用程序中可以配置Twitter帐户。
下一步是创建SLComposeViewController
类的实例,并在作曲家屏幕被用户取消或用于发送消息时提供可选的完成处理程序。接下来,可以在实例上调用一系列方法来使用消息内容初始化对象,包括消息的初始文本,图像附件和URL:
setInitialText
: - 在SLComposeViewController
实例上设置邮件的初始文本。addImage
: - 将图片文件添加为邮件的附件。addURL
: - 为邮件添加网址。该方法自动处理URL缩短。
上述每个方法都返回一个布尔结果,指示添加的内容是否成功。最后,当消息准备好呈现给用户时,通过调用父视图控制器的presentViewController:方法以模态方式呈现SLComposeViewController对象:
SLComposeViewController *composeController = [SLComposeViewController
composeViewControllerForServiceType:SLServiceTypeTwitter];
[composeController setInitialText:@"Just found this great website"];
[composeController addImage:postImage.image];
[composeController addURL: [NSURL URLWithString:
@"http://www.website.com"]];
[self presentViewController:composeController
animated:YES completion:nil];
一旦调用,此方法将向用户提供作曲家视图,其中包含通过方法调用预先配置的任何文本,图像和URL内容。显示后,用户可以选择修改消息文本,取消消息,添加位置数据或发送消息。如果已配置完成处理程序,则将调用它并传递一个值,该值指示用户在编辑器视图中执行的操作。可能的值有:
SLComposeViewControllerResultCancelled
- 用户通过触摸取消按钮取消了作文会话。SLComposeViewControllerResultDone
- 用户通过触摸发送按钮发送撰写的消息。