我有一个名为 twitter 的按钮,当我通常单击此按钮时,会显示一个用于发推文的视图,即TWTweetComposeViewController
。我有两种发推文的方式,即自动分享和正常分享。正常分享工作得很好,但我怀疑如何在自动分享中做同样的事情,这意味着当我点击推特按钮而不是显示时自动发一些默认消息视图并TWTweetComposeViewController
单击完成按钮。
问问题
598 次
2 回答
3
最后,我在 ios5 中搜索了很多与 Twitter 相关的问题,还阅读了 twitter 开发者文档并尝试了这个答案。我认为这是进行自动共享的解决方案之一。
ACAccountStore *account = [[ACAccountStore alloc] init];
ACAccountType *accountType = [account accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierTwitter];
// Request access from the user to access their Twitter account
[account requestAccessToAccountsWithType:accountType withCompletionHandler:^(BOOL granted, NSError *error) {
// Did user allow us access?
if (granted == YES)
{
// Populate array with all available Twitter accounts
NSArray *arrayOfAccounts = [account accountsWithAccountType:accountType];
// Sanity check
if ([arrayOfAccounts count] > 0)
{
// Keep it simple, use the first account available
ACAccount *acct = [arrayOfAccounts objectAtIndex:0];
NSURL *url =
[NSURL URLWithString:
@"https://upload.twitter.com/1/statuses/update_with_media.json"];
// Create a POST request for the target endpoint
TWRequest *request =
[[TWRequest alloc] initWithURL:url
parameters:nil
requestMethod:TWRequestMethodPOST];
// self.accounts is an array of all available accounts;
// we use the first one for simplicity
[request setAccount:acct];
// The "larry.png" is an image that we have locally
UIImage *image = (UIImage *)[dictionarydata valueForKey:@"image"];
NSLog(@"%@",image);
if (image!=nil) {
// Obtain NSData from the UIImage
NSData *imageData = UIImagePNGRepresentation(image);
// Add the data of the image with the
// correct parameter name, "media[]"
[request addMultiPartData:imageData
withName:@"media[]"
type:@"multipart/form-data"];
// NB: Our status must be passed as part of the multipart form data
NSString *status = [NSString stringWithFormat:@"%@ %@ %@",[dictionaryData valueForKey:@"firstname"],[dictionaryData valueForKey:@"lastname"],[dictionarydata valueForKey:@"title"]];
// Add the data of the status as parameter "status"
[request addMultiPartData:[status dataUsingEncoding:NSUTF8StringEncoding]
withName:@"status"
type:@"multipart/form-data"];
// Perform the request.
// Note that -[performRequestWithHandler] may be called on any thread,
// so you should explicitly dispatch any UI operations to the main thread
[request performRequestWithHandler:
^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSDictionary *dict =
(NSDictionary *)[NSJSONSerialization
JSONObjectWithData:responseData options:0 error:nil];
// Log the result
NSLog(@"%@", dict);
dispatch_async(dispatch_get_main_queue(), ^{
// perform an action that updates the UI...
});
}];
}else{
NSURL *url = [NSURL URLWithString:@"https://api.twitter.com/1/statuses/update.json"];
NSDictionary *p = [NSDictionary dictionaryWithObjectsAndKeys:
[NSString stringWithFormat:@"%@ %@ %@",[dictionaryData valueForKey:@"firstname"],[dictionaryData valueForKey:@"lastname"],[dictionarydata valueForKey:@"title"]], @"status",
nil
];
TWRequest *postRequest = [[TWRequest alloc]
initWithURL: url
parameters: p
requestMethod: TWRequestMethodPOST
];
// Post the request
[postRequest setAccount:acct];
// Block handler to manage the response
[postRequest performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
NSLog(@"Twitter response, HTTP response: %i", [urlResponse statusCode]);
}];
}
}
}
}];
于 2012-08-30T06:13:14.873 回答
0
如果您一直在使用 Twitter 框架,您可以这样做:
NSString *statusesShowEndpoint = @"https://api.twitter.com/1.1/statuses/update.json";
NSDictionary *params = @{@"status": @"Great101 - https://share.livefrom.me/p/md5mrCp"};
NSError *clientError;
NSURLRequest *request = [[[Twitter sharedInstance] APIClient]
URLRequestWithMethod:@"POST"
URL:statusesShowEndpoint
parameters:params
error:&clientError];
if (request) {
[[[Twitter sharedInstance] APIClient]
sendTwitterRequest:request
completion:^(NSURLResponse *response,
NSData *data,
NSError *connectionError) {
if (data) {
// handle the response data e.g.
NSError *jsonError;
NSDictionary *dicResponse = [NSJSONSerialization
JSONObjectWithData:data
options:0
error:&jsonError];
NSLog(@"%@",[dicResponse description]);
}
else {
NSLog(@"Error code: %ld | Error description: %@", (long)[connectionError code], [connectionError localizedDescription]);
}
}];
}
else {
NSLog(@"Error: %@", clientError);
}
于 2015-06-08T05:06:03.087 回答