Appcelerator Titanium Twitter Birdhouse Failing because of HTTP

Hold on Cowboy

This blog post is pretty old. Be careful with the information you find in here. It's likely dead, dying, or wildly inaccurate.

This problem caused me much angst and it’s partly Twitter’s fault (just ask me).

I’m using the great Titanium library for Twitter called Birdhouse. It does a great job requesting authorization, storing it, and gives you an API to post tweets. So I was using this code to post tweets using Birdhouse.

this.tweet = function(message) {
  Ti.API.info('Im about to post to twitter:');
  Ti.API.info(escape(message));
  BH.api('http://api.twitter.com/1/statuses/update.json', 'POST', 'status=' + escape(message), function(resp) {
    Ti.API.info(resp);
    if (resp !== false) {
      Ti.API.info('Twitter Post Successful');
      if (typeof(callback) == 'function') {
        callback(true);
      }
      return true;
    } else {
      Ti.API.info('Posting to twitter failed:');
      if (typeof(callback) == 'function') {
        callback(false);
      }
      return false;
    }
  }, true);
};

The problem with this code is that it would only work sporadically. It drove me crazying thinking maybe the access token was not getting set. Then I printed out the error from twitter and it went like this

403 Forbidden: The server understood the request, but is refusing to fulfill it.
You know what the problem was? I was** using HTTP instead of HTTPS**. It was working sometimes, but not others, and it would be sporadic.

Resources 

https://dev.twitter.com/discussions/6530