title: how to integrate twitter with phonegap ios
body: <p>I am using the phonegap 2.9.0 and trying to implement twitter for an app i am building for ios.</p>
  
  <p>i am following this <a href="http://oodlestechnologies.com/blogs/Twitter-integration-on-PhoneGap-using-ChildBrowser-and-OAuth-for-iOS-and-Android-Platforms" rel="nofollow">tut</a> but havent gotten much luck with it . implemented child browser using <a href="http://oodlestechnologies.com/blogs/Implementing-ChildBrowser-plugin-in-PhoneGap-for-Android-and-iOS-platforms" rel="nofollow">visit</a> and since its cordovo.plst is deprecated added the following line in config.xml </p>
  
  <pre><code>&lt;feature name="ChildBrowserCommand"&gt;
      &lt;param name="ios-package" value="ChildBrowserCommand" /&gt;
  &lt;/feature&gt;
  </code></pre>
  
  <p>in my index.html file </p>
  
  <pre><code>&lt;!DOCTYPE html&gt;
  &lt;html&gt;
      &lt;head&gt;
          &lt;title&gt;&lt;/title&gt;
  
          &lt;meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no;" /&gt;
          &lt;meta charset="utf-8"&gt;
          &lt;script type="text/javascript" charset="utf-8" src="cordova.js"&gt;&lt;/script&gt;
  
          &lt;script src="http://code.jquery.com/jquery-1.9.1.min.js"&gt;&lt;/script&gt;
          &lt;script type="text/javascript" charset="utf-8" src="jsOAuth-1.3.6.min.js"&gt;&lt;/script&gt;
          &lt;script type="text/javascript" charset="utf-8" src="ChildBrowser.js"&gt;&lt;/script&gt;
          &lt;script type="text/javascript"&gt;
  
              function onBodyLoad() {
                  document.addEventListener("deviceready", onDeviceReady, false);
  
              }
  
              function onDeviceReady() {
                  var root = this;
                  cb = window.plugins.childBrowser;
                  if (!localStorage.getItem(twitterKey)) {
                      $("#loginBtn").show();
                      $("#logoutBtn").hide();
                  }
                  else {
                      $("#loginBtn").hide();
                      $("#logoutBtn").show();
                  }
  
                  if (cb != null) {
                      cb.onLocationChange = function(loc) {
                          root.locChanged(loc);
                      };
                      cb.onClose = function() {
                          root.onCloseBrowser()
                      };
                      cb.onOpenExternal = function() {
                          root.onOpenExternal();
                      };
  
                  }
  
  
  
              }
  
              function onCloseBrowser() {
                  console.log("onCloseBrowser!");
              }
  
              function locChanged(loc) {
                  console.log("locChanged!");
              }
  
              function onOpenExternal() {
                  console.log("onOpenExternal!");
              }
  
          &lt;/script&gt;
          &lt;!--Below is the code for twitter--&gt;
          &lt;script&gt;
              // GLOBAL VARS
              var oauth; // It Holds the oAuth data request
              var requestParams; // Specific param related to request
              var options = {
                  consumerKey: 'CONSUMER KEy', // YOUR Twitter CONSUMER_KEY
                  consumerSecret: 'CONSUMER_SECRET', // YOUR Twitter CONSUMER_SECRET
                  callbackUrl: "http://www.textalert.com/"}; // YOU have to replace it on one more Place
              var twitterKey = "twtrKey"; // This key is used for storing Information related
  
  
              var Twitter = {
                  init: function() {
                      // Apps storedAccessData , Apps Data in Raw format
                      var storedAccessData, rawData = localStorage.getItem(twitterKey);
                      // here we are going to check whether the data about user is already with us.
                      if (localStorage.getItem(twitterKey) !== null) {
                          // when App already knows data
                          storedAccessData = JSON.parse(rawData); //JSON parsing
                          //options.accessTokenKey = storedAccessData.accessTokenKey; // data will be saved when user first time signin
                          options.accessTokenSecret = storedAccessData.accessTokenSecret; // data will be saved when user first first signin
  
                          // javascript OAuth take care of everything for app we need to provide just the options
                          oauth = OAuth(options);
                          oauth.get('https://api.twitter.com/1/account/verify_credentials.json?skip_status=true',
                                  function(data) {
                                      var entry = JSON.parse(data.text);
                                      console.log("USERNAME: " + entry.screen_name);
                                  }
                          );
                      }
                      else {
                          // we have no data for save user
                          oauth = OAuth(options);
                          oauth.get('https://api.twitter.com/oauth/request_token',
                                  function(data) {
                                      requestParams = data.text;
                                      cb.showWebPage('https://api.twitter.com/oauth/authorize?' + data.text); // This opens the Twitter authorization / sign in page
                                      cb.onLocationChange = function(loc) {
                                          Twitter.success(loc);
                                      }; // Here will will track the change in URL of ChildBrowser
                                  },
                                  function(data) {
                                      console.log("ERROR: " + data);
                                  }
                          );
                      }
                  },
                  /*
                   When ChildBrowser's URL changes we will track it here.
                   We will also be acknowledged was the request is a successful or unsuccessful
                   */
                  success: function(loc) {
  
                      // Here the URL of supplied callback will Load
  
                      /*
                       Here Plugin will check whether the callback Url matches with the given Url
                       */
                      if (loc.indexOf("http://www.textalert.com/?") &gt;= 0) {
  
                          // Parse the returned URL
                          var index, verifier = '';
                          var params = loc.substr(loc.indexOf('?') + 1);
  
                          params = params.split('&amp;');
                          for (var i = 0; i &lt; params.length; i++) {
                              var y = params[i].split('=');
                              if (y[0] === 'oauth_verifier') {
                                  verifier = y[1];
                              }
                          }
  
                          // Here we are going to change token for request with token for access
  
                          /*
                           Once user has authorised us then we have to change the token for request with token of access
                           here we will give data to localStorage.
                           */
                          oauth.get('https://api.twitter.com/oauth/access_token?oauth_verifier=' + verifier + '&amp;' + requestParams,
                                  function(data) {
                                      var accessParams = {};
                                      var qvars_tmp = data.text.split('&amp;');
                                      for (var i = 0; i &lt; qvars_tmp.length; i++) {
                                          var y = qvars_tmp[i].split('=');
                                          accessParams[y[0]] = decodeURIComponent(y[1]);
                                      }
  
                                      $('#oauthStatus').html('&lt;span style="color:green;"&gt;Success!&lt;/span&gt;');
                                      $('#stage-auth').hide();
                                      $('#stage-data').show();
                                      oauth.setAccessToken([accessParams.oauth_token, accessParams.oauth_token_secret]);
  
                                      // Saving token of access in Local_Storage
                                      var accessData = {};
                                      accessData.accessTokenKey = accessParams.oauth_token;
                                      accessData.accessTokenSecret = accessParams.oauth_token_secret;
  
                                      // Configuring Apps LOCAL_STORAGE
                                      console.log("TWITTER: Storing token key/secret in localStorage");
                                      localStorage.setItem(twitterKey, JSON.stringify(accessData));
  
                                      oauth.get('https://api.twitter.com/1/account/verify_credentials.json?skip_status=true',
                                              function(data) {
                                                  var entry = JSON.parse(data.text);
                                                  console.log("TWITTER USER: " + entry.screen_name);
                                                  $("#welcome").show();
                                                  document.getElementById("welcome").innerHTML = "welcome " + entry.screen_name;
                                                  successfulLogin();
                                                  // Just for eg.
                                                  app.init();
                                              },
                                              function(data) {
                                                  console.log("ERROR: " + data);
                                              }
                                      );
  
                                      // Now we have to close the child browser because everthing goes on track.
  
                                      window.plugins.childBrowser.close();
                                  },
                                  function(data) {
                                      console.log(data);
  
  
                                  }
                          );
                      }
                      else {
                          // Just Empty
                      }
                  },
                  tweet: function() {
                      var storedAccessData, rawData = localStorage.getItem(twitterKey);
  
                      storedAccessData = JSON.parse(rawData); // Paring Json
                      options.accessTokenKey = storedAccessData.accessTokenKey; // it will be saved on first signin
                      options.accessTokenSecret = storedAccessData.accessTokenSecret; // it will be save on first login
  
                      // javascript OAuth will care of else for app we need to send only the options
                      oauth = OAuth(options);
                      oauth.get('https://api.twitter.com/1/account/verify_credentials.json?skip_status=true',
                              function(data) {
                                  var entry = JSON.parse(data.text);
                                  Twitter.post();
                              }
                      );
                  },
                  /*
                   We now have the data to tweet
                   */
                  post: function() {
                      var theTweet = $("#tweet").val(); // You can change it with what else you likes.
  
                      oauth.post('https://api.twitter.com/1/statuses/update.json',
                              {'status': theTweet, // javascript OAuth encodes this
                                  'trim_user': 'true'},
                      function(data) {
                          var entry = JSON.parse(data.text);
                          console.log(entry);
  
                          // just for eg.
                          done();
                      },
                              function(data) {
                                  console.log(data);
                              }
                      );
                  }
  
              }
  
              function done() {
                  $("#tweet").val('');
              }
  
  
              function successfulLogin() {
                  $("#loginBtn").hide();
                  $("#logoutBtn,#tweet,#tweeter,#tweetBtn,#tweetText").show();
  
              }
  
              function logOut() {
                  //localStorage.clear();
                  window.localStorage.removeItem(twitterKey);
                  document.getElementById("welcome").innerHTML = "Please Login to use this app";
                  $("#loginBtn").show();
                  $("#logoutBtn,#tweet,#tweeter,#tweetText,#tweetBtn").hide();
  
              }
  
          &lt;/script&gt;
          &lt;!--Code for Twitter ends here--&gt;
      &lt;/head&gt;
      &lt;body onload="onBodyLoad()"&gt;
  
  
  
  
  
          &lt;h4&gt;Oodles Twitter App&lt;/h4&gt;
  
          &lt;table border="1"&gt;
              &lt;tr&gt;
                  &lt;th&gt;Login using Twitter&lt;/th&gt;
                  &lt;th&gt;
                      &lt;button id="loginBtn" onclick="Twitter.init()"&gt;Login&lt;/button&gt;
                      &lt;button id="logoutBtn" onclick="logOut();"&gt;Logout&lt;/button&gt;
                  &lt;/th&gt;
              &lt;/tr&gt;
              &lt;tr id="tweetText" style="display:none;"&gt;
                  &lt;td colspan="2"&gt;&lt;textarea id="tweet" style="display:none;"&gt;&lt;/textarea&gt;&lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr id="tweetBtn" style="display:none;"&gt;
                  &lt;td colspan="2" align="right"&gt;
                      &lt;button id="tweeter" onclick="Twitter.tweet();" style="display:none"&gt;Tweet&lt;/button&gt;
                  &lt;/td&gt;
              &lt;/tr&gt;
              &lt;tr&gt;&lt;td colspan="2"&gt;&lt;div id="welcome"&gt;Please Login to use this app&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
          &lt;/table&gt;
  
  
      &lt;/body&gt;
  &lt;/html&gt;
  </code></pre>
  
  <p>On clicking the login button i get  <strong>ERROR: [object Object]</strong> this error any help would be much appreciated thankyou</p>