鸿蒙学习实战之路-Share Kit系列(13/17)-配置目标应用名单(企业应用)

鸿蒙学习实战之路-Share Kit系列(13/17)-配置目标应用名单(企业应用)

最近好多朋友问我:"西兰花啊,我想让我的应用只分享到指定的企业应用,但不知道代码怎么写?" 害,这问题可问对人了!

今天这篇,我就手把手带你实现配置目标应用名单功能,从零到一,全程不超过 5 分钟(不含调试时间)~


目标应用名单是啥?

目标应用名单就是指定哪些应用可以接收分享。比如:

  • 企业内部应用,只允许分享到企业内部的其他应用
  • 特定场景的应用,只允许分享到指定的应用

这就像前端的白名单功能,只不过 Share Kit 是系统级别的服务,体验更统一。


企业应用专属功能

配置目标应用名单是企业应用专属功能,需要满足以下条件:

  1. 应用必须是企业应用:需要在华为开发者联盟注册为企业应用
  2. 需要申请权限 :需要申请 ohos.permission.DISTRIBUTED_DATASYNC 权限
  3. 需要配置目标应用名单 :在 module.json5 中配置目标应用名单

🥦 西兰花警告

我有个朋友忘记申请权限,结果目标应用名单配置不生效,debug 了两小时才发现是权限问题!血泪教训啊朋友们!


完整实现步骤

实现配置目标应用名单,就两步:

  1. 申请权限 :在 module.json5 中声明权限
  2. 配置目标应用名单 :在 module.json5 中配置目标应用名单

步骤 1:申请权限

module.json5 中声明 ohos.permission.DISTRIBUTED_DATASYNC 权限。

json 复制代码
{
  "module": {
    "requestPermissions": [
      {
        "name": "ohos.permission.DISTRIBUTED_DATASYNC"
      }
    ]
  }
}

步骤 2:配置目标应用名单

module.json5 中配置目标应用名单。

json 复制代码
{
  "module": {
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "startWindowIcon": "$media:launcher",
        "startWindowBackground": "$color:start_window_background",
        "exported": true,
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              "ohos.want.action.sendData"
            ],
            "uris": [
              {
                "scheme": "file",
                "linkFeature": "FileOpen",
                "type": "org.openxmlformats.wordprocessingml.document",
                "maxFileSupported": 1
              }
            ],
            "domainVerify": true
          }
        ]
      }
    ]
  }
}

🥦 西兰花小贴士

目标应用名单需要在华为开发者联盟后台配置,配置后才能生效。配置时需要填写目标应用的包名和签名指纹。


在实际项目中怎么用?

上面的代码是基础实现,但在实际项目中,你可能会这样用:

示例:企业内部应用分享

typescript 复制代码
import { common } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';

@Entry
@Component
struct EnterpriseSharePage {
  // 分享文本
  shareText: string = '这是一段企业内部分享文本';

  // 分享文本(企业内部应用)
  onShareTextToEnterprise() {
    // 构造分享数据
    let shareData: systemShare.SharedData = new systemShare.SharedData({
      utd: 'general.text',
      uri: 'file://.../xxx.txt',
      title: '企业内部分享',
      description: this.shareText
    });

    // 构建分享控制器
    let controller: systemShare.ShareController = new systemShare.ShareController(shareData);

    // 显示分享面板
    let uiContext: UIContext = this.getUIContext();
    let context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext;

    controller.show(context, {
      previewMode: systemShare.SharePreviewMode.DEFAULT,
      selectionMode: systemShare.SelectionMode.SINGLE
    });
  }

  build() {
    Column() {
      Text('企业内部应用分享示例')
        .fontSize(20)
        .fontWeight(FontWeight.Bold)
        .margin(20)
        .fontColor(Color.Black);

      Text(this.shareText)
        .fontSize(16)
        .margin({ left: 20, right: 20, bottom: 20 })
        .fontColor(Color.Gray);

      Button('分享文本(企业内部应用)')
        .onClick(() => {
          this.onShareTextToEnterprise();
        })
        .margin(20);
    }
    .width('100%')
    .height('100%');
  }
}

