Tuesday 25 September 2012

FourSquare Integration in android

Hello All,

Here are the steps to integrate foursquare in your android application.

1. Creation of application and getting the client secret key for testing.
     https://developer.foursquare.com/


four square

foursquare sdk


android foursquare sdk

android foursquare sdk

2. Now import the below source code into your workspace and run
    the application.


 


1. MainActivity


package com.mukesh.foursquare.android;

/**
 * Encapsulation of a MainActivity: a demo for using api
 *
 * @author Mukesh Yadav
 */
import java.io.IOException;
import java.net.MalformedURLException;
import com.jiramot.foursquare.android.R;
import com.mukesh.foursquare.android.Foursquare.DialogListener;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class Main extends Activity {

Foursquare foursquare;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
foursquare = new Foursquare("Client Id","Client Secret","Redirect Url");

foursquare.authorize(this, new FoursquareAuthenDialogListener());

private class FoursquareAuthenDialogListener implements DialogListener {

@Override
public void onComplete(Bundle values) {

 try {
     String aa = null;
     aa = foursquare.request("users/self");
     Log.d("Foursquare-Main", aa);
 } catch (MalformedURLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
} catch (IOException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
}
}

@Override
public void onFoursquareError(FoursquareError e) {
   // TODO Auto-generated method stub
}

@Override
public void onError(DialogError e) {
   // TODO Auto-generated method stub
}

@Override
public void onCancel() {
  // TODO Auto-generated method stub
}
}
}


2. Foursquare


package com.mukesh.foursquare.android;

/**
 * Encapsulation of Foursquare.
 *
 * @author Mukesh Yadav
 */

import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.MalformedURLException;

import android.Manifest;
import android.app.Activity;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;
import android.webkit.CookieSyncManager;

public class Foursquare {

 private static final String LOGIN = "oauth";
 public static final String API_END_POING_BASE_URL = "https://api.foursquare.com/v2/";
 public static String REDIRECT_URI;
 public static final String API_URL = "https://foursquare.com/oauth2/";
 //public static final String CANCEL_URI = "";
 public static final String TOKEN = "access_token";
 public static final String EXPIRES = "expires_in";
 public static final String SINGLE_SIGN_ON_DISABLED = "service_disabled";
 public static String AUTHENTICATE_URL = "https://foursquare.com/oauth2/authenticate";// +

 private String mClientId;
 private String mClientSecret;
 private String mAccessToken = null;

 private DialogListener mAuthDialogListener;
 
 public Foursquare(String clientId, String clientSecret, String redirectUrl) {
  if (clientId == null || clientSecret == null) {
   throw new IllegalArgumentException(
     "You must specify your application ID when instantiating "
       + "a Foursquare object. See README for details.");
  }
  mClientId = clientId;
  mClientSecret = clientSecret;
  REDIRECT_URI = redirectUrl;
 }

 public void authorize(Activity activity, final DialogListener listener) {
  mAuthDialogListener = listener;
  startDialogAuth(activity);
 }

 private void startDialogAuth(Activity activity) {
  CookieSyncManager.createInstance(activity);
  Bundle params = new Bundle();
  dialog(activity, LOGIN, params, new DialogListener() {

   public void onComplete(Bundle values) {
    // ensure any cookies set by the dialog are saved
    CookieSyncManager.getInstance().sync();
    String _token = values.getString(TOKEN);
    setAccessToken(_token);
    // setAccessExpiresIn(values.getString(EXPIRES));
    if (isSessionValid()) {
     Log.d("Foursquare-authorize",
       "Login Success! access_token=" + getAccessToken());
     mAuthDialogListener.onComplete(values);
    } else {
     mAuthDialogListener.onFoursquareError(new FoursquareError(
       "Failed to receive access token."));
    }
   }

   public void onError(DialogError error) {
    Log.d("Foursquare-authorize", "Login failed: " + error);
    mAuthDialogListener.onError(error);
   }

   public void onFoursquareError(FoursquareError error) {
    Log.d("Foursquare-authorize", "Login failed: " + error);
    mAuthDialogListener.onFoursquareError(error);
   }

   public void onCancel() {
    Log.d("Foursquare-authorize", "Login canceled");
    mAuthDialogListener.onCancel();
   }
  });
 }

