关于华为:原子化服务的官方解析来啦

164次阅读

共计 11582 个字符,预计需要花费 29 分钟才能阅读完成。

始终关注咱们的小伙伴们必定据说过“原子化服务”了,可能有些小伙伴还据说过“元服务”。元服务,其实就是原子化服务。那么原子化服务到底是什么,权威的官网解析来啦~

一、原子化服务是什么?

咱们日常生活中曾经习惯了利用的概念,而原子化服务是 HarmonyOS 面向未来提供的一种用户程序状态。为什么须要一种新的用户程序状态呢?

传统的利用是以设施为核心,应用前必须手动装置利用,这样导致利用像生了根一样,牢牢的固定在某个设施上。而在万物互联的时代,人均持有设施量一直攀升,设施和场景的多样性,每个设施都须要独立开发一个利用,先装置后应用、不同设施的能力不兼容等传统利用的短板逐渐裸露进去。在此背景下,利用提供方和用户都迫切需要一种新的服务提供形式,使利用开发更简略、服务(如听音乐、打车等)的获取和应用更便捷,原子化服务也就此诞生。

那么原子化服务到底是什么呢?

原子化服务是 HarmonyOS 提供的一种面向未来的服务形式,是有独立入口的(用户可通过点击形式间接触发)、免装置的(无需显式装置,由零碎后盾装置后即可应用)、可为用户提供一个或多个便捷服务的用户应用程序状态。

例如:传统形式的购物利用,在依照原子化服务理念调整设计后,能够由多个服务中转、免装置的原子化服务实现,比方“商品浏览”、“购物车”、“领取”等。

二、带您体验原子化服务

上面让我带您体验一下原子化服务,帮忙大家更好地理解原子化服务到底是什么样的。

2.1 多种入口

咱们能够通过多种形式发现原子化服务:

1. 一种为 NFC 标签,另一种为多功能码。NFC 标签为物理打印标签,反对手机碰一碰应用相应服务。多功能码能够为物理打印的标签,反对手机碰一碰及扫一扫应用相应服务,也能够为屏幕上出现的电子标签,反对扫一扫。多功能码有两种款式,别离用于跨设施体验和三方服务。

2. 用户也能够在设施的服务中心、桌面等中央发现并治理原子化服务。

3. 原子化服务能够基于适合场景被被动举荐给用户应用;用户也能够在服务中心和小艺倡议中发现零碎举荐的服务。

阐明:“小艺”是语音助手在华为设施中的名字。小艺能够答复用户的问题、管制家居设施、执行用户的日常工作等;而且,小艺能够通过不同设施感知用户的应用场景,举荐用户可能须要的服务。

2.2 服务卡片

与传统利用不同,原子化服务在设施桌面没有利用图标,是通过服务卡片的模式将重要信息展现在服务中心或者桌面。用户点击服务卡片,即可进入原子化服务的服务界面。

服务卡片的核心理念在于提供用户容易应用且高深莫测的信息内容,将智慧化能力融入到服务卡片的体验中供用户抉择应用,同时满足在不同终端设备上的展现和自适应。

值得注意的是,原子化服务和 HarmonyOS 利用都反对服务卡片。对于原子化服务,服务卡片是必选的,每个原子化服务至多有一个服务卡片。而对于 HarmonyOS 利用,服务卡片是可选配置。

阐明:HarmonyOS 利用,即运行在 HarmonyOS 零碎上且具备 HarmonyOS 个性的利用。

2.3 服务流转

原子化服务反对运行在 1 +8+ N 设施上。

●“1”代表手机

●“8”代表平板、智慧屏、音箱、眼镜、手表、车机、耳机、PC

●“N”代表静止衰弱、智能家居、智慧出行、智慧办公、影音娱乐等场景延长的泛 IoT 设施。

原子化服务的流转能力突破设施界线,多设施联动,使原子化服务可分可合、可流转,实现如邮件跨设施编辑、多设施协同健身、多屏游戏等分布式业务。

