我想在Twitter墙上分享Twitter提要,其中包含图片和一些文字。我想要从iOS 4.3到iOS 6.0.1的支持。没有发送/共享按钮可以在后台共享吗?我该如何实现它?
答案 0 :(得分:3)
您需要发送的API调用是:
https://dev.twitter.com/docs/api/1.1/post/statuses/update_with_media
在拨打电话之前,您需要通过xAuth / OAuth对Twitter进行身份验证。除非您获得Twitter的特别许可,否则看起来您需要使用OAuth,
https://dev.twitter.com/docs/oauth/xauth
要对请求进行后台处理,使用Grand Central Dispatch可能是有意义的 - 除非您有很多不同的Twitter请求要发送。在这种情况下,我会选择NSOperationQueue
maxConcurrentOperationCount = 1
。请参阅以下内容:
http://www.fieryrobot.com/blog/2010/06/27/a-simple-job-queue-with-grand-central-dispatch/
http://www.raywenderlich.com/19788/how-to-use-nsoperations-and-nsoperationqueues
然而,因为OAuth是如此痛苦,所以使用第三方库可能是有意义的。我之前从未使用过它,但这里有一个使用MGTwitterEngine的例子:
Twitter's statuses/update_with_media on iOS returns 500 error
如果您能够限制iOS 5+的使用,那么我强烈建议您使用SLRequest
对象。这种方法的优点是您可以直接与iOS用户帐户集成,因此他们无需通过UIWebView或俗气的方式进行身份验证。
为此,您只需在以下函数requestForServiceType:requestMethod:URL:parameters:
中插入相应的Twitter API网址即可获取SLRequest
对象。然后使用ACAccount
分配从ACAccountStore
获取的相应Twitter requestAccessToAccountsWithType:options:completion:
。最后拨打performRequestWithHandler
,然后异步执行您的请求。
答案 1 :(得分:2)
是的,但你需要为你和授权人找到一些1.1 API包装器(生成API请求的东西,让它们等等)(MGTWitter引擎工作正常)。我有working solution for sharing (text only) and getting user info for iOS 4+。
关于背景部分 - 这取决于你如何实现它(即通知或连续的后台执行或gps callbacs等......)。
答案 2 :(得分:2)
以下代码不会在后台发布,但可以在ios版本上发布... 您可以使用ios版本的条件,如下面的代码。这是我已经实现的工作代码,它正在ios 5和6上工作。请检查ios 4以确认。我认为它应该可以工作。
#import "Twitter/Twitter.h"
#import "Social/Social.h"
-(IBAction)tweetPost:(id)sender
{
if ([self isSocialAvailable])
{
SLComposeViewController *tweetComposer=[SLComposeViewController composeViewControllerForServiceType:SLServiceTypeTwitter];
if ([SLComposeViewController isAvailableForServiceType:SLServiceTypeTwitter]) {
SLComposeViewControllerCompletionHandler __block completionHandler=
^(SLComposeViewControllerResult result){
[tweetComposer dismissViewControllerAnimated:YES completion:nil];
switch(result){
case SLComposeViewControllerResultCancelled:
default:
{
NSLog(@"Cancelled.....");
}
break;
case SLComposeViewControllerResultDone:
{
NSLog(@"Posted....");
UIAlertView * alert = [[UIAlertView alloc] initWithTitle:@"Sent"
message:nil
delegate:nil
cancelButtonTitle:@"Dismiss"
otherButtonTitles: nil];
[alert show];
}
break;
}};
NSString*message = @"posting to twitter test ios 6";
[tweetComposer setInitialText:message];
[tweetComposer addImage:[UIImage imageNamed:@"2.jpg"]];
[tweetComposer addURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=GoZ2Be2zLq8"]];
[tweetComposer setCompletionHandler:completionHandler];
[self presentViewController:tweetComposer animated:YES completion:nil];
}
}
else
{
TWTweetComposeViewController *twitter= [[TWTweetComposeViewController alloc] init];
[twitter addImage:[UIImage imageNamed:@"2.jpg"]];
[twitter addURL:[NSURL URLWithString:@"http://www.youtube.com/watch?v=GoZ2Be2zLq8"]];
[twitter setInitialText:@"Tweet from iOS 5 app using the Twitter framework."];
[self presentModalViewController:twitter animated:YES];
twitter.completionHandler = ^(TWTweetComposeViewControllerResult result)
{
NSString *title = @"Tweet Status";
NSString *msg;
if (result == TWTweetComposeViewControllerResultCancelled)
msg = @"Tweet compostion was canceled.";
else if (result == TWTweetComposeViewControllerResultDone)
msg = @"Tweet composition completed.";
// Show alert to see how things went...
UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:title message:msg delegate:nil cancelButtonTitle:@"Okay" otherButtonTitles:nil];
[alertView show];
};
}
}
-(BOOL)isSocialAvailable {
return NSClassFromString(@"SLComposeViewController") != nil;
}
您需要包含三个名为social,adSupport和Accounts.Check的框架,其中一个不需要twitter feed帖子。 希望,这对你有所帮助。