Ionic Health 插件无法连接到 google fit

Ionic Health Plugin unable to connect to google fit

我正在使用 Ionic React 构建一个应用程序,该应用程序使用 ionic Cordova 健康插件与用户的健身数据进行通信,但似乎不起作用。

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 for android device 的输出如下:

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

非常感谢任何帮助。

在请求从 Google fit 应用程序访问用户健身数据之前,您需要从 Google fit api 页面获得 debug. keystore 的 sha1 密钥授权并生成用于请求访问的 0auth 屏幕。 要获得 api 访问权限和 Shaq 密钥,请访问此Google fit page 并按照所示步骤操作。 在您授权您的 sha1 密钥和包名称获得访问权限后,您现在可以从您的项目中删除您的 android 文件夹,重新添加它并从 Android studio 重建 apk,一旦您部署到您的设备然后你会被要求适当的访问授权屏幕授予访问权限,你将能够看到相同的数据。

requestAuthorization() 方法必须在使用查询和存储方法之前调用,即使授权已经在过去的某个时间点给出。如果我们不提前调用它们可能会导致应用程序崩溃并且 google fit 会给出错误 cannot connect to google fit.

在 if 语句中的代码中,您需要在 health.queryAggregated or health.query 之前调用 requestAuthorization() :-

    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));
  };