原子化服务的流转触发形式有两种:零碎举荐流转和用户手动流转。

①零碎举荐流转:用户应用原子化服务时,如果所处环境中存在应用体验更优的可选设施,则零碎主动为用户举荐该设施,用户可确认是否启动流转。

②用户手动流转:用户能够手动抉择适合的设施进行流转。用户点击图标后,会调起零碎提供的流转面板。面板中会展现出原子化服务的信息及可流转的设施,疏导用户进行后续的流转操作。

2.4 服务分享

原子化服务所提供的便捷服务,能够通过接入华为分享实现近距离疾速分享,使便捷服务能够精准疾速的推送至接管方,升高用户触达服务的老本,晋升用户体验。相比于传统的社交软件分享,分享单方无需建设好友关系,接管方无需提前装置承载服务的安装包,即可享受原生的服务体验。

用户可在原子化服务内抉择分享,关上“华为分享”开关后,将原子化服务分享给左近同样关上了“华为分享”开关的好友,好友点击确认后间接启动服务。下图是通过“华为分享”分享购物类原子化服务的典型场景。

三、原子化服务的劣势在哪里?

3.1 一次开发,多端部署

对于开发者而言,原子化服务只需开发一次,便能够部署在各种 HarmonyOS 终端上,大大降低了开发成本。

对于传统的 APP 软件开发者来说,一个绕不开的懊恼就是同一个 APP 须要别离针对不同的设施进行适配。比方程序员在手机上开发了一款利用,针对手表须要从新适配、公布到手表的利用市场;针对大屏适配后,再公布到大屏的利用市场,重大影响了利用的开发效率和变现能力。

HarmonyOS 在架构设计之初,就提出了一次构建反对多端部署的架构设计准则。HarmonyOS 通过提供用户程序框架、Ability 框架以及 UI 框架,可能保障开发的利用在多终端运行时保障一致性。多终端软件平台 API 具备一致性,确保用户程序的运行兼容性。如此一来,开发者仅需为不同状态的设施配置不同参数,IDE 就可能主动生成反对多设施散发的 APP 包。APP 包上架利用市场后,利用市场会主动依照设施类型进行 HAP 包的拆分、组装和散发,进而端到端实现了一次开发,反对多端部署的设计。

具体流程如下:

  1. 开发阶段,IDE 基于包格局编译打包反对多设施的利用包。
  2. 上架到利用市场。
  3. 在云侧对 App 进行拆包,部署到 CDN(Content Delivery Network,内容散发网络),包信息同步到服务散发核心。
  4. 端侧运行过程中,依据本身设施类型获取相应的 HAP 及整体摘要信息。

3.2 免装置,秒级关上

消费者不感知装置过程和卸载过程,体验全新降级。

HarmonyOS 原子化服务是轻量化服务的新物种,它提供了全新的服务和交互方式。用户在应用原子化服务时,如果服务未部署,零碎将通过云端主动部署服务,部署胜利后即可应用对应服务。例如,在服务中心点击服务卡片,原子化服务通过免装置能力实现部署和运行,实现服务中转的业务体验。毋庸用户跳转到传统的利用散发市场,搜寻下载指标利用,使得在设施上部署利用更加疾速。

随着分布式场景生态的丰盛,原子化服务要始终以人为核心,在不同设施间流转。当用户走到大屏设施前,手机上的视频电话能够流转到大屏沟通,当用户走到电脑前,手机和电脑能够协同办公,原子化服务可能在不烦扰用户的状况下实现了主动部署,同时,零碎会智能地清理已部署的低频服务。

这就是原子化服务的免装置能力,一方面晋升开发者上架利用的散发效率和转化率,一方面晋升消费者的服务体验,缩小装置过程对用户的烦扰。

3.3 以人为核心,分布式流转

分布式流转是实现原子化服务以人为核心的核心技术。

