Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is automated sharing possible for Twitter in the background on iOS?

I wanted to share a Twitter feed on the Twitter wall which contains an image and some text. I want support from iOS 4.3 to iOS 6.0.1. Is sharing possible in the background without a send/share button? How do I implement it?

like image 476
Ankit Vyas Avatar asked Dec 18 '12 09:12

Ankit Vyas


1 Answers

The API call that you need to send is:

https://dev.twitter.com/docs/api/1.1/post/statuses/update_with_media

Before making that call, of course, you will need to authenticate with Twitter via xAuth/OAuth. Unless you get special permission from Twitter to do otherwise, it looks like you will need to use OAuth,

https://dev.twitter.com/docs/oauth/xauth

To background the request, it will likely make sense to use Grand Central Dispatch --that is unless you have a lot of different Twitter requests to send. In that case, I would instead opt for an NSOperationQueue where maxConcurrentOperationCount = 1. See the following:

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

Nevertheless, because OAuth is such a pain, it will likely make sense to use a third party library. I've never used it before, but here is an example using MGTwitterEngine:

Twitter's statuses/update_with_media on iOS returns 500 error

If you were able to limit use to iOS 5+, then I would highly recommend using the SLRequest object. The advantage of this approach is that you integrate with the iOS users account directly, so they don't have to authenticate through a UIWebView or something cheesy.

To do so, you would simply plug in the appropriate Twitter API url in the following function requestForServiceType:requestMethod:URL:parameters: and obtain your SLRequest object. Then assign the appropriate Twitter ACAccount obtained from the ACAccountStore using requestAccessToAccountsWithType:options:completion:. Finally make your call to performRequestWithHandler, which would then perform your request asynchronously.

like image 163
markshiz Avatar answered Sep 21 '22 22:09

markshiz