示例:特定场景应用分享

typescript 复制代码
import { common } from '@kit.AbilityKit';
import { systemShare } from '@kit.ShareKit';

@Entry
@Component
struct SpecificSceneSharePage {
  // 分享文本
  shareText: string = '这是一段特定场景分享文本';

  // 分享文本(特定场景应用)
  onShareTextToSpecificScene() {
    // 构造分享数据
    let shareData: systemShare.SharedData = new systemShare.SharedData({
      utd: 'general.text',
      uri: 'file://.../xxx.txt',
      title: '特定场景分享',
      description: this.shareText
    });

    // 构建分享控制器
    let controller: systemShare.ShareController = new systemShare.ShareController(shareData);

    // 显示分享面板
    let uiContext: UIContext = this.getUIContext();
    let context: common.UIAbilityContext = uiContext.getHostContext() as common.UIAbilityContext;

    controller.show(context, {
      previewMode: systemShare.SharePreviewMode.DEFAULT,
      selectionMode: systemShare.SelectionMode.SINGLE
    });
  }

  build() {
    Column() {
      Text('特定场景应用分享示例')
        .fontSize(20)
        .fontWeight(FontWeight.Bold)
        .margin(20)
        .fontColor(Color.Black);

      Text(this.shareText)
        .fontSize(16)
        .margin({ left: 20, right: 20, bottom: 20 })
        .fontColor(Color.Gray);

      Button('分享文本(特定场景应用)')
        .onClick(() => {
          this.onShareTextToSpecificScene();
        })
        .margin(20);
    }
    .width('100%')
    .height('100%');
  }
}

常见问题

Q1:目标应用名单不生效怎么办?

检查以下几点:

  1. 是否申请了权限

    • 确认是否在 module.json5 中声明了 ohos.permission.DISTRIBUTED_DATASYNC 权限
    • 确认是否在华为开发者联盟后台配置了目标应用名单
  2. 是否正确配置了目标应用名单

    • 确认是否在华为开发者联盟后台正确配置了目标应用的包名和签名指纹
    • 确认目标应用是否已安装

Q2:如何添加多个目标应用?

在华为开发者联盟后台配置目标应用名单时,可以添加多个目标应用,每个目标应用需要填写包名和签名指纹。

Q3:如何删除目标应用?

在华为开发者联盟后台配置目标应用名单时,可以删除目标应用,删除后该应用将不再接收分享。


下一步学什么?

看完这篇,你应该已经能配置目标应用名单了。接下来可以深入学习:

  1. 手机间碰一碰分享:碰一碰分享的实现
  2. 手机与PC/2in1设备间分享:跨设备分享的实现
  3. 隔空传送与可信任设备:隔空传送的实现
  4. 常见问题:分享失败、数据类型不支持等问题的解决方案

推荐资料

📚 官方文档


我是盐焗西兰花,

不教理论,只给你能跑的代码和避坑指南。

下期见!🥦

相关推荐
2601_948606182 小时前
LaTeX学习笔记:开场白与索引
笔记·学习
罗罗攀2 小时前
PyTorch学习笔记|张量的索引分片、合并和维度调整
人工智能·pytorch·笔记·python·学习
RSFeegg2 小时前
【AI Agent 学习笔记 task1】Day2:初识智能体
人工智能·笔记·学习
lengxuemo2 小时前
Excel做正态分布图
学习·excel
Easonmax2 小时前
ReactNative for OpenHarmony项目鸿蒙化三方库:react-native-image-picker — 图片选择器
react native·react.js·harmonyos
思维新观察2 小时前
辉研教育跳绳APP:以分层教学破解青少年跳绳学习痛点
学习·互联网
小陈phd2 小时前
多模态大模型学习笔记(十八)——基于 DeepSeek-7B 的 LoRA 微调训练实战教程
人工智能·笔记·学习
C雨后彩虹2 小时前
最小矩阵宽度
java·数据结构·算法·华为·面试
朗迹 - 张伟2 小时前
UE5.7 基础入门学习笔记
笔记·学习·ue5