共计 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 包的拆分、组装和散发,进而端到端实现了一次开发,反对多端部署的设计。
具体流程如下:
- 开发阶段,IDE 基于包格局编译打包反对多设施的利用包。
- 上架到利用市场。
- 在云侧对 App 进行拆包,部署到 CDN(Content Delivery Network,内容散发网络),包信息同步到服务散发核心。
- 端侧运行过程中,依据本身设施类型获取相应的 HAP 及整体摘要信息。
3.2 免装置,秒级关上
消费者不感知装置过程和卸载过程,体验全新降级。
HarmonyOS 原子化服务是轻量化服务的新物种,它提供了全新的服务和交互方式。用户在应用原子化服务时,如果服务未部署,零碎将通过云端主动部署服务,部署胜利后即可应用对应服务。例如,在服务中心点击服务卡片,原子化服务通过免装置能力实现部署和运行,实现服务中转的业务体验。毋庸用户跳转到传统的利用散发市场,搜寻下载指标利用,使得在设施上部署利用更加疾速。
随着分布式场景生态的丰盛,原子化服务要始终以人为核心,在不同设施间流转。当用户走到大屏设施前,手机上的视频电话能够流转到大屏沟通,当用户走到电脑前,手机和电脑能够协同办公,原子化服务可能在不烦扰用户的状况下实现了主动部署,同时,零碎会智能地清理已部署的低频服务。
这就是原子化服务的免装置能力,一方面晋升开发者上架利用的散发效率和转化率,一方面晋升消费者的服务体验,缩小装置过程对用户的烦扰。
3.3 以人为核心,分布式流转
分布式流转是实现原子化服务以人为核心的核心技术。
随着 5G 和 IoT 设施的倒退,集体领有了多个智能设施也逐渐成为支流场景。手机、笔记本、PAD、电视、静止手表、耳机、冰箱、抽油烟机、智能门锁等这类智能设施在搭载 HarmonyOS 零碎后,通过分布式软总线连接起来,就能够造成一个超级的终端。不同的设施之间,通过从新业务组合,能够造成新的用户体验。
例如:用户坐在书桌前用手机观看视频,又心愿转移到客厅,坐在沙发上用大屏持续视频的观看。业界大多采纳投屏的计划实现,如 DLNA、Cast+ 等。而原子化服务采纳的分布式组件流转的技术,简略来讲,就是 HarmonyOS 系统管理着原子化服务过程实体的上下文环境(关上的文件句柄,硬件,运行状态),并对上下文数据进行跨设施的备份、传输和复原。如下图示意:
对于用户来说,流转操作该当是便捷的,高效的,无副作用的。用户能够进行重复流转,利用实体可能始终维持其状态。为了保障用户交互的一致性,流转的入口由零碎对立提供。对于应用程序的一致性,由开发者保护。例如:当利用从手机迁徙到大屏之后,其控件、款式、布局等方面该当尽可能保持一致。但“统一”不意味着“一样”:针对手机,平板电脑或者大屏各自屏幕的特色,其用户界面该当做好相应的适配。
3.4 比照 App Clips 和小程序,有什么劣势?
App Clips 和小程序实质上都是针对服务线上化、交易闭环的场景在定义产品,人造谋求随处可及和服务中转的个性。原子化服务与之相比,有以下劣势:
- 原子化服务是面向未来超级终端的服务状态,笼罩更宽泛的 IoT 设施,具备 1 +8+ N 设施兼容的 API 接口,这也是原子化服务相比 APP Clips 和小程序更具竞争力的根基。
- 原子化服务是基于分布式全场景体验指标而设计的,也是与 App Clips 和小程序在设计理念上的最大不同。HarmonyOS 提供了超强的分布式能力,可能让开发者疾速实现一个分布式业务。
- 原子化服务有服务中心、碰一碰、扫一扫、卡片分享、流转业务触发等相比 App Clips 和小程序更为丰盛的入口, 反对服务疾速中转。
四、如何开发原子化服务?
置信很多的开发者小伙伴们更为关注的是如何开发原子化服务,上面咱们就来介绍。
4.1 总体开发要求
- 原子化服务的所有 HAP 包均须要满足免装置要求。
- 免装置的 HAP 包不能超过 10MB。
- 原子化服务降级时,新版本也要放弃免装置属性。
- 目前反对免装置的 HAP 的设施类型有:手机、平板、智慧屏、智能穿戴,版本均须要在 HarmonyOS 2 版本及以上。
- 原子化服务如果要在服务中心露出,则须要满足:
●该服务对应的 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 到了吗?期待更多的开发者小伙伴们退出咱们,开启您的原子化服务开发之旅哦~