随着 5G 和 IoT 设施的倒退,集体领有了多个智能设施也逐渐成为支流场景。手机、笔记本、PAD、电视、静止手表、耳机、冰箱、抽油烟机、智能门锁等这类智能设施在搭载 HarmonyOS 零碎后,通过分布式软总线连接起来,就能够造成一个超级的终端。不同的设施之间,通过从新业务组合,能够造成新的用户体验。

例如:用户坐在书桌前用手机观看视频,又心愿转移到客厅,坐在沙发上用大屏持续视频的观看。业界大多采纳投屏的计划实现,如 DLNA、Cast+ 等。而原子化服务采纳的分布式组件流转的技术,简略来讲,就是 HarmonyOS 系统管理着原子化服务过程实体的上下文环境(关上的文件句柄,硬件,运行状态),并对上下文数据进行跨设施的备份、传输和复原。如下图示意:

对于用户来说,流转操作该当是便捷的,高效的,无副作用的。用户能够进行重复流转,利用实体可能始终维持其状态。为了保障用户交互的一致性,流转的入口由零碎对立提供。对于应用程序的一致性,由开发者保护。例如:当利用从手机迁徙到大屏之后,其控件、款式、布局等方面该当尽可能保持一致。但“统一”不意味着“一样”:针对手机,平板电脑或者大屏各自屏幕的特色,其用户界面该当做好相应的适配。

3.4 比照 App Clips 和小程序,有什么劣势?

App Clips 和小程序实质上都是针对服务线上化、交易闭环的场景在定义产品,人造谋求随处可及和服务中转的个性。原子化服务与之相比,有以下劣势:

  1. 原子化服务是面向未来超级终端的服务状态,笼罩更宽泛的 IoT 设施,具备 1 +8+ N 设施兼容的 API 接口,这也是原子化服务相比 APP Clips 和小程序更具竞争力的根基。
  2. 原子化服务是基于分布式全场景体验指标而设计的,也是与 App Clips 和小程序在设计理念上的最大不同。HarmonyOS 提供了超强的分布式能力,可能让开发者疾速实现一个分布式业务。
  3. 原子化服务有服务中心、碰一碰、扫一扫、卡片分享、流转业务触发等相比 App Clips 和小程序更为丰盛的入口, 反对服务疾速中转。

四、如何开发原子化服务?

置信很多的开发者小伙伴们更为关注的是如何开发原子化服务,上面咱们就来介绍。

4.1 总体开发要求

  1. 原子化服务的所有 HAP 包均须要满足免装置要求。
  2. 免装置的 HAP 包不能超过 10MB。
  3. 原子化服务降级时,新版本也要放弃免装置属性。
  4. 目前反对免装置的 HAP 的设施类型有:手机、平板、智慧屏、智能穿戴,版本均须要在 HarmonyOS 2 版本及以上。
  5. 原子化服务如果要在服务中心露出,则须要满足:

●该服务对应的 HAP 包须要蕴含 FA,且指定惟一的一个“MainAbility”作为用户操作入口。

●须要配置一个小尺寸服务卡片(2* 2 规格),以及配置根底信息:如图标、名称、形容、快照等。

原子化服务的具体设计说明,能够参考官网:
https://developer.harmonyos.c…

4.2 开发工具

HUAWEI DevEco Studio(以下简称 DevEco Studio)是基于 IntelliJ IDEA Community 开源版本打造,面向华为终端全场景多设施的一站式集成开发环境(IDE),为开发者提供工程模板创立、开发、编译、调试、公布等 E2E 的 HarmonyOS 利用开发服务。

DevEco Studio 下载链接:
https://developer.harmonyos.c…

咱们应用 DevEco Studio 工具来开发原子化服务。该工具的具体应用阐明,能够参考官网:
https://developer.harmonyos.c…

4.3 开发过程及留神点

1. 创立工程