 public void dialog(Context context, String action, Bundle parameters,
   final DialogListener listener) {

  String endpoint = "";

  parameters.putString("client_id", mClientId);
  parameters.putString("display", "touch");
  if (action.equals(LOGIN)) {
   endpoint = AUTHENTICATE_URL;
   parameters.putString("client_secret", mClientSecret);
   parameters.putString("response_type", "token");
   parameters.putString("redirect_uri", REDIRECT_URI);
  }

//  if (isSessionValid()) {
//   parameters.putString(TOKEN, getAccessToken());
//  }
  String url = endpoint + "?" + Util.encodeUrl(parameters);
  if (context.checkCallingOrSelfPermission(Manifest.permission.INTERNET) != PackageManager.PERMISSION_GRANTED) {
   Util.showAlert(context, "Error",
     "Application requires permission to access the Internet");
  } else {
   new FoursquareDialog(context, url, listener).show();
  }
 }

 public boolean isSessionValid() {
  if (getAccessToken() != null) {
   return true;
  }
  return false;
 }

 public void setAccessToken(String token) {
  mAccessToken = token;
 }

 public String getAccessToken() {
  return mAccessToken;
 }

 public String request(String graphPath) throws MalformedURLException,
   IOException {
  return request(graphPath, new Bundle(), "GET");
 }

 public String request(String graphPath, Bundle parameters)
   throws MalformedURLException, IOException {
  return request(graphPath, parameters, "GET");
 }

 public String request(String graphPath, Bundle params, String httpMethod)
   throws FileNotFoundException, MalformedURLException, IOException {
  params.putString("format", "json");
  if (isSessionValid()) {
   params.putString("oauth_token", getAccessToken());
  }
  String url = API_END_POING_BASE_URL + graphPath;
  return Util.openUrl(url, httpMethod, params);
 }

 public static interface DialogListener {

  /**
   * Called when a dialog completes.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   * @param values
   *            Key-value string pairs extracted from the response.
   */
  public void onComplete(Bundle values);

  /**
   * Called when a Foursquare responds to a dialog with an error.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   */
  public void onFoursquareError(FoursquareError e);

  /**
   * Called when a dialog has an error.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   */
  public void onError(DialogError e);

  /**
   * Called when a dialog is canceled by the user.
   * 
   * Executed by the thread that initiated the dialog.
   * 
   */
  public void onCancel();

 }
}


Download the Source Code
FourSquare.zip


Enjioy Coding

Mukesh Kumar

Hi Guys I am from Delhi working as Web/Mobile Application Developer(Android Developer), also have knowledge of Roboelctric and Mockito ,android test driven development... Blogging has been my passion and I think blogging is one of the powerful medium to share knowledge and ideas....

8 comments:

  1. Hi


    Can you make this link clickable.
    When i click download here then it gives me a screen showing Server not found.Can you tell me exact issue.

    Thanks
    Tushar

    ReplyDelete
  2. Hello Tushar,
    I updated the download link now, please try now.

    ReplyDelete
  3. Hi Mukesh,

    I am using FourSquare API and done integration with Android.

    Can you please upload the code of FourSquare Checkin and add Comment for selected Checkin ?

    See this Link:
    https://play.google.com/store/apps/details?id=com.matthewrathbone.simplecheckin&feature=search_result#?t=W251bGwsMSwxLDEsImNvbS5tYXR0aGV3cmF0aGJvbmUuc2ltcGxlY2hlY2tpbiJd

    ReplyDelete
  4. Hello Dhruv,
    Sure, once I did the foursquare checkin then I will update the code. May be I will do this on this weekend.

    ReplyDelete
  5. Hey Hi Mukesh,

    Can you please upload the code as soon as possible?

    Thanks in advanced..

    ReplyDelete
  6. Hi Mukesh,

    If you have any metrials/source code regarding to this topic then mail me those links.

    Please Mukesh help me its very urgency for me.

    Thanks in advance...

    ReplyDelete
  7. Hello Dhruv,
    Sorry, I didn't tried foursquare checkin ,Its takes time and I have to wrap some other works.

    ReplyDelete

 

Copyright @ 2013 Android Developers Blog.