HarmonyOS鸿蒙Next中【快应用】搭建数据交换的桥梁--不同快应用的数据共享案例

HarmonyOS鸿蒙Next中【快应用】搭建数据交换的桥梁–不同快应用的数据共享案例 【关键词】

数据交换,签名指纹,快应用

【问题描述】

不同快应用之间的数据交换,调用exchange. get获取数据时出现报错提示,sign参数不填提示202参数错误,sign参数填入发布方快应用的签名证书后,仍是提示200错误,该如何处理?

接口调用:

exchange.get({
  package: 'com.huawei.1104',
  sign: "538dc4a54b0ed1def37fd0bdfe064178a7e532d832e74dd7013485841acf5d81",
  key: 'test2',
  scope: "application",
  success: function (ret) {
    console.log(`handling success, value = ${ret}`)
  },
  fail: function (data, code) {
    console.log(`handling fail, code = ${code}`)
  }
})

证书:

报错截图:

【问题分析】

此问题的原因时sign参数填写不对导致的,exchange接口中的sign参数,描述是使用 SHA-256 加密的数据发布方签名,很多时候会理解成华为ide生成的指纹证书,其实是不对的,这里的sign参数是应填写pkg.getSignatureDigests接口返回的signatureDigests(使用SHA-256算法处理后的签名信息列表)。这样才能成功调用exchange.get接口获取到共享数据。

【解决方案】

在调用get接口时,需要先拿到数据发布方的签名信息,同时还需要确保数据发布方有授权对应应用去获取否则也会调用失败的。

数据发布方接口调用流程:

Step1、exchange.set接口设置数据。

set() {
  exchange.set({
    package: 'com.huawei.1104',
    sign: 'ddba5db57dbf3357277b05fa7781c197425c957c3d71fb3b0c99350d188bca9a',
    key: 'test3',
    scope: "application",
    value: 'testmessage',
    success: function () {
      console.log(`handling success`)
    },
    fail: function (data, code) {
      console.log(`handling fail, code = ${code}`)
    }
  })
},

Step2、pkg.getSignatureDigests接口拿到被授权应用的签名信息。

getSign() {
  var that = this
  app.getPackageInfo({
    packageName: 'com.huawei.exchange',
    success: function (data) {
      console.log("APP getPackageInfo is : " + data.signatures);
      that.info = data.signatures;
    },
  })
}

Step 3、exchange.grantPermission授权对应应用获取。

grantPermission() {
  var that = this
  exchange.grantPermission({
    package: 'com.huawei.exchange',
    sign: that.info,
    writable: true,
    success: function () {
      console.log(`handling success`)
    },
    fail: function (data, code) {
      console.log(`handling fail, code = ${code}`)
    }
  })
},

被授权应用获取流程:

Step1、 pkg.getSignatureDigests接口拿到数据发布方应用的签名信息。

bGetSign() {
  var that = this
  app.getPackageInfo({
    packageName: 'com.huawei.1104',
    success: function (data) {
      console.log("APP getPackageInfo is : " + data.signatures);
      that.info = data.signatures;
      that.get_success = data;
    },
  })
}

Step2、exchange.get接口获取数据发布方的共享数据。

bGet() {
  var that = this
  exchange.get({
    package: 'com.huawei.1104',
    sign: that.info,
    key: 'test3',
    scope: "application",
    success: function (ret) {
      console.log(`handling success, value = ${ret}`)
    },
    fail: function (data, code) {
      console.log(`handling fail, code = ${code}`)
    }
  })
}

成功拿到发布方共享数据


更多关于HarmonyOS鸿蒙Next中【快应用】搭建数据交换的桥梁--不同快应用的数据共享案例的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于HarmonyOS鸿蒙Next中【快应用】搭建数据交换的桥梁--不同快应用的数据共享案例的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


在HarmonyOS鸿蒙Next中,快应用通过DataAbilityDataShare机制实现数据共享。开发者可以创建DataAbility提供数据访问接口,其他快应用通过DataShare调用这些接口进行数据交换。例如,应用A通过DataAbility提供用户信息,应用B通过DataShare获取并显示这些信息。这种方式确保了数据的安全性和隔离性,同时实现了跨应用的高效数据共享。

回到顶部