【鸿蒙】项目中添加App Linking

关于App Linking的介绍可参考其官方文档:App Linking Kit(应用链接服务)

一、开发准备

1、准备文件

首先,你需要准备一个applinking.json文件,内容如下:

{
 "applinking": {
   "apps": [
     {
       "appIdentifier": "你的应用appid"
     }
   ]
 }
}

文件名称为applinking.json,将该文件保存到服务器以下目录:

https://www.example.com/.well-known/applinking.json

注意这里的目录.well-known,前面有个.

布置完成后,将此地址在浏览器打开,能够下载applinking.json文件内容,即可!

2、AppGallery Connect 配置

想要使用App Linking的能力,需要项目支持,首先登录AppGallery Connect,开通相关能力。

2.1、登录后,点击导航中的“开发与服务”,选择需要开通的项目:
开发与服务->待开通项目
2.2、左侧导航“增长 -> App Linking -> 应用链接”
增长 -> App Linking -> 应用链接
2.3、首次开通,进入如下页面
首次开通

点击“立即开通”即可!

2.4、非首次开通,进入如下页面
创建

点击“创建”,即可新增链接地址;

2.5、输入App Linking地址
输入App Linking地址

名称无影响,域名必须格式正确,且末尾不能有“/”,点击发布即可。

2.6、发布后会去效验域名,等待即可
发布中

此时的状态为“发布中”,成功后会变为“成功”,失败则为“失败”,此时可点击查看原因

失败

这里我填入的域名是不存在的,所以失败!

以上完成后,接着在开发工程中配置相关信息。

3、开发工程配置

打开 DevEco Studio,在你的products包内,找到src -> main -> module.json5文件,这里以 https://www.example.com为例

{
  "module": {
    "abilities": [
      {
        "name": "EntryAbility",
        "srcEntry": "./ets/entryability/EntryAbility.ets",
        "icon": "$media:icon",
        "label": "$string:EntryAbility_label",
        // 请将exported配置为true;如果exported为false,仅具有权限的系统应用能够拉起该应用,否则无法拉起应用
        "exported": true,
        "startWindowIcon": "$media:icon",
        "startWindowBackground": "$color:start_window_background",
        "skills": [
          {
            "entities": [
              "entity.system.home"
            ],
            "actions": [
              // 从5.1.1(19)开始,须配置为"ohos.want.action.home"。对于5.1.0(18)及之前版本,请配置为"action.system.home"。
              "ohos.want.action.home"
            ]
          },
          {
            "entities": [
              // entities必须包含"entity.system.browsable"
              "entity.system.browsable"
            ],
            "actions": [
              // actions必须包含"ohos.want.action.viewData"
              "ohos.want.action.viewData"
            ],
            "uris": [
              {
                // scheme须配置为https
                "scheme": "https",
                // host须配置为关联的网址域名
                "host": "www.example.com",
                // path可选,表示域名服务器上的目录或文件路径,例如www.example.com/path1中的path1
                // 如果应用只能处理部分特定的path,则此处应该配置应用所支持的path,避免出现应用不能处理的path链接也被引流到应用中的问题
                "path": "path1"
              }
            ],
            // domainVerify须设置为true
           "domainVerify": true
          }
          // 若有其他跳转能力,如推送消息跳转、NFC跳转,可新增一个skill对象,防止与App Linking业务冲突
        ]
      }
    ]
  }
}

配置完成后,即可在其他应用中唤起你的app了。

4、功能验证

以上配置完成后,可将域名 https://www.example.comhttps://www.example.com/action?param1=value1生成一个二维码,使用手机自带浏览器的扫码功能,扫码后则自动跳转到app内。

或者参考官方文档内通过App Linking 拉起指定应用章节中示例代码,使用UIAbilityContext.openLink()接口,直接打开配置的域名进行跳转。

5、接收跳转参数

拉起应用并不是我们的最终目的,在拉起应用后,需要根据传入的参数,跳转到指定的页面。

在应用的Ability(如EntryAbility)onCreate()或者onNewWant()生命周期回调中添加如下代码,以处理传入的链接。

import { AbilityConstant, UIAbility, Want } from '@kit.AbilityKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { url } from '@kit.ArkTS';
export default class EntryAbility extends UIAbility {
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    // 从want中获取传入的链接信息。
    // 如传入的url为:https://www.example.com/programs?action=showall
    let uri = want?.uri;
    if (uri) {
      // 从链接中解析query参数,拿到参数后,开发者可根据自己的业务需求进行后续的处理。
      try {
        let urlObject = url.URL.parseURL(want?.uri);
        let action = urlObject.params.get('action');
        // 例如,当action为showall时,展示所有的节目。
        if (action === "showall"){
          // ...
        }
        // ...
      } catch (error) {
        hilog.error(0x0000, 'testTag', `Failed to parse url.`);
      }
    }
  }
}

到此,即成功接入了App Linking,并完成了根据不同参数,跳转到不同页面详情的业务需求。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容