(1) 运行 DevEco Studio 工具,在菜单栏抉择 File > New > New Project。

(2) 依据工程创立向导,抉择须要的 Ability 工程模板,而后点击 Next。

(3) 配置工程的根本信息。

Project Name:工程的名称,能够自定义。

Project Type:工程的类型,Service 示意原子化服务,Application 示意传统形式的须要装置的利用。因为要创立原子化服务工程,这里抉择 Service。

Device Type:依据须要抉择该工程反对的设施类型。反对多选。
注:如果勾选了 TV,则上面的“Show in Service Center”会隐没。

Show in Service Center:是否在服务中心露出。开启此开关,则默认创立一张小尺寸(2×2)服务卡片和快照。

(4) 点击 Finish,工具会主动生成示例代码和相干资源,期待工程创立实现。

2. 工程配置

(1) config.json 配置文件

每个 HAP 的根目录下都存在一个 config.json 配置文件,文件内容次要涵盖以下三个方面:

●利用的全局配置信息,蕴含利用的包名、生产厂商、版本号等根本信息。

●利用在具体设施上的配置信息,蕴含利用的备份复原、网络安全等能力。

●HAP 包的配置信息,蕴含每个 Ability 必须定义的根本属性(如包名、类名、类型以及 Ability 提供的能力),以及利用拜访零碎或其余利用受爱护局部所需的权限等。

工程创立实现之后,config.json 文件默认蕴含以下配置内容。

① 免装置配置信息

“distro”: {“deliveryWithInstall”: true, “moduleName”: “entry”, “moduleType”: “entry”, “installationFree”: true}

installationFree 为 true 示意该 HAP 是免装置的。

② 服务卡片配置信息

因为创立工程时开启了 Show in Service Center 开关,所以默认配置了此信息。

“abilities”: [

{

“skills”: [

],

“name”: “com.example.atomicservicedemo.MainAbility”,

“icon”: “$media:icon”,

“description”: “$string:mainability_description”,

“formsEnabled”: true,

“label”: “$string:app_name”,

“type”: “page”,

“forms”: [

{

“jsComponentName”: “widget”,

“isDefault”: true,

“scheduledUpdateTime”: “10:30”,

“defaultDimension”: “2*2”,

“name”: “widget”,

“description”: “$string:widget_description”,

“colorMode”: “auto”,

“type”: “JS”,

“supportDimensions”: [

“2*2”

],

“updateEnabled”: true,

“updateDuration”: 1

}

],

“launchType”: “standard”

}

]

config.json 文件的具体阐明,能够参考官网:
https://developer.harmonyos.c…

(2)快照

创立工程时,如果开启了 Show in Service Center 开关,工程创立实现后会在工程目录下主动生成快照(EntryCard)文件夹。如下图所示:

此文件夹下默认生成了一张 2 ×2(小尺寸)的快照(一张 png 格局的图片)。开发者能够将其替换为当时设计好的 2 ×2 快照,款式上应与对应的服务卡片保持一致:将新的快照拷贝到上图目录下,删除默认图片,新图片命名遵循格局“服务卡片名 -2×2.png”。

阐明:“服务卡片名”能够查看 config.json 文件的 forms 数组中的“name”字段。

3. 开发原子化服务

之前的推文中,咱们曾经介绍过服务卡片的开发,此处不再赘述,点击下方文字即可。

一文看懂 HarmonyOS 服务卡片运行原理和开发方法

咱们重点介绍一下如何将原子化服务接入到华为分享。

以 JAVA 工程为例,开发步骤如下:

① 新建两个 idl 文件,用于和华为分享进行跨过程通信。

IHwShareCallback.idl 文件:

interface com.huawei.hwshare.third.IHwShareCallback {

[oneway] void notifyState([in] int state);

}

IHwShareService.idl 文件:

sequenceable ohos.interwork.utils.PacMapEx;

interface com.huawei.hwshare.third.IHwShareCallback;

