微信开发者工具接入短剧播放器插件

接入短剧播放插线

  • 申请添加插件
  • 基础接入
      • app.json
      • app.js
      • playerManager.js
          • 数据加密
      • 跳转到播放器页面
      • 运行出错
  • 示例
      • 小程序页面
      • 页面使用的方法
      • 小程序输入框绑定

申请添加插件

添加插件:登录微信开发者平台 ——> 设置 ——> 第三方设置 ——> 插件管理 ——> 搜索“短剧播放器”插件并添加。
添加插件

基础接入

app.json

找到app.json文件,加入以下配置:

  // 添加插件为“playlet-plugin”"plugins": {"playlet-plugin": {"version": "latest","provider": "wx94a6522b1d640c3b"}}

其中provider"字段为插件提供方的appid,设置为wx94a6522b1d640c3b即可。请确保将 version 字段设置为 latest,以使用最新版本的插件。
补充问题处理:

  • 在开发者工具调试时,可能会出现黑屏,或者报错Plugin module "__wx__/plugin-private-api" is not defined.问题,可以先去掉app.json中默认的设置"lazyCodeLoading": "requiredComponents"
  • 有些使用框架的开发者,例如uniapp,如果碰到自定义运营区域组件,或者充值组件无法渲染的问题,可能是该组件被框架删除了。可通过创建一个空的页面,去引用对应的组件,页面的json文件可参考:
  "usingComponents": {"charge-dialog": "/components/charge-dialog/charge-dialog","open-area-left": "/components/open-area-left/open-area-left","open-area-left-side": "/components/open-area-left-side/open-area-left-side","open-area-right": "/components/open-area-right/open-area-right"}

或者我看其他人提供的是:

  "usingComponents": {"charge-dialog": "/components/charge-dialog/charge-dialog","open-area-left": "/components/open-area-left/open-area-left","open-area-left-side": "/components/open-area-left-side/open-area-left-side","open-area-right": "/components/open-area-right/open-area-right","mp-cells": "weui-miniprogram/cells/cells","mp-cell": "weui-miniprogram/cell/cell"},

以下分别是:组件存储文件夹、新建项目默认组件(顶部导航栏)、以上新增组件文件夹
组件存储文件夹新建项目默认组件此时添加的组件
关于

  • 新增charge-dialog充值组件的JS代码见基础接入文档中的充值组件;
  • 新增的open-area-leftopen-area-left-sideopen-area-right组件的JS代码编写见文档。

app.js

