Created
July 24, 2012 11:05
-
-
Save molinto/3169405 to your computer and use it in GitHub Desktop.
Titanium FourSquare API Integration
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* | |
Author: James Shrager (@jshrager) | |
Intended use: Appcelerator Titanium | |
Usage: http://www.LearningTitanium.com (@learningTi) | |
*/ | |
var client_id = "YOUR_CLIENT_ID"; | |
var client_secret = "YOUR_CLIENT_SECRET"; | |
var redirectUri = 'http://YOUR_URL/foursquareCallback.php'; | |
var ui = require('ui/ui'); | |
var overlay = require('ui/overlayHUD'); | |
/* | |
* ONCE YOU HAVE AN ACTIVE TOKEN YOU CAN CALL THE API FROM WITHIN THE APP AS FOLLOWS: | |
* var foursquare = require('services/fourSqAPI'); | |
* foursquare.callAPI("GET","venues/search", "ll="+lastCoords+"&limit=30&intent=checkin&radius=500, onSuccess_venues, onError); | |
*/ | |
exports.callAPI = function(method, route, params, success, error) | |
{ | |
var xhr = Titanium.Network.createHTTPClient(); | |
xhr.open(method, "https://api.foursquare.com/v2/" + route + "?" + params + "&client_id=" + client_id+"&client_secret="+client_secret+"&v=20111208&oauth_token="+Ti.App.Properties.getString('foursquareToken')); | |
xhr.onerror = function(e) { | |
if ( error ) { | |
/* CALL THE ERROR FUNCTION PASSED IN */ | |
error(e); | |
} | |
}; | |
xhr.onload = function(_xhr) { | |
/* IF THERE IS A SUCCESS CALLBACK FUNCTION THEN CALL IT */ | |
if ( success ) { | |
try{ | |
var response = JSON.parse(xhr.responseText); | |
if(response.meta.code == 200) | |
{ | |
/* CALL THE SUCCESS FUNCTION PASSED IN */ | |
success(response); | |
response = null; | |
} | |
else | |
{ | |
/* CALL THE ERROR FUNCTION PASSED IN */ | |
error(); | |
} | |
} | |
catch(e) | |
{ | |
/* CALL THE ERROR FUNCTION PASSED IN */ | |
error(); | |
} | |
} | |
}; | |
xhr.send(); | |
}; | |
exports.authorize = function(_args) { | |
var win, webView; | |
function authorizeUICallback(e) | |
{ | |
/* | |
* IF URL LOADED HAS #access_token THEN REDIRECT TO A SCRIPT TO CHECK IF USER IS REGISTERED | |
* SAVE ACCESS TOKEN TO LOCAL PROPERTY | |
* IF LOGIN OR REGISTER SCRIPT LOADED THEN USER SIGNUP / LOGIN FLOW IS COMPLETE: | |
* CLOSE WINDOW | |
* CLOSE NAV GROUP | |
* FIRE START APP FUNCTION IN CONTROLLER | |
*/ | |
if (e.url.indexOf('#access_token') != -1) | |
{ | |
var token = e.url.split("=")[1]; | |
Ti.App.Properties.setString("foursquareToken",token); | |
/* call a script with token in URL - check DB for token - if token exists then user exists - call login.php, if not call register.php */ | |
webView.url = "YOUR_URL.php?token="+token; | |
} else if (e.url.indexOf('#error') != -1) { | |
alert("We're sorry, something went wrong. Please try again."); | |
_args.navGroup.hide(); | |
_args.navGroup.close(win); | |
_args.baseWindow.close(); | |
} else if(e.url.indexOf("register.php") != -1 || e.url.indexOf("login.php") != -1) | |
{ | |
/* HAS AUTHORIZED */ | |
var userId = e.url.split("=")[1]; | |
Ti.App.Properties.setString('userId',userId); | |
Ti.App.Properties.setBool("foursquareAuth", true); | |
_args.navGroup.hide(); | |
_args.navGroup.close(win); | |
_args.navGroup.close(_args.mainWind); | |
_args.baseWindow.close(); | |
Ti.App.fireEvent("GLOBALLISTENER", {"TYPE": "startApp"}); | |
} | |
} | |
/* | |
* LOAD A WEBVIEW AND INITIALISE THE FOURSQUARE OUTH FLOW | |
* WHEN PAGES LOAD CHECK IF THEY ARE FROM YOUR URL OR FOURSQUARE - IF NOT THERE IS AN ERROR | |
* WHEN URL IS FOURSQUARECALLBACK THEN CALL AUTHORIZEUICALLBACK SCRIPT AND DISPLAY A LOADING INDICATOR | |
*/ | |
function showAuthorizeUI(pUrl) | |
{ | |
win = Ti.UI.createWindow({ | |
modal:true, | |
navBarHidden: false, | |
barColor: '#c42026', | |
title: null, | |
backgroundColor: '#f1f1f1', | |
barImage: 'images/navBar.png' | |
}); | |
webView = ui.webView({url: pUrl}); | |
//Ti.API.debug('Setting:[' + Ti.UI.AUTODETECT_NONE + ']'); | |
webView.addEventListener('load', | |
function(e) { | |
if (e.url.indexOf('http://YOUR_URL/') != -1 || e.url.indexOf('foursquare.com') != -1) { | |
Titanium.API.debug(e); | |
if (e.url.indexOf('foursquareCallback.php#') != -1 || e.url.indexOf('https://YOUR_URL/register.php') != -1 || e.url.indexOf('https://YOURURL/login.php') != -1) | |
{ | |
if (e.url.indexOf('foursquareCallback.php#') != -1) | |
{ | |
overlay.load('Checking Details...').show(win); | |
} | |
authorizeUICallback(e); | |
} | |
} | |
else | |
{ | |
alert("We're sorry, something went wrong. Please try again."); | |
_args.navGroup.hide(); | |
_args.navGroup.close(win); | |
_args.baseWindow.close(); | |
} | |
}); | |
win.add(webView); | |
_args.navGroup.open(win); | |
} | |
showAuthorizeUI(String.format('https://foursquare.com/oauth2/authenticate?response_type=token&client_id=%s&redirect_uri=%s',client_id,redirectUri)); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment