I'm getting a 404 error when clicking the allow button. I'm having this problem only in my live server(https://www.gogch.com/app/). Its working fine in my local server(http://localhost:8080) and also a test server(https://testing.gogch.com/app/).
This is what the log says
11-08-2015 10:02:14 ERROR Logger:1962 - populate
com.fitbit.api.FitbitAPIException: 400: The request was invalid. An accompanying error message will explain why.
{"errors":[{"errorType":"request","fieldName":"n/a","message":"This request should use https protocol."}],"success":false}
at com.fitbit.api.client.http.HttpClient.httpRequest(HttpClient.java:460)
at com.fitbit.api.client.http.HttpClient.get(HttpClient.java:398)
at com.fitbit.api.client.FitbitApiClientAgent.httpGet(FitbitApiClientAgent.java:2784)
at com.fitbit.api.client.FitbitApiClientAgent.httpGet(FitbitApiClientAgent.java:2734)
at com.fitbit.api.client.FitbitApiClientAgent.getSubscriptions(FitbitApiClientAgent.java:2548)
at com.fitbit.api.client.FitbitApiClientAgent.getSubscriptions(FitbitApiClientAgent.java:2537)
at com.cinch.gch.controller.FitbitApiClientController.populate(FitbitApiClientController.java:1959)
at com.cinch.gch.controller.FitbitApiClientController.showProfileForm2(FitbitApiClientController.java:510)
at com.cinch.gch.controller.FitbitApiClientController.showCompleteAuthorizat(FitbitApiClientController.java:311)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:214)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:132)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:104)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandleMethod(RequestMappingHandlerAdapter.java:748)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:689)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:83)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:945)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:876)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:931)
at org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:822)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:620)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:807)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:745)
Live and test both use https. and its working in test. I can't figure out what is the problem in my live server. Here's the populate function where the error occurs.
public void populate(RequestContext context, HttpServletRequest request,
HttpServletResponse response) {
context.setApiClientService(apiClientService);
context.setOurUser(getOrMakeExampleAppUser(request, response));
APIResourceCredentials resourceCredentials = context
.getApiClientService().getResourceCredentialsByUser(
context.getOurUser());
boolean isAuthorized = resourceCredentials != null
&& resourceCredentials.isAuthorized();
boolean isSubscribed = false;
if (isAuthorized) {
List<ApiSubscription> subscriptions = Collections.emptyList();
try {
subscriptions = apiClientService.getClient().getSubscriptions(
context.getOurUser());
} catch (FitbitAPIException e) {
log.error("populate", e);
}
if (null != context.getOurUser() && subscriptions.size() > 0) {
isSubscribed = true;
}
}
request.setAttribute("actionBean", context);
request.setAttribute("isSubscribed", isSubscribed);
request.setAttribute("exampleBaseUrl", getExampleBaseUrl());
}
Can someone be kind enough to help me?
Regards.
Answered! Go to the Best Answer.
Best Answercall backs were not correct. Thank you
Best Answer
Fitbit Developers oversee the SDK and API forums. We're here to answer questions about Fitbit developer tools, assist with projects, and make sure your voice is heard by the development team.
What is the URL that you requested that gave this error?
If you're getting an error saying that you're not using HTTPS, you're very likely not using https://api.fitbit.com somewhere.
Best AnswerHi,
I have a similar issue. I also made a unity application and I am trying to use fitbit data with it.
I found this unity project, https://github.com/TravisEvashkevich/UnityFitbit which is amazingly helpful in understanding the whole procedure. After I ran the project thought, as expected it took me to the authorisation page, and after I clicked allow it took me to my callbackUrl. For now, I had my callbackUrl set as the one in the project or a random website of my client because I am not sure what I should set it to. Since I don't know what I am supposed to set as my callBackUrl, I don't know how to get my new returnCode/code which then remains null, so I can't use any getData functions.
Any idea what I am doing wrong?
Forgive me if my question seems foolish, I just literally started trying to work out how extracting data from fitbit works and I am stuck here the last couple of days, so I thought I should ask. xD
How did you work it out? 🙂
I am stuck at the callback_url for the moment..
See no way out.. 🙂
Best AnswerHi Andion. We need to take fitbit datas on our server.Until now we couldnt do it.We are facing problems. Cn you help us or can u please show us a way to do that?Thanks for your time
Best Answer