开发指南/开发流程/运营和维护/分享应用
# 分享应用

Lark支持通过卡片、链接、二维码的形式分享应用。使用分享功能，可以方便用户将应用或指定网页分享给其他成员使用。

## 方式一：通过工作台分享应用
Lark从 v3.43 版本开始，无需开发者做任何说明，用户便可以通过Lark的工作台、应用的资料卡片，以及应用的关于页面找到分享功能，自主传播应用给其他成员。

1. 打开Lark。

2. 进入工作台，找到指定应用卡片并分享。

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/d7db440007a0f80ad57d51becacdd564_eqhtLHeqJk.png?height=1070&lazyload=true&maxWidth=600&width=2174)

3. 在弹出的对话框内，选择分享方式。

支持的分享方式如下：

- 将 **应用名片** 推送至指定的Lark会话。

- 复制 **应用链接** 在Lark内进行分享。

- 复制 **应用二维码** 在Lark内进行分享。

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/5da32c5c4d2b422a8e4a15b747f10b98_BByniamZxn.png?height=864&lazyload=true&maxWidth=600&width=2012)
安全性说明：如果访问用户不具备使用权限，将无法查看应用，仅可看到相关的权限申请指引。

## 方式二：使用自定义分享功能

如果你的应用使用了小程序或者网页应用能力，则你可以开启小程序、网页应用的自定义分享功能。使用户可以分享具体的应用给其他成员。例如：分享问卷、审批、文章等。

### 自定义小程序页面的分享

本章节使用到的小程序 API 如下表所示。

名称 | 适用能力 | 描述
---|---|---
[onShareAppMessage](https://open.larksuite.com/document/uYjL24iN/uQDNuQDNuQDN#c2e51fde) | 小程序 | 实现当前页面的分享功能。
[hideShareMenu](https://open.larksuite.com/document/uYjL24iN/ukjN24SO2YjL5YjN) | 小程序 | 隐藏当前页面在小程序容器上的分享按钮。
[showShareMenu](https://open.larksuite.com/document/uYjL24iN/ugjN24CO2YjL4YjN) | 小程序 | 显示当前页面在小程序容器上的分享按钮，配合`hideShareMenu`使用。

- 开启分享功能后，应用可通过消息卡片、短链接、二维码的形式分享。分享内容可以被转发传播，具有应用可用性的用户在桌面端、移动端均可访问被分享的应用。
- 如果你需要限制访问分享的成员范围、终端设备范围，请在应用内根据访问用户的[登录信息](https://open.larksuite.com/document/uYjL24iN/uYzMuYzMuYzM)、[终端设备信息](https://open.larksuite.com/document/uYjL24iN/uQjNx4CN2EjL0YTM)，补充必要的拦截提示。

#### 分享渠道一：页面分享

通过实现小程序的生命周期函数[onShareAppMessage](https://open.larksuite.com/document/uYjL24iN/uQDNuQDNuQDN#c2e51fde)，你可以指定分享的标题、页面跳转路径和预览图。最终以卡片、链接或二维码的形式，将应用页面分享至Lark会话，或在Lark客户端外传播。

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/125c41270a44f527cce96e110c4df03d_sTRsC3OHOd.png?height=562&lazyload=true&maxWidth=800&width=2718)

#### 分享渠道二：菜单分享

在实现了[onShareAppMessage](https://open.larksuite.com/document/uYjL24iN/uQDNuQDNuQDN#c2e51fde)的页面上，用户默认在小程序的容器菜单中可见当前页面的分享入口。你也可以通过 [hideShareMenu](https://open.larksuite.com/document/uYjL24iN/ukjN24SO2YjL5YjN)、[showShareMenu](https://open.larksuite.com/document/uYjL24iN/ugjN24CO2YjL4YjN)接口，控制分享入口在具体业务场景下的隐藏或恢复展示策略。

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/0aecf23d9093c4eb503685f43181ec4e_Z2Lwr3zZ9x.png?height=544&lazyload=true&maxWidth=800&width=2584)

#### 分享渠道三：按钮分享

你可以在页面中，增加 [button](https://open.larksuite.com/document/uYjL24iN/uIjNuIjNuIjN) 组件，并将`open-type`设置为`share`，实现由按钮触发应用分享。

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/2f88a32fd23841676b4f58e8776ba548_H5F4v4Mz8t.png?height=984&lazyload=true&maxWidth=600&width=1800)

### 自定义网页应用的分享

本章节使用到的网页应用 API 如下表所示。

名称 | 适用能力 | 描述
---|---|---
[share](https://open.larksuite.com/document/uYjL24iN/ugDM04COwQjL4ADN/thirdShare) | 网页应用 | 触发网页的自定义分享。

- 网页的分享卡片可被用户转发，如你需要限制分享内容的访问范围，请在应用内根据访问用户的登录信息，补充必要的拦截提示。
- 从Lark v3.40 版本开始，[share](https://open.larksuite.com/document/uYjL24iN/ugDM04COwQjL4ADN/thirdShare) 接口将严格校验请求参数中`url`的有效性。如果历史请求内容不是有效的 URL 地址，请注意及时调整适配。

你可以在用户操作页面提供分享按钮，该按钮调用网页应用的 [share](https://open.larksuite.com/document/uYjL24iN/ugDM04COwQjL4ADN/thirdShare) 接口，指定分享卡片的标题、描述、配图以及跳转地址，最终以网页卡片的形式将应用发送给指定的Lark会话。

![](//sf16-sg.larksuitecdn.com/obj/open-platform-opendoc-sg/47722570d70f39e1f16156b1f649b20f_g3pet3ndYo.png?height=1003&lazyload=true&maxWidth=800&width=2370)

此外，在应用页面的右上角提供 **更多** 按钮，点击该按钮后，固定存在 **发送至会话** 入口。用户点击后，可以将当前页面以网页卡片的形式分享至指定的Lark会话。

该分享方式不需要调用 API，在二次确认弹窗中的预览卡片内容以及分享卡片展示的内容，会由平台按如下优先级进行获取（以下优先级由高到低，降序排列）：

- **网站标题**

配置了`og:title`标签的标题内容 > 配置了`twitter:title`标签的标题内容 > 获取`head`中的`title`内容 > 空值

- **内容概要**

配置了`og:description`标签的内容概要 > 配置了`twitter:description`标签的内容概要 > 获取`meta`中的`description`信息 > 取`body`内的`innerText` > 空值

- **图标** **URL**

配置了`og:image`标签的图标 URL > 配置了`twitter:image`标签的图标 URL > 抓取`body`内第一个尺寸大于 100 * 100 的`img` > 空值

优先级设置的示例代码如下：

```
function getH5Info() {
    var title = getOGPInfo('title') || getTwitterInfo('title') || getTitle() || "";
    var desc = getOGPInfo('description') || getTwitterInfo('description') || getMetaDesc() || getDesc() || "";
    var iconUrl = getOGPInfo('image') || getTwitterInfo('image') || getImg() || "";
    return {iconUrl: iconUrl, title: title.replace(/[\r\n\t]/g, ""), desc: desc.replace(/\r\n/g, "")}
} 
```
以上优先级的支持版本为Lark v5.23 及更高。在Lark v5.23 之前的版本，网页内容获取的优先级说明如下（以下优先级由高到低，降序排列）：

- **网站标题**：获取`head`中的`title`内容 > 空值

- **内容概要**：获取`meta`中的`description`信息 > 取`body`内的`innerText` > 空值

- **图标** **URL**：获取`body`内第一个尺寸大于 100 * 100 的`img` > 空值
