Плагин Ionic Health не может подключиться к Google Fit

Я использую Ionic React для создания приложения, которое передает данные о фитнесе пользователя с помощью плагина ionic Cordova health, но, похоже, не работает.

import { Health } from "@ionic-native/health/ngx";


const Tab1: React.FC = () => {
  let health = new Health();
  const healtChanger = () => {
        health.isAvailable()
        .then((available:boolean) => {
          console.log(health.isAuthorized(['steps']));
      if(health.isAuthorized(['steps']))
      {
        console.log("Already Authorised");
        health.queryAggregated({
          startDate: new Date(new Date().getTime() - 3 * 24 * 60 * 60 * 1000), // three days ago
          endDate: new Date(), // now
          dataType: 'steps',
          bucket: 'day'
        })
        .then(res => console.log(res))
        .catch(e => console.log(e));
      }
      else {
        health.requestAuthorization([
          'distance', 'nutrition',  //read and write permissions
          {
            read: ['steps'],       //read only permission
          }
        ])
        .then(res => console.log(res))
        .catch(e => console.log(e));
      }
    })
    .catch(e => console.log(e)); 
  };

Код, кажется, имеет авторизацию, но когда я пытаюсь выполнить, он выдает ошибку cannot connect to google fit. Вывод в chrome inspect для устройства Android выглядит следующим образом:

main.871c1aec.chunk.js:1 Promise {<pending>}
main.871c1aec.chunk.js:1 Already Authorised
main.871c1aec.chunk.js:1 Cannot connect to Google Fit

Любая помощь будет принята с благодарностью.

1 ответ

Решение

Прежде чем запрашивать доступ к данным о пригодности пользователя из приложения Google fit, вам необходимо получить ключ sha1 вашего debug. keystore авторизован на странице API Google fit и сгенерирует экран 0auth для запроса доступа. Чтобы получить доступ к api и ключ Shaq, посетите эту страницу Google Fit и выполните указанные ниже действия. После того, как вы авторизовали свой ключ sha1 и имя пакета для получения доступа, теперь вы можете удалить папку ur android из своего проекта, повторно добавить ее и перестроить apk из студии Android, и после развертывания на своем устройстве вам будет предложен правильный доступ Экран авторизации для предоставления доступа, и вы сможете увидеть данные для него.

requestAuthorization()Метод должен быть вызван перед использованием методов запроса и хранения, даже если авторизация уже была предоставлена ​​в какой-то момент в прошлом. если мы не позвоним им раньше, это может вызвать сбой приложения, а Google Fit выдаст ошибкуcannot connect to google fit.

В вашем коде внутри оператора if вам нужно вызвать requestAuthorization() перед health.queryAggregated or health.query:-

    if (health.isAuthorized(["steps"])) {
          console.log("Already Authorised");
          health.requestAuthorization([
              "distance",
              "nutrition", 
              {
                read: ["steps", "height", "weight"], 
                write: ["height", "weight"], 
              },
            ])
            .then((res) => console.log("response " + res))
            .catch((e) => console.log("error " + e));

          health.queryAggregated({
              startDate: new Date(new Date().getTime() - 3 * 24 * 60 * 60 * 1000), 
              endDate: new Date(), // now
              dataType: 'steps',
              bucket: 'day'
            })
            .then(res => console.log(res))
            .catch(e => console.log(e));
        } else {
          health
            .requestAuthorization([
              "distance",
              "nutrition", 
              {
                read: ["steps"], 
                write: ["height", "weight"], 
              },
            ])
            .then((res) => console.log(res))
            .catch((e) => console.log(e));
        }
      })
      .catch((e) => console.log(e));
  };
Другие вопросы по тегам