Strava-API接入

169 阅读1分钟

developers.strava.com/docs/authen…

package com.huawo.module_service.util;

import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;

import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

import okhttp3.Call;
import okhttp3.Callback;
import okhttp3.FormBody;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Headers;
import okhttp3.Request;
import okhttp3.RequestBody;
import okhttp3.Response;

public class StravaManager {

    private static final String STRAVA_OAUTH_TOKEN_URL = "https://www.strava.com/oauth/token";

    private static final String STRAVA_API_URL = "https://www.strava.com/api/v3/activities";

    private static final String CLIENT_ID = "133313"; // Strava Client ID

    private static final String CLIENT_SECRET = "7b01eda43dfa69efb4fedd9e641f55ecb46e4331"; // Strava Client Secret


    public static void requestIntentAuthorize(Context context) {
        Uri intentUri = Uri.parse("https://www.strava.com/oauth/mobile/authorize")
                .buildUpon()
                .appendQueryParameter("client_id", "133313")
                .appendQueryParameter("redirect_uri", "https://www.huawo-wear.com")
                .appendQueryParameter("response_type", "code")
                .appendQueryParameter("approval_prompt", "auto")
                .appendQueryParameter("scope", "activity:write,read")
                .build();
        Intent intent = new Intent(Intent.ACTION_VIEW, intentUri);
        context.startActivity(intent);
    }

    public static void requestAccessToken(String authorizationCode, Callback callback) {
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");
        RequestBody body = new FormBody.Builder()
                .add("client_id", CLIENT_ID)
                .add("client_secret", CLIENT_SECRET)
                .add("code", authorizationCode)
                .add("grant_type", "authorization_code")
                .build();

        Request request = new Request.Builder()
                .url(STRAVA_OAUTH_TOKEN_URL)
                .post(body)
                .build();

        client.newCall(request).enqueue(callback);
    }


    public static void uploadActivity(String accessToken, String name, String activityType, String sportType, long startTime, int elapsedSeconds, float distance,Callback callback) {
        OkHttpClient client = new OkHttpClient();
        MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded; charset=utf-8");
        RequestBody body = new FormBody.Builder()
                .add("name", name)
                .add("type", activityType)
                .add("sport_type", sportType)
                .add("start_date_local", getFormattedDate(startTime))
                .add("elapsed_time", String.valueOf(elapsedSeconds))
                .add("distance", String.valueOf(distance))
                .build();

        Headers headers = new Headers.Builder()
                .add("Authorization", "Bearer " + accessToken)
                .build();

        Request request = new Request.Builder()
                .url(STRAVA_API_URL)
                .headers(headers)
                .post(body)
                .build();

        client.newCall(request).enqueue(callback);
    }

    // 辅助方法,用于格式化日期
    private static String getFormattedDate(long timestamp) {
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ssZ", Locale.US);
        return sdf.format(new Date(timestamp * 1000));
    }
}