Соответствующий код (
Код: Выделить всё
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;
Код: Выделить всё
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}]
Код: Выделить всё
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