Проблема с получением данных Google Fit на разных учетных записях и устройствах в приложении React NativeAndroid

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Проблема с получением данных Google Fit на разных учетных записях и устройствах в приложении React Native

Сообщение Anonymous »

Я работаю над приложением React Native, которое использует Google Fitness API для получения данных о количестве шагов, расстоянии и калориях. Я использую пакеты response-native-google-fit и @supersami/rn-foreground-service. Извлечение данных отлично работает в моей основной учетной записи Google, но не работает в других учетных записях.
Соответствующий код (

Код: Выделить всё

fetchGoogleFit
функция):

Код: Выделить всё

import ...
import ReactNativeForegroundService from '@supersami/rn-foreground-service';
import googleFit from 'react-native-google-fit';

export default function MapActivity() {
// Google Fit data
const [steps, setSteps] = useState(0);
const [distance, setDistance] = useState(0);
const [calories, setCalories] = useState(0);

const [startTime, setStartTime] = useState(new Date().toISOString());
const toggleStarted = () => setToggleActivity(!toggleActivity)

useEffect(() => {  // start task everytime activity is toggled
if (toggleActivity) {
startForegroundTask();
return () => stopForegroundTask();
}
}, [toggleActivity]);

const startForegroundTask = () => {
console.log('Added tasks');
ReactNativeForegroundService.add_task(() => fetchGoogleFit(), {
delay: 1000,
onLoop: true,
taskId: 'fetchGoogleFit',
onError: e => console.log(e),
});
};

const stopForegroundTask = () => {
console.log('Removed tasks');
ReactNativeForegroundService.remove_task('fetchGoogleFit');
};

const fetchGoogleFit = async () => {
try {
let auth = !googleFit.isAuthorized ? await googleFit.authorize() : true;
console.log('auth:', auth); // log: true
if (auth) {
const optSteps = {
startDate: startTime,
endDate: new Date().toISOString(),
bucketUnit: 'DAY',
bucketInterval: 1,
};
const currSteps = await googleFit.getDailyStepCountSamples(optSteps);
for (let i = 0; i < currSteps.length; i++) {
if (
currSteps[i].source === 'com.google.android.gms:estimated_steps' &&
currSteps[i].steps.length > 0
) {
setSteps(currSteps[i].steps[0].value);
break;
}
}

const optCalories = {
startDate: startTime,
endDate: new Date().toISOString(),
basalCalculation: true,
bucketUnit: 'DAY',
bucketInterval: 1,
};
const currCalories = await googleFit.getDailyCalorieSamples(
optCalories,
);
if (currCalories.length > 0) {
setCalories(parseFloat(currCalories[0].calorie.toFixed(1)));
}

const optDistance = {...optSteps};
const currDistance = await googleFit.getDailyDistanceSamples(
optDistance,
);
if (currDistance.length >  0) {
setDistance(parseFloat(currDistance[0].distance.toFixed(1)));
}
} else {
console.log('Google Fit authorization failed!');
}
} catch (error) {
console.error(error);
}
};

return (

...

);
}

export default MapActivity;
Журналы из моей основной учетной записи Google — rahulm2053@gmail.com

Код: Выделить всё

LOG  [{"rawSteps": [], "source": "com.google.android.gms:merge_step_deltas", "steps": []}, {"rawSteps": [], "source": "com.xiaomi.hm.health", "steps": []}, {
"rawSteps": [[Object]], "source": "com.google.android.gms:estimated_steps", "steps": [[Object]]}]
// The "rawSteps": [[Object]] gives:
LOG  {"rawSteps": [{"dataSourceId": "derived:com.google.step_count.delta:com.google.android.gms:aggregated", "dataTypeName": "com.google.step_count.delta", "deviceManufacturer": "Xiaomi", "deviceModel": "M2101K6P", "deviceType": "phone", "deviceUid": "d396e761", "endDate": 1719125694043, "originDataSourceId": "raw:com.google.step_count.cumulative:Xiaomi:M2101K6P:d396e761:pedometer  Non-wakeup", "startDate": 1719125651487, "steps": 10}], "source": "com.google.android.gms:estimated_steps", "steps": [{"date": "2024-06-23", "value": 10}]}

LOG  [{"day": "Sun", "distance": 2.0318520069122314, "endDate": "2024-06-23T06:51:03.648Z", "startDate": "2024-06-23T06:51:00.048Z"}]
LOG  [{"calorie": 0.8895832896232605, "day": "Sun", "endDate": "2024-06-23T06:51:14.274Z", "startDate": "2024-06-23T06:50:25.843Z", "wasManuallyEntered": false}]
Журналы других аккаунтов Google

Код: Выделить всё

LOG  [{"rawSteps": [], "source": "com.google.android.gms:estimated_steps", "steps": []}, {"rawSteps": [], "source": "com.xiaomi.hm.health", "steps": []}, {"rawSteps": [], "source": "com.google.android.gms:merge_step_deltas", "steps": []}]
LOG  []  // distance
LOG  []  // calories
Я предоставил необходимые разрешения при использовании всех учетных записей.
Экран согласия OAuth
Экран согласия OAuth
Другие устройства< /h3>
Проблема сохраняется, даже когда я пытаюсь использовать ту же учетную запись Google (rahulm2053@gmail.com) на других устройствах. Даже учетная запись (carevigiltracker@gmail.com), которая использовалась для настройки API в Google Cloud Console, не работает. Он также не работает даже при использовании основной учетной записи Google для этого устройства Android или любой другой учетной записи.
Работает на Redmi Note 10 Pro (мое основное устройство под управлением Android 12).
Не работает на любом другом устройстве Android (версии Android 12, 13, 14).
Он был протестирован только на Android, который моя единственная забота на данный момент.
Вопросы:
  • Почему получение данных работает для моей основной учетной записи Google, но не для других?
  • Требуются ли какие-либо дополнительные разрешения или настройки для других учетных записей?
  • Как я могу обеспечить согласованное получение данных из разных учетных записей Google и устройства?
Что я пробовал:
  • Проверил разрешения Google Fit: Проверено, что для каждой учетной записи предоставлены все необходимые разрешения.
  • Повторная авторизация Google Fit: попытка повторной авторизации для неработающих учетных записей.
  • Зарегистрировано. Подробные данные: добавлено подробное ведение журнала для отладки данных, получаемых от Google Fit.
  • Настройка проекта в Google Cloud Console: проверена правильная настройка проекта и API в Google Cloud Console со всеми необходимыми конфигурациями. и учетные данные.


Подробнее здесь: https://stackoverflow.com/questions/786 ... -react-nat
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»