FitBit OAuth and HTTP SDK
You need to define an App in the FitBit Console at https://dev.fitbit.com/apps
Make sure to set your "OAuth 2.0 Application Type" to Client
You need the "OAuth 2.0 Client ID". It is a short (6 Chars) Alphanumeric Value. Copy it as you need it in the Examplecode...
Basically it is using a Webview to show the Request to the User:
Make sure to update the redirect_uri to match your Server
In page_finished Event of the Webview we chevk for the existence of a token and Extract it
You should store the token to a Database, KVS or whatever to restore it when you restart the app.
After you successfully got a token you can use it to use the http sdk from FitBit
Get the active User Profile:
Get the active User Activities:
You need to define an App in the FitBit Console at https://dev.fitbit.com/apps
Make sure to set your "OAuth 2.0 Application Type" to Client
You need the "OAuth 2.0 Client ID". It is a short (6 Chars) Alphanumeric Value. Copy it as you need it in the Examplecode...
B4X:
Sub Activity_Create(FirstTime As Boolean)
'Do not forget to load the layout file created with the visual designer. For example:
Activity.LoadLayout("Layout1")
access_token = ""
client_id = "your client id here"
Basically it is using a Webview to show the Request to the User:
B4X:
Sub Button1_Click
www.LoadUrl("https://www.fitbit.com/oauth2/authorize?response_type=token&client_id="&client_id&"&redirect_uri=http%3A%2F%2Fdonmanfred.basic4android.de%2F&scope=activity%20nutrition%20heartrate%20location%20nutrition%20profile%20settings%20sleep%20social%20weight")
End Sub
In page_finished Event of the Webview we chevk for the existence of a token and Extract it
B4X:
Sub www_PageFinished (Url As String)
Log($"www_PageFinished(${Url})"$)
If Url.Contains("#access_token") Then
Dim token As String = Url.SubString(Url.IndexOf("#access_token")+14)
Log(token)
access_token = token.SubString2(0,token.IndexOf("&"))
Log("Access Token = "&access_token)
End If
End Sub
After you successfully got a token you can use it to use the http sdk from FitBit
Get the active User Profile:
B4X:
Sub Button2_Click
Dim job As HttpJob
job.Initialize("Profile",Me)
job.Download("https://api.fitbit.com/1/user/-/profile.json")
job.GetRequest.SetHeader("Authorization","Bearer "&access_token)
wait for (job) JobDone(j As HttpJob)
If j.Success Then
Log(j.GetString)
'Dim OutStream As OutputStream = File.OpenOutput(File.DirRootExternal, "Result.txt", False)
'File.Copy2(job.GetInputStream,OutStream) ' save the file
'OutStream.Close
Dim parser As JSONParser
parser.Initialize(j.GetString)
Dim root As Map = parser.NextObject
Dim user As Map = root.Get("user")
Dim distanceUnit As String = user.Get("distanceUnit")
Dim gender As String = user.Get("gender")
Dim displayName As String = user.Get("displayName")
Dim timezone As String = user.Get("timezone")
Dim waterUnit As String = user.Get("waterUnit")
Dim isGraduationAvailable As String = user.Get("isGraduationAvailable")
Dim avatar640 As String = user.Get("avatar640")
Dim clockTimeDisplayFormat As String = user.Get("clockTimeDisplayFormat")
Dim displayNameSetting As String = user.Get("displayNameSetting")
Dim locale As String = user.Get("locale")
Dim offsetFromUTCMillis As Int = user.Get("offsetFromUTCMillis")
Dim foodsLocale As String = user.Get("foodsLocale")
Dim strideLengthRunningType As String = user.Get("strideLengthRunningType")
Dim autoStrideEnabled As String = user.Get("autoStrideEnabled")
Dim features As Map = user.Get("features")
Dim exerciseGoal As String = features.Get("exerciseGoal")
Dim memberSince As String = user.Get("memberSince")
Dim waterUnitName As String = user.Get("waterUnitName")
Dim mfaEnabled As String = user.Get("mfaEnabled")
Dim heightUnit As String = user.Get("heightUnit")
Dim isChild As String = user.Get("isChild")
Dim height As Int = user.Get("height")
Dim strideLengthWalking As Double = user.Get("strideLengthWalking")
Dim avatar150 As String = user.Get("avatar150")
Dim topBadges As List = user.Get("topBadges")
For Each coltopBadges As Map In topBadges
Dim dt As String = coltopBadges.Get("dateTime")
Dim timesAchieved As Int = coltopBadges.Get("timesAchieved")
Dim badgeGradientStartColor As String = coltopBadges.Get("badgeGradientStartColor")
Dim image100px As String = coltopBadges.Get("image100px")
Dim image50px As String = coltopBadges.Get("image50px")
Dim shareImage640px As String = coltopBadges.Get("shareImage640px")
Dim description As String = coltopBadges.Get("description")
Dim shortDescription As String = coltopBadges.Get("shortDescription")
Dim badgeGradientEndColor As String = coltopBadges.Get("badgeGradientEndColor")
Dim encodedId As String = coltopBadges.Get("encodedId")
Dim earnedMessage As String = coltopBadges.Get("earnedMessage")
Dim badgeType As String = coltopBadges.Get("badgeType")
Dim image300px As String = coltopBadges.Get("image300px")
Dim marketingDescription As String = coltopBadges.Get("marketingDescription")
Dim name As String = coltopBadges.Get("name")
Dim shareText As String = coltopBadges.Get("shareText")
Dim image125px As String = coltopBadges.Get("image125px")
Dim image75px As String = coltopBadges.Get("image75px")
Dim category As String = coltopBadges.Get("category")
Dim shortName As String = coltopBadges.Get("shortName")
Dim value As Int = coltopBadges.Get("value")
Dim cheers As List = coltopBadges.Get("cheers")
Dim mobileDescription As String = coltopBadges.Get("mobileDescription")
Next
Dim familyGuidanceEnabled As String = user.Get("familyGuidanceEnabled")
Dim strideLengthRunning As Double = user.Get("strideLengthRunning")
Dim fullName As String = user.Get("fullName")
Dim weight As Int = user.Get("weight")
Dim dateOfBirth As String = user.Get("dateOfBirth")
Dim avatar As String = user.Get("avatar")
Dim encodedId As String = user.Get("encodedId")
Dim swimUnit As String = user.Get("swimUnit")
Dim startDayOfWeek As String = user.Get("startDayOfWeek")
Dim glucoseUnit As String = user.Get("glucoseUnit")
Dim corporate As String = user.Get("corporate")
Dim ambassador As String = user.Get("ambassador")
Dim strideLengthWalkingType As String = user.Get("strideLengthWalkingType")
Dim corporateAdmin As String = user.Get("corporateAdmin")
Dim averageDailySteps As Int = user.Get("averageDailySteps")
Dim age As Int = user.Get("age")
Dim weightUnit As String = user.Get("weightUnit")
Log($"Age ${age} - Steps Average = ${averageDailySteps}"$)
Else
Log("JobError: "&job.ErrorMessage)
End If
End Sub
Get the active User Activities:
B4X:
Sub Button3_Click
Dim job As HttpJob
job.Initialize("activities",Me)
job.Download("https://api.fitbit.com/1/user/-/activities.json")
job.GetRequest.SetHeader("Authorization","Bearer "&access_token)
wait for (job) JobDone(j As HttpJob)
If j.Success Then
Log(j.GetString)
'Dim OutStream As OutputStream = File.OpenOutput(File.DirRootExternal, "Result2.txt", False)
'File.Copy2(job.GetInputStream,OutStream) ' save the file
'OutStream.Close
Dim parser As JSONParser
parser.Initialize(j.GetString)
Dim root As Map = parser.NextObject
Dim lifetime As Map = root.Get("lifetime")
Dim total As Map = lifetime.Get("total")
Dim floors As Int = total.Get("floors")
Dim distance As Double = total.Get("distance")
Dim caloriesOut As Int = total.Get("caloriesOut")
Dim activeScore As Int = total.Get("activeScore")
Dim steps As Int = total.Get("steps")
Dim tracker As Map = lifetime.Get("tracker")
Dim floors As Int = tracker.Get("floors")
Dim distance As Double = tracker.Get("distance")
Dim caloriesOut As Int = tracker.Get("caloriesOut")
Dim activeScore As Int = tracker.Get("activeScore")
Dim steps As Int = tracker.Get("steps")
Dim best As Map = root.Get("best")
Dim total As Map = best.Get("total")
Dim floors As Map = total.Get("floors")
Dim date As String = floors.Get("date")
Dim value As Double = floors.Get("value")
Dim distance As Map = total.Get("distance")
Dim date As String = distance.Get("date")
Dim value As Double = distance.Get("value")
Dim steps As Map = total.Get("steps")
Dim date As String = steps.Get("date")
Dim value As Int = steps.Get("value")
Dim tracker As Map = best.Get("tracker")
Dim floors As Map = tracker.Get("floors")
Dim date As String = floors.Get("date")
Dim value As Double = floors.Get("value")
Dim distance As Map = tracker.Get("distance")
Dim date As String = distance.Get("date")
Dim value As Double = distance.Get("value")
Dim steps As Map = tracker.Get("steps")
Dim date As String = steps.Get("date")
Dim value As Int = steps.Get("value")
'Log($"Age ${age} - Steps Average = ${averageDailySteps}"$)
Else
Log("JobError: "&job.ErrorMessage)
End If
End Sub
Attachments
Last edited: