views:

247

answers:

3

Hi there,

I'm using MGTwitterEngine to add Twitter functionality to my app. It's very easy to simply prompt the user for a username and password and then start posting. Strangely, however, I've noticed other apps (eg Foursquare and Brightkite) require you to visit their website to associate your Twitter account with your foursquare/brightkite/whatever account.

Why do they do it this way?

Is there a reason why my app shouldn't prompt the user for a Twitter username and password, even though it would be so easy?

Thanks a bunch! Tristan

A: 

Twitter supports OAuth, which allows you to access their account without asking for their password directly.

The main concern is security. What happens if/when your database gets hacked? The attackers will have access to all of your user's twitter passwords.

On hte other hand, those sites don't store their users passwords; if they get hacked, twitter can easily disable the oauth credentials, locking out any attackers before they can do harm.

Use OAuth; it's a lot safer.

phantombrain
+1  A: 

This is because you're using Basic Auth, which is just a username/password. Most new Twitter apps use the more robust OAuth, which requires you to visit Twitter.com to allow access, but does not require a username/password. The Twitter API docs claim that support for Basic Auth will be dropped soon, so you should be using OAuth as well.

bcherry
A: 

Just replace YOUR_TWITTER_USERNAME and YOUR_TWITTER_PASSWORD. The code below has to be included in your viewController.m

NSMutableURLRequest *theRequest=[NSMutableURLRequest requestWithURL: [NSURL 
URLWithString: @”http: //YOUR_TWITTER_USERNAME: YOUR_TWITTER_PASSWORD@twitter. com/
statuses/update. xml”]
    cachePolicy:NSURLRequestUseProtocolCachePolicy
    timeoutInterval: 60. 0] ;
  [theRequest setHTTPMethod: @”POST”] ;
  [theRequest setHTTPBody: [[NSString stringWithFormat: @”status=%@”, 
themessage] dataUsingEncoding: NSASCIIStringEncoding] ] ;
  NSURLResponse* response;
  NSError* error;
  NSData* result = [NSURLConnection sendSynchronousRequest:theRequest 
returningResponse: &response error: &error] ;
  NSLog( @”%@”, [[[ NSString alloc] initWithData: result 
encoding: NSASCIIStringEncoding] autorelease] ) ;
flopex