// 引用下面的playerManager.js文件,./utils/playerManager为与app.js的相对路径
var PlayerManager = require('./utils/playerManager')/* 播放器页面和小程序之间有比较多的逻辑交互,例如某一集是否能解锁观看,需要开发者提供,插件提供了一些接口来让小程序去交互。接口通过const playletPlugin = requirePlugin('playlet-plugin')返回的插件实例来调用 */
// playlet-plugin必须与上面的app.json里面声明的插件名称一致(plugins插件名称也是playlet-plugin)
const playletPlugin = requirePlugin('playlet-plugin')//app.js
App({onLaunch(options) {// 注册播放器页面的onLoad事件playletPlugin.onPageLoad(this._onPlayerLoad.bind(this))},_onPlayerLoad(info) {// 初始化一个PlayerManager,封装了插件的接口const playerManager = new PlayerManager()playerManager._onPlayerLoad(info)},
})

onLaunch调用playletPlugin.onPageLoad(func)func是回调函数,这个回调函数会在播放器页面onLoad时触发,可以在该回调函数中进行其他信息的初始化。

上述文件位置:初始化文件

playerManager.js

上面的app.js里面引用了playerManager.js文件,新建一个文件夹utils,在其中加入一个playerManager.js文件:

/* 播放器页面和小程序之间有比较多的逻辑交互,例如某一集是否能解锁观看,需要开发者提供,插件提供了一些接口来让小程序去交互。接口通过const playletPlugin = requirePlugin('playlet-plugin')返回的插件实例来调用 */
// playlet-plugin必须与上面的app.json里面声明的插件名称一致(plugins插件名称也是playlet-plugin)
var playletPlugin = requirePlugin("playlet-plugin");// 点击按钮触发此函数跳转到播放器页面
function navigateToPlayer(obj) {// 下面的${dramaId}变量,需要替换成小程序管理后台的媒资管理上传的剧的dramaId// 变量${srcAppid}是提审方appid// 变量${serialNo}是活动的页面路径// 变量${extParam}是分享参数,分享的卡片和二维码会在分享的链接上携带此参数const { extParam, dramaId, srcAppid } = objwx.navigateTo({// 播放器的路径前缀为plugin-private://wx94a6522b1d640c3b/pages/playlet/playlet,再将数据进行拼接即可访问url: `plugin-private://wx94a6522b1d640c3b/pages/playlet/playlet?dramaId=${dramaId}&srcAppid=${srcAppid}&extParam=${extParam || ''}`})
}const proto = {_onPlayerLoad(info) {// PlayletManager是一个类,可通过playletPlugin.PlayletManager.getPageManager(playerId)获取其实例,大部分的接口都在该实例对象上提供,例如getInfo、showChargeDialog等const pm = playletPlugin.PlayletManager.getPageManager(info.playerId)// 定义全局this.pm参数,将pm赋值给this.pm全局参数,方便该方法之外的其他方法使用this.pm = pm// encryptedData是经过开发者后台加密后(不要在前端加密)的数据,具体实现见下面的加密章节// 调用 getEncryptData 方法获取加密后的数据,在 getEncryptData 方法中,需要自己实现一个后台接口来获取加密后的数据,并将其返回encryptedDatathis.getEncryptData({ serialNo: info.serialNo }).then(res => {// 在 setCanPlaySerialList 中,将加密后的数据传递给播放器管理器来设置,setCanPlaySerialList({ data, freeList })接口设置当前可播放的剧集,data参数就是上面提到的加密后的数据,表示那些集是可播放的,是LockDataReq类型对象经过JSON.stringify,然后再加密后得到的字符串pm.setCanPlaySerialList({data: res.encryptedData,  // encryptedData是后台加密后的数据,具体实现见下面的加密章节freeList: [{ // 1~10集是免费剧,data里面的字段也必须至少设置1~10集可播放start_serial_no: 1,end_serial_no: 10}],})})// 需要解锁的事件pm.onCheckIsCanPlay(this.onCheckIsCanPlay)// 关于分享的处理// 开启分享以及withShareTicketpm.setDramaFlag({share: true,withShareTicket: true})// 获取分享参数,页面栈只有短剧播放器一个页面的时候可获取到此参数// 例如从分享卡片进入、从投流广告直接跳转到播放器页面,从二维码直接进入播放器页面等情况playletPlugin.getShareParams().then(res => {console.log('getLaunch options query res', res)// 关于extParam的处理,需要先做decodeURIComponent之后才能得到原值const extParam = decodeURIComponent(res.extParam)console.log('getLaunch options extParam', extParam)// 如果设置了withShareTicket为true,可通过文档的方法获取更多信息// https://developers.weixin.qq.com/miniprogram/dev/framework/open-ability/share.htmlconst enterOptions = wx.getEnterOptionsSync()console.log('getLaunch options shareTicket', enterOptions.shareTicket)}).catch(err => {console.log('getLaunch options query err', err)})// 设置分享参数,extParam除了可以通过在path传参,还可以通过下面的接口设置pm.setExtParam('hellotest')},onCheckIsCanPlay(param) {// TODO: 碰到不可以解锁的剧集,会触发此事件,这里可以进行扣币解锁逻辑,如果用户无足够的币,可调用下面的this.isCanPlay设置console.log('onCheckIsCanPlay param', param)var serialNo = param.serialNothis.getEncryptData({ serialNo: serialNo }).then(res => {

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/589021.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

k8s存储卷 PV与PVC 理论学习

介绍 存储的管理是一个与计算实例的管理完全不同的问题。PersistentVolume 子系统为用户和管理员提供了一组 API,将存储如何制备的细节从其如何被使用中抽象出来。为了实现这点,我们引入了两个新的 API 资源:PersistentVolume 和 Persistent…

SAP MRP之MTO及项目的最小批量最大批量的参数设置

订货生产的批量计算 使用该标识控制面向订单生产和项目生产的批量计算程式的选择。 可以选择以下计算程式: [ ]系统使用短缺库存批量法计算该订单数量。 [1]系统使用短缺库存批量法计算该订单数量,并且还考虑取整数量或最小和最大批量。 [2]系统使用在…

Vue ElementPlus Input 输入框

Input 输入框 通过鼠标或键盘输入字符 input 为受控组件,它总会显示 Vue 绑定值。 通常情况下,应当处理 input 事件,并更新组件的绑定值(或使用v-model)。否则,输入框内显示的值将不会改变,不支…

C++的并发世界(二)——初识多线程

0.引言 C的并发世界(零)和C的并发世界(一)的东西真的对于我这种初学者难以理解,我确定从第一个多线程案例进行学习归纳总结。 1.多线程的目的 ①将耗时的任务进行分解,进行实时响应;   ②充分利用多核CP…

JVM之内存区域划分、类加载、垃圾回收机制(GC)

JVM(Java虚拟机)是Java编程语言的核心组件之一,它是一个虚拟的计算机环境,用于在各种硬件和操作系统上执行Java字节码。JVM的设计目标是提供一种可移植、安全、高性能的执行环境,使得Java程序能够在不同平台上运行&…

AWS上面部署一台jenkins

问题 客户预算有限,需要在aws云上面搞一台EC2手动安装jenkins发版。 步骤 创建密钥对 在EC2服务里面创建密钥对,具体如下图: 设置密钥对,如下图: 保存好这个私钥文件,以便后续用这个私钥文件ssh登录j…

AI技术助推汽车行业走向更光明的未来

我们在汽车上度过的时间很多,有时候由于交通、天气和其他路况问题,我们在汽车上度过的时间之久甚至会出乎意料。正因如此,保障旅途体验的舒适和安全就显得至关重要。交通事故每天都会发生,因此在车辆中采取额外的安全措施对于所有…

强化基础-Java-泛型基础

什么是泛型? 泛型其实就参数化类型,也就是说这个类型类似一个变量是可变的。 为什么会有泛型? 在没有泛型之前,java中是通过Object来实现泛型的功能。但是这样做有下面两个缺陷: 1 获取值的时候必须进行强转 2 没有…

50位主播带货破亿,抖音3月榜单有哪些看点?

3月,随着“抖音商城38好物节”的开展,平台消费氛围浓郁。数据显示,2月28日至3月8日,平台日均支付GMV同比增长了33%,好物节电商直播累计时长达4327万小时,挂购物车的短视频看播量达760亿次。 不过&#xff0…

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控

基于Zabbix 5.0 实现windows服务器上应用程序和主机端口的状态监控 背景 用python开发的应用程序在服务器上运行,有时候会出现程序自动退出却收不到告警的情况 环境 zabbix服务器:Centos7 64位 Windows服务器: Windows 10 64位 软件 zabbix_server:zabbix5.0 zabbix_…

利用Winform实现文字滚动(仅供参考)

本人水平有限,如有写得不对的地方,望指正。为了简单化,做了一个简陋版的滚动控件。本文的内容仅供参考 测试环境: visual studio 2017 .net framework 4.0 原理非常简单: 1 先自定义一个继承UserControl的控件&am…

啥是MCU,MCU科普

啥是MCU,MCU科普 附赠自动驾驶学习资料和量产经验:链接 MCU是Microcontroller Unit 的简称,中文叫微控制器,俗称单片机,是把CPU的频率与规格做适当缩减,并将内存、计数器、USB、A/D转换、UART、PLC、DMA等…