Why my GPX uploads don't show up on my Strava dashboard?

405 Views Asked by At

I'm developing a mobile app which is able to record GPS data of an indoor ride like the athlete would circle around a velodrome. It is relatively easy to calculate the GPS points based on the speed measurements the spinning bike provides (compared to an arbitrary GPS route).

The app is uploading my recorded activities in GPX format (gpx.gz to be more precise to speed up things) using the Strava API. The app obtains OAuth token with "activity:write" scope. The Upload POST returns 201 and the upload finishes as well shortly with 200 success code. However after I look at my Strava user dashboard no activity shows up. When I try to view the said activities through Strava's Swagger API play ground it tells me "Record Not Found".

curl -X GET "https://www.strava.com/api/v3/activities/4381960409" -H "accept: application/json" -H "authorization: Bearer zzzzzzzzzzzzzzzzzzzzzzzzzzzz"

https://www.strava.com/api/v3/activities/4381960409
{
  "message": "Record Not Found",
  "errors": [
   {
    "resource": "Activity",
    "field": "id",
    "code": "invalid"
   }
  ]
}

Example activity ids which "got lost in the ether": 4381670165, 4381744693, 4381960409.

My problem is that I don't have any debug information about what could be wrong. I receive success codes, but then the activities just never really materialize. Furthermore I cannot check the Upload's status through their Swagger, because the OAuth token there only has read privileges.

Since I'm generating the GPX files I tested them by manually uploading them. The first one as a Virtual Ride (https://www.strava.com/activities/4094942758) and the second one as a Ride tagged as Indoor cycling (https://www.strava.com/activities/4094974788). Neither of them shows any GPS data whatsoever. However the file contains the data.

So maybe the GPX files have some problem? Here are the two: https://drive.google.com/drive/folders/1dkUvrLxW2r3tvQqvoqAkOB9998N9uLn7?usp=sharing

The app is written in Flutter and uses my derivatives of strava_flutter and rw_tcx.

                        final stravaService = Get.find<StravaService>();
                        await stravaService.login();
                        final records = await _database.recordDao.findAllActivityRecords(activity.id);
                        final statusCode = await stravaService.upload(activity, records);
                        if (statusCode == statusOk) {
                          activity.uploaded = true;
                          await _database.activityDao.updateActivity(activity);
                        }

As I mention, it completes successfully, both the Upload POST and then it gets back 200, this is in the guts of strava_flutter.

1

There are 1 best solutions below

0
On BEST ANSWER

I made multiple mistakes:

  1. I was dealing with multiple file formats (FIT, GPX, TCX) and the actual file I uploaded was TCX. Kudos to Strava developers the system was able to gracefully swallow that and extract the info from the TCX, didn't return an error code. That's smooth.
  2. The main reason why the GPS didn't show: I swapped the lat-lon coordinates. Unfortunately that can be confusing as well, especially if someone is tired. https://macwright.com/lonlat/ After some additional corrections the GPS now shows: https://www.strava.com/activities/4104607928