Menu

Salesforce™ Android Attendance Management App

We are Salesforce™ Experts and we channelize our energy by documenting all the industry-specific technical problems we solve in Salesforce™ CRM world. Here I am going to explain the Salesforce™ Android Attendance Management App. I was closely involved as a Salesforce™ Developer. And we have done it successfully.

This is an Attendance management app integrated with Salesforce™ Rest API and Google Map API. We have developed this app to update the daily Attendance In-time and Out-Time of the employees. Username and Password required for login into the application. Once the user clicks on Attendance In Button a record will be created in Salesforce™ object and while leaving office to click on Attendance out Button same record will be updated with Time outfield. User can’t log in and log out from 100 meters away from the company. If the user forgot to log out while leaving office, So in next day as he will open the app the last record will update and total hours will be count as 5 hours means the half day will be count. We are using Username and Password flow for directly start the app, It will not ask any org credential. 

Client Requirements

  • A client wants an attendance app to manage attendance for employees.
  • They want an Android app which will be managed by Salesforce™.
  • Client requirement is an employee will able to log in and log out only single condition when they are nearby (100 meters) of their office area.
  • The user can see the office location and distance with the best path from their current location.
  • A separate credential for every employee like Username and Password.
  • A client doesn’t want to log in every time when they open the app on their respective devices.
  • Once the user logged in, they can’t log out.
  • The user can put attendance only once i.e between 8 AM to 11:59 PM.
  • All the record will be stored in Salesforce™ database.
  • For every user total hours will be count every day.  

Our Solution

  1. We have developed an android app for attendance management.
  2. All the record will be stored and managed in Salesforce™ DB.
  3. We have integrated Google Map and Salesforce™ Rest API in this application.
  4. Using this app, the user can see the distance between the office and their current location with the best path.
  5. We had provided login feature to all app users with their separate login credentials.
  6. We haven’t developed any logout button as per the client requirement. Once user logged-in then, they can’t exit the app until they uninstall it.
  7. We have created login credentials like Username and Password FLOW to start the app right away, It will not ask any org credential every time.
  8. The user can mark their attendance once a day between 08:00 AM to 11:59 PM.
  9. Salesforce™ will store all the user record like Attendance-In time and out time as well as total hours in a day. 

 

Here are few screenshots of App

  • This is a login page, We need to fill Username and Password and hit on login.
  • Once user logged in then they can mark their attendance. 

 

  • Attendance record details will show in Salesforce™.
  • It will show In time, Out time, Total hours. 

  • In this screenshot, you can see google map integration with App.
  • It will show the path and distance from the source to a fix destination.

 

Here are few code snippets

For check location under 100m

  • Users will only able to log in and log out when they are nearly 100 meters.
  • If the user is beyond pre-defined range i.e 100 meters then, login and logout buttons won’t be Active.
  • And users will be barred from app access

@Override

   public void onLocationChanged(Location location) {

       boolean connected = false;

       ConnectivityManager connectivityManager = (ConnectivityManager) getSystemService(Context.CONNECTIVITY_SERVICE);

       if (connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_MOBILE).getState() == NetworkInfo.State.CONNECTED ||

         connectivityManager.getNetworkInfo(ConnectivityManager.TYPE_WIFI).getState() == NetworkInfo.State.CONNECTED) {

           //we are connected to a network

           connected = true;

       } else {

           connected = false;

           runOnUiThread(new Runnable() {

               @Override

               public void run() {

                  //perform own function when we are not connected to a network   

               }

           });

       }

       Double lat1 = location.getLatitude();

       Double lon2 = location.getLongitude();

       Double caLat1 = cloudAnalogyLocation.getLatitude();// give your location Latitude

       Double caLong1 = cloudAnalogyLocation.getLongitude();// give your location Longitude

       float[] results = new float[1];

       Location.distanceBetween(lat1, lon2,

               caLat1, caLong1, results);

       distanceDiffrence = Math.round(results[0]);

           if (distanceDiffrence < 100 ){

               runOnUiThread(new Runnable() {

                   @Override

                   public void run() {

                       //perform own function when under 100m

                   }

               });

                        }else {

       runOnUiThread(new Runnable() {

                       @Override

                       public void run() {

                           //perform own function when out of 100m

                       }

                   });

               }

           }

                   }

   }

 

Google Map Integration:-

  • Here we did google map API integration with Android.
  • Which help the user to show the exact location of their office. 
  • It will also help to find the best path from the current location.

XML code where you want to show the map

<com.google.android.gms.maps.MapView

   android:id=”@+id/map”

   android:layout_width=”match_parent”

   android:layout_height=”400dp” />

Retrieve location :-

@Override

   public void onMapReady(GoogleMap googleMap) {

       mGoogleMap=googleMap;

       mGoogleMap.setMapType(GoogleMap.MAP_TYPE_HYBRID);

       //Initialize Google Play Services

       if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {

           if (ContextCompat.checkSelfPermission(getContext(),

                   Manifest.permission.ACCESS_FINE_LOCATION)

                   == PackageManager.PERMISSION_GRANTED) {

               //Location Permission already granted

               buildGoogleApiClient();

               mGoogleMap.setMyLocationEnabled(true);

           } else {

               //Request Location Permission

               checkLocationPermission();

           }

       }

       else {

           buildGoogleApiClient();

           mGoogleMap.setMyLocationEnabled(true);

       }

   }

   protected synchronized void buildGoogleApiClient() {

       mGoogleApiClient = new GoogleApiClient.Builder(getActivity())

               .addConnectionCallbacks(this)

               .addOnConnectionFailedListener(this)

               .addApi(LocationServices.API)

               .build();

       mGoogleApiClient.connect();

   }

protected synchronized void buildGoogleApiClient() {

       mGoogleApiClient = new GoogleApiClient.Builder(getActivity())

               .addConnectionCallbacks(this)

               .addOnConnectionFailedListener(this)

               .addApi(LocationServices.API)

               .build();

       mGoogleApiClient.connect();

   }

 

Ajay Dubedi

Ajay Dubedi

Founder CEO | Salesforce Expert

“More than 11 years of industry experience. Responsible for strategy, vision, and project delivery at Cloud Analogy”

Please follow and like us:
Social media & sharing icons powered by UltimatelySocial

Enjoy this blog? Please spread the word :)