interface com.huawei.hwshare.third.IHwShareService {

int startAuth([in] String appId, [in] IHwShareCallback callback);

int shareFaInfo([in] PacMapEx pacMapEx);

}

开发者只需将.idl 文件保留至 DevEco Studio 我的项目的 src/ 目录内,工具则会在构建利用时,在我的项目的 generated/ 目录中生成 IRemoteObject 接口文件、Stub 文件、Proxy 文件。IHwShareCallback.idl 文件和 IHwShareService.idl 文件会生成对应的 IHwShareCallback.java 和 IHwShareService.java。

② 新建一个治理类“
ShareAtomicServiceManager.java”,用于治理与华为分享的跨过程通信。

这里对外裸露一个接口:

public void shareFaInfo(String appId, PacMapEx pacMap) {

if (mContext == null) {

return;

}

mAppId = appId;

mSharePacMap = pacMap;

mHandler.removeTask(mTask);

shareFaInfo();

bindShareService();

}

●appId 是利用在利用市场的惟一标识,在创立我的项目时生成。

●pacMap 是须要传递给华为分享的信息。

●shareFaInfo() 用于分享 FA 信息到华为分享利用中,代码如下:

private void shareFaInfo() {

if (mShareService == null) {

return;

}

if (mHasPermission) {

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, “start shareFaInfo.”);

try {

mShareService.shareFaInfo(mSharePacMap);

mSharePacMap = null;

} catch (RemoteException e) {

HiLog.error(LABEL_LOG, LOG_FORMAT, TAG, “shareFaInfo error.”);

}

}

// 不应用时断开

mHandler.postTask(mTask, UNBIND_TIME);

}

其中,mTask 用于执行断连的操作:

private final Runnable mTask = () -> {

if (mContext != null && mShareService != null) {

mContext.disconnectAbility(mConnection);

mHasPermission = false;

mShareService = null;

}

};

另外,绑定华为分享服务的代码如下:

private void bindShareService() {

if (mShareService != null) {

// 保障仅连一次。

return;

}

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, “start bindShareService.”);

Operation operation = new Intent.OperationBuilder().withBundleName(SHARE_PKG_NAME)

.withAction(SHARE_ACTION).withFlags(Intent.FLAG_NOT_OHOS_COMPONENT).build();

Intent intent = new Intent();

intent.setOperation(operation);

mContext.connectAbility(intent, mConnection);

其中,mConnection 的定义如下:

// 治理与华为分享的连贯 private final IAbilityConnection mConnection = new IAbilityConnection() {@Override public void onAbilityConnectDone(ElementName elementName,
IRemoteObjectiRemoteObject,int i) {HiLog.error(LABEL_LOG, LOG_FORMAT,TAG,”onAbilityConnectDonesuccess.”); mHandler.postTask(()->{mShareService = new HwShareServiceProxy(iRemoteObject); try {mShareService.startAuth(mAppId, mFaCallback); } catch (RemoteException e) {HiLog.error(LABEL_LOG,LOG_FORMAT,TAG,”startAuth error.”); }});} @Override public void on AbilityDisconnectDone(ElementName elementName, int i) {HiLog.info(LABEL_LOG,LOG_FORMAT,TAG,”onAbilityDisconnectDone.”); mHandler.postTask(()->{mShareService=null;mHasPermission=false;});}};

mShareService.startAuth(mAppId, mFaCallback) 是对 appId 进行验证,验证胜利之后会通过 mFaCallback 回调。

mFaCallback 的代码如下:

private final HwShareCallbackStub mFaCallback = new HwShareCallbackStub(“HwShareCallbackStub”) {

@Override

public void notifyState(int state) throws RemoteException {

mHandler.postTask(()->{

HiLog.info(LABEL_LOG, LOG_FORMAT, TAG, “notifyState: ” + state);

if (state == 0) {

mHasPermission = true;

if (mSharePacMap != null) {

shareFaInfo();

}

}

});

}

};

