## 直播功能概述

旧版直播使用微信小程序直播功能，仅支持小程序内观看直播。2023年下旬微信小程序后台关闭了申请直播功能入口，开通时间未知，即目前新创建的小程序都无法申请开通直播功能。

考虑到商城直播的重要性，我们接入了阿里云直播，兼容性更强，新旧版直播对比如下

| 平台                               | 小程序                                  | APP               | H5          |
| ---------------------------------- | --------------------------------------- | ----------------- | ----------- |
| 旧版直播，已弃用（微信小程序直播） | √（看直播、开播）                       | ×                 | ×           |
| 新版直播（阿里云）                 | √（看直播，需要小程序后台开通直播权限） | √（看直播、开播） | √（看直播） |

**注意：新版直播中必须使用app才能开播（无需上架应用市场）**



## 查看小程序是否拥有直播权限

登录 [小程序后台](https://mp.weixin.qq.com/)，在左侧菜单中 “功能” 中查看是否有 “直播” 一栏。

拥有 “直播” 菜单表示已开通或可申请开通直播权限，否则需要按照文档移除小程序内的直播功能。



## 如何判断是否需要修改直播功能代码？

项目代码中默认全端（小程序、app、H5）使用直播功能。

如果你的小程序拥有直播权限，并且你需要全端开启直播功能，无需做任何修改；

如果你不需要直播功能 或 小程序无直播权限，需要移除整个直播功能或移除小程序内的直播功能，继续阅读文档移除对应代码；

**注意：若小程序无直播权限，并且未移除直播功能代码，将无法通过审核**



## 移除小程序直播

修改前请先了解一下  [uniapp 条件编译写法规则](https://uniapp.dcloud.net.cn/tutorial/platform.html#preprocessor)

因为直播页面放在底部的 tab 栏中，所以移除直播功能会导致小程序里面少一个tab，修改都是对操作 tabbar 栏的一些方法进行适配。

项目中主要是 tab栏的国际化 以及 购物车tab的角标

```javascript
// setTabBarItem  修改tabbar设置
uni.setTabBarItem({
    // 索引，从0开始
    index: 0,
    // tabbar 文本
    text: $t('homepage')
})

// setTabBarBadge 设置tabbar 角标。
uni.setTabBarBadge({
    // 索引，从0开始
    index: 3,
    // 角标的值，字符串
    text: '角标文本'
})
```



### 修改配置文件

src 目录下 manifest.json 配置文件，找到 "mp-weixin" 小程序配置中，移除该直播插件

```json
/* 小程序特有相关 */
"mp-weixin" : {
    ...
    // 注释或删除此项
    "plugins" : {
        // 小程序直播插件
        "live-player-plugin" : {
            "version" : "1.3.5",
            "provider" : "wx2b03c6e691cd7370"
        }
    }
}
```

src 目录下 pages.json 配置文件，找到 "tabBar" 配置栏

```json
  "tabBar": {
    "selectedColor": "#e43130",
    "color": "#333333",
    "list": [
	  ...
      // 条件编译：非小程序端时添加这个tabbar，如需移除所有端的直播，请删除该项
      // #ifndef MP-WEIXIN
      {
        "pagePath": "pages/live-broadcast/live-broadcast",
        "iconPath": "/static/images/tabbar/uncheck-live.png",
        "selectedIconPath": "/static/images/tabbar/selecte-live.png"
      },
      // #endif
      ...
    ]
  }
```



### 修改tab相关业务代码

src/utils/util.js  

找到 "transTabbar" 国际化方法

```javascript
/**
 * tabbar国际化
 */
transTabbar: () => {
    uni.setTabBarItem({
        index: 0,
        text: $t('homepage')
    })
    uni.setTabBarItem({
        index: 1,
        text: $t('classification')
    })
    // 条件编译：非小程序端，保留 直播、购物车、我的 3个tab
    // #ifndef MP-WEIXIN
    uni.setTabBarItem({
        index: 2,
        text: $t('tabbarLive')
    })
    uni.setTabBarItem({
        index: 3,
        text: $t('cart')
    })
    uni.setTabBarItem({
        index: 4,
        text: $t('myself')
    })
    // #endif
    
    // 条件编译：小程序端移除 直播tab，保留 购物车、我的
    // #ifdef MP-WEIXIN
    uni.setTabBarItem({
        index: 2,
        text: $t('cart')
    })
    uni.setTabBarItem({
        index: 3,
        text: $t('myself')
    })
    // #endif
    // 注意上面两块条件编译代码都是需要保留的，如有疑问请先查看 uniapp 条件编译写法规则
    
    // 如需移除所有端的直播，在原始代码中删除索引值为 2 的那一项，并修改后续的索引即可
}
```

同文件下，找到 "removeTabBadge"  方法，修改为如下代码

```javascript
/**
* 移除购物车Tabbar的数字
*/
removeTabBadge: () => {
    uni.removeTabBarBadge({
        // #ifdef MP-WEIXIN
        index: 2
        // #endif
        // #ifndef MP-WEIXIN
        index: 3
        // #endif
    })
}
// 如需移除所有端的直播，删除所有条件编译，index配置为 2
```



购物车tab角标

在项目中搜索 setTabBarBadge 方法，修改为如下代码

```javascript
uni.setTabBarBadge({
    // #ifdef MP-WEIXIN
    index: 2,
    // #endif
    // #ifndef MP-WEIXIN
    index: 3,
    // #endif
    text: data > 99 ? '99+' : data + ''
})

// 如需移除所有端的直播，删除所有条件编译，index配置为 2
```



移除直播功能后，后台中直播相关的服务可以停止