state 为 0 时示意认证通过,能够进行分享。

③ 在 MainAbilitySlice.java 中,调用连贯华为分享的接口:

ShareAtomicServiceManager.getInstance(this).shareFaInfo(“629005930163350400”, getPacMap());

“629005930163350400” 是 appId,每个利用不一样,须要替换成利用本人的 appId。getPacMap 是获取须要分享的内容封装办法。

private PacMapEx getPacMap() {

PacMapEx pacMap = new PacMapEx();

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_FA_TYPE, 0);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_BUNDLE_NAME, getBundleName());

pacMap.putObjectValue(
ShareAtomicServiceManager.SHARING_EXTRA_INFO, “ 原子化服务分享额定内容 ”);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_ABILITY_NAME, MainAbility.class.getName());

pacMap.putObjectValue(
ShareAtomicServiceManager.SHARING_CONTENT_INFO, “ 原子化服务通过华为分享的内容 ”);

byte[] sharedContentImg = getResourceBytes(ResourceTable.Media_share_conteng_img);

pacMap.putObjectValue(ShareAtomicServiceManager.SHARING_THUMB_DATA, sharedContentImg);

byte[] iconImg = getResourceBytes(ResourceTable.Media_icon);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_FA_ICON, iconImg);

pacMap.putObjectValue(ShareAtomicServiceManager.HM_FA_NAME, getString(ResourceTable.String_app_name));

return pacMap;

}

其中,常量的定义如下:

public static final String HM_FA_ICON = “ohos_fa_icon”;

public static final String HM_FA_NAME = “ohos_fa_name”;

public static final String HM_ABILITY_NAME = “ohos_ability_name”;

public static final String HM_BUNDLE_NAME = “ohos_bundle_name”;

public static final String SHARING_FA_TYPE = “sharing_fa_type”;

public static final String SHARING_THUMB_DATA = “sharing_fa_thumb_data”;

public static final String SHARING_CONTENT_INFO = “sharing_fa_content_info”;

public static final String SHARING_EXTRA_INFO = “sharing_fa_extra_info”;

常量含意阐明如下:

对于图片资源的解析能够参考如下:

private byte[] getResourceBytes(int resId) {

InputStream resource = null;

ByteArrayOutputStream outStream = null;

try {

resource = getResourceManager().getResource(resId);

outStream = new ByteArrayOutputStream();

byte[] buffer = new byte[1024];

int len;

while ((len = resource.read(buffer)) != -1) {

outStream.write(buffer, 0, len);

}

outStream.close();

resource.close();

return outStream.toByteArray();

} catch (IOException e) {

HiLog.error(TAG, “get resource occurs io exception!”);

} catch (NotExistException e) {

HiLog.error(TAG, “it dose not exist!”);

} finally {

if (resource != null) {

try {

resource.close();

} catch (IOException e) {

HiLog.error(TAG, “close input stream occurs io exception!”);

}

}

if (outStream != null) {

try {

resource.close();

} catch (IOException e) {

HiLog.error(TAG, “close output stream occurs io exception!”);

}

}

}

return null;

}

大家也能够参考官网上接入华为分享的开发领导:

https://developer.harmonyos.c…

4. 运行工程

在虚拟机或者真机运行创立的工程之后,会显示原子化服务的主界面(即服务界面)。然而在桌面找不到原子化服务图标,因为原子化服务在桌面是没有 icon 的。能够在服务中心通过搜寻原子化服务的名称找到该原子化服务,将其服务卡片增加到桌面。

原子化服务接入华为分享的运行后果,须要筹备两台 HarmonyOS 手机,且其系统软件版本不低于 HarmonyOS 2。

以上就是本期原子化服务的介绍了,你 get 到了吗?期待更多的开发者小伙伴们退出咱们,开启您的原子化服务开发之旅哦~

正文完
 0