uni-app 接入微信短剧播放器

前言

作为一个 uniapp 初学者,恰巧遇到微信短剧播放器接入的需求,在网上检索许久并没有发现傻瓜式教程。于是总结 uni-app 官网文档及微信开放文档,自行实践后,总结出几个步骤,希望为大家提供些帮助。实践后发现其实确实比较简单,大佬们可能也懒得写文档,那么就由我这个小白大概总结下。本文档仅涉及剧目提审成功后的播放器接入,其余相关问题请参考微信官方文档。

小程序申请插件

参考文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/videoplayer.html#_2-接入流程

首先,需要在小程序后台,申请 appid 为 wx94a6522b1d640c3b 的微信插件,可以在微信小程序管理后台进行添加,路径是 设置 - 第三方设置 - 插件管理 - 添加插件,搜索 wx94a6522b1d640c3b 后进行添加:小程序管理后台示例
搜索添加

uni-app 项目添加微信插件

参考文档:https://uniapp.dcloud.net.cn/tutorial/mp-weixin-plugin.html

添加插件完成后,在 manifest.json 中,点击 源码视图,找到如下位置并添加红框内的代码,此步骤意在将微信小程序插件引入项目。
在这里插入图片描述

/* 添加微短剧播放器插件 */
 "plugins" : {
    "playlet-plugin" : {
         "version" : "latest",
         "provider" : "wx94a6522b1d640c3b"
     }
 }

manifest.json 中完成添加后,需要在 pages.json 中找一个页面(我这边使用的是一个新建的空白页面)挂载组件,挂载方式如下图红框中所示,需注意,这里的组件名称需要与 manifest.json 中定义的一致:
pages.json

{
	"path": "newPage/newPage",
	"style": {
		"navigationBarTitleText": "",
		"enablePullDownRefresh": false,
		"navigationStyle": "custom",
		"app-plus": {
			"bounce": "none"
		},
		"mp-weixin": {
			"usingComponents": {
				"playlet-plugin": "plugin://playlet-plugin/playlet-plugin"
			}
		}
	}
}

挂载空页面是个笨办法,目前我这边尝试如果不挂载的话,会有些问题,有大神知道别的方法可以在评论区指点一下~

App.vue 配置

参考文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/videoplayer.html#_3-2-插件接入流程

首先,找个地方新建一个 playerManager.js,我这边建在了 common 文件夹下。代码如下(代码参考微信官方文档给出的 demo):

	var plugin = requirePlugin("playlet-plugin");
	// 点击按钮触发此函数跳转到播放器页面
	function navigateToPlayer(obj) {
	    // 下面的${dramaId}变量,需要替换成小程序管理后台的媒资管理上传的剧目的dramaId,变量${srcAppid}是提审方appid,变量${serialNo}是某一集,变量${extParam}是扩展字段,可通过
	    const { extParam, dramaId, srcAppid, serialNo } = obj
	    wx.navigateTo({
	      url: `plugin-private://wx94a6522b1d640c3b/pages/playlet/playlet?dramaId=${dramaId}&srcAppid=${srcAppid}&serialNo=${serialNo}&extParam=${extParam || ''}`
	    })
	}
	const proto = {
	  _onPlayerLoad(info) {
	    const pm = plugin.PlayletManager.getPageManager(info.playerId)
	    this.pm = pm
	    // encryptedData是经过开发者后台加密后(不要在前端加密)的数据,具体实现见下面的加密章节
	    this.getEncryptData({serialNo: info.serialNo}).then(res => {
	      // encryptedData是后台加密后的数据,具体实现见下面的加密章节
	      pm.setCanPlaySerialList({
	        data: res.encryptedData,
	        freeList: [{start_serial_no: 1, end_serial_no: 10}], // 1~10集是免费剧集
	      })
	    })
	    pm.onCheckIsCanPlay(this.onCheckIsCanPlay)
	    // 关于分享的处理
	    // 开启分享以及withShareTicket
	    pm.setDramaFlag({
	      share: true,
	      withShareTicket: true
	    })
	    // 获取分享参数,页面栈只有短剧播放器一个页面的时候可获取到此参数
	    // 例如从分享卡片进入、从投流广告直接跳转到播放器页面,从二维码直接进入播放器页面等情况
	    plugin.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.html
	      const enterOptions = wx.getEnterOptionsSync()
	      console.log('getLaunch options shareTicket', enterOptions.shareTicket)
	    }).catch(err => {
	      console.log('getLaunch options query err', err)
	    })
	    // extParam除了可以通过在path传参,还可以通过下面的接口设置
	    pm.setExtParam('hellotest')
	    // 分享部分end
	  },
	  onCheckIsCanPlay(param) {
	    // TODO: 碰到不可以解锁的剧集,会触发此事件,这里可以进行扣币解锁逻辑,如果用户无足够的币,可调用下面的this.isCanPlay设置
	    console.log('onCheckIsCanPlay param', param)
	    var serialNo = param.serialNo
	    this.getEncryptData({serialNo: serialNo}).then(res => {
	      // encryptedData是后台加密后的数据,具体实现见下面的加密章节
	      this.pm.isCanPlay({
	        data: res.encryptedData,
	        serialNo: serialNo,
	      })
	    })
	  },
	  getEncryptData(obj) {
	    const { serialNo } = obj
	    // TODO: 此接口请求后台,返回下面的setCanPlaySerialList接口需要的加密参数
	    const { srcAppid, dramaId } = this.pm.getInfo()
	    console.log('getEncryptData start', srcAppid, dramaId, serialNo)
	    return new Promise((resolve, reject) => {
	      resolve({
	        encryptedData: '' // TODO: 此参数需从后台接口获取到
	      })
	    })
	  },
	}
	function PlayerManager() {
	  var newProto = Object.assign({}, proto)
	  for (const k in newProto) {
	    if (typeof newProto[k] === 'function') {
	      this[k] = newProto[k].bind(this)
	    }
	  }
	}
	
	PlayerManager.navigateToPlayer = navigateToPlayer
	module.exports = PlayerManager

新建完成后,在 App.vue 中进行组件的配置和引用。
在这里插入图片描述

onLaunch: function() {
	// playlet-plugin必须和上面的app.json里面声明的插件名称一致
	const playletPlugin = requirePlugin('playlet-plugin')
	
	const _onPlayerLoad = (info) => {
		var PlayerManager = require('@/common/playerManager.js')
		const playerManager = new PlayerManager()
		playerManager._onPlayerLoad(info)
	}
	// 注册播放器页面的onLoad事件
	playletPlugin.onPageLoad(_onPlayerLoad.bind(this))
},
_onPlayerLoad(info) {
	var PlayerManager = require('@/common/playerManager.js')
    const playerManager = new PlayerManager()
    playerManager._onPlayerLoad(info)
},

页面使用

参考文档:https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/videoplayer.html#_3-2-插件接入流程

以上所有步骤完成后,就可以开心的使用短剧播放器了。 我这边临时写了个图片的 click 事件测试了一下:

clk() {
	// 逻辑处理...获取你的各种参数
	// 打开组件中封装的播放器页面
	PlayerManager.navigateToPlayer({
		srcAppid: 'wx1234567890123456', // 剧目提审方 appid
		dramaId: '100001', // 小程序管理后台的媒资管理上传的剧目的 dramaId
		serialNo: '1', // 剧目中的某一集
		extParam: encodeURIComponent('a=b&c=d'), // 扩展字段,需要encode
	})
},

写在最后:

总结完了,其实整体下来不是很难,对我这种前端小白来说检索和整合的过程是比较痛苦的,所以希望下一个接入的朋友可以少检索一些文档吧。
另附一个短剧播放器接口的文档: https://developers.weixin.qq.com/miniprogram/dev/platform-capabilities/industry/videoplayer-interface.html
文档主要介绍了短剧播放器插件提供的几个接口,在js代码里,插件接口实例通过下面的代码获取

// 名字playlet-plugin必须和app.json里面引用的插件名一致
const playletPlugin = requirePlugin('playlet-plugin')


读书越多越发现自己的无知,Keep Fighting!

欢迎友善交流,不喜勿喷~

Hope can help~

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

42.接雨水

题目描述 给定 n 个非负整数表示每个宽度为 1 的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。 示例 1: 输入:height [0,1,0,2,1,0,1,3,2,1,2,1] 输出:6 解释:上面是由数组 [0,1,0,2,1,0,1,3,…

Linux基础知识点总结!超详细

Linux 的学习对于一个IT工程师的重要性是不言而喻的,学好它是工程师必备修养之一。 Linux 基础 操作系统 操作系统Operating System简称OS,是软件的一部分,它是硬件基础上的第一层软件,是硬件和其它软件沟通的桥梁。 操作系统…

抖音小店出单之后怎么发货?抖店详细发货流程来了

大家好,我是喷火龙。 抖音小店发货是有规则的,如果出现超时发货或者虚假发货都会被平台处罚的,会影响我们店铺的评分和正常运营,还有些小伙伴们在发货的时候会遇到平台的违规提醒等问题。 今天我就给大家讲一下抖音小店的发货流…

夏季天气炎热没胃口怎么办?没食欲,心情浮躁怎么调理?

点击文末领取中医揿针的视频教程跟直播讲解 夏季天气炎热,很容易就让人出现胃口不佳的情况,再加上不少人需要长期服药,或是受到病痛困扰,更是严重影响了食欲。 夏养心 夏季,在这个季节,心脏的负担是很重…

JVM学习-对象实例化、内存布局、访问定位

对象实例化 创建对象方式 创建对象步骤 判断对象对应的类是否加载、链接、初始化 虚拟机遇到一个new指令,首先会去检查这个指令的参数能否在Metaspace的常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析、初始化(判断…

【源码+文档+调试讲解】可信捐赠系统的设计与实现

摘 要 如今社会上各行各业,都喜欢用自己行业的专属软件工作,互联网发展到这个时候,人们已经发现离不开了互联网。新技术的产生,往往能解决一些老技术的弊端问题。因为传统可信捐赠系统信息管理难度大,容错率低&#x…

【基于Fluent和深度学习算法驱动的流体力学计算与应用】

在深度学习与流体力学融合的背景下,科研边界不断拓展,创新成果层出不穷。从物理模型融合到复杂流动模拟,从数据驱动研究到流场智能分析,深度学习正以前所未有的力量重塑流体力学领域。目前在Nature和Science杂志上发表的深度学习驱…

香橙派 Kunpeng Pro 上手初体验

香橙派 Kunpeng Pro 上手初体验 目录 香橙派 Kunpeng Pro 上手初体验1.前言2.开箱3.开发板资源介绍硬件规格参数外观规格参数4.系统环境搭建系统镜像烧录ssh连接5.简单测试6.总结 1.前言 我很荣幸能收到了来自CSDN的测评邀请,让我有机会对香橙派最新推出的Kunpeng …

10个最佳人物素材网站推荐,免费获取第一个PNG文件!

人物素材是设计中应用最广泛的元素之一。无论是网页设计还是移动终端设计,人物素材的插画设计都比文字信息更容易吸引用户的注意力。作为内容呈现,还可以增加设计的艺术属性。为了节省大家寻找人物素材的时间成本,本文立即为大家整理了10个宝…

ARM IHI0069F GIC architecture specification (8)

3.2中断旁路支持 CPU interface可以支持中断信号旁路,使得当接口发出的中断信号被禁用时,传统中断信号被传递到PE上的中断请求输入,从而绕过GIC功能。 是否支持旁路由实际设计决定。 用于确定是否使用GICv3 FIQ和IRQ输出或旁路信号的控制取决…

Xinstall地推效果大揭秘:洞察用户需求,创新营销策略不再是难题

在互联网流量红利逐渐衰退的今天,企业如何快速搭建起满足用户需求的运营体系,成为了亟待解决的问题。特别是在地推领域,如何在多变的互联网环境下,迅速、有效地触达用户,扩大目标用户基数和流量池,成为了企…

计算机类主题会议推荐之——ACAIB 2024

【北方民族大学40 周年校庆学术活动】 第四届自动化控制、算法与智能仿生学术会议(ACAIB 2024) 2024年6月7-9日 中国银川 往届均已见刊检索 EI、SCOPUS双检索 基本信息 会议官网:www.acaib.org 最终截稿时间:2024年6月3日晚23:…

自定义CSS属性(@property)解决自定义CSS变量无法实现过渡效果的问题

且看下面的代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta name"viewport" content"widthdevice-width, initial-scale1.0" /><title>demot</title&g…

HX-100调频广播覆盖专用天线

HX-100全向天线是北京恒星科通科技发展有限公司自主研发的一款隧道专用宽带调频发射天线&#xff0c;采用圆盘形结构、振子采用铝合金材料制造&#xff0c;具有增益高、功率容量大、工作频带宽、安装方便、防腐防潮、抗风性能好等特点&#xff0c;特别适合隧道调频广播覆盖、地…

多语言跨境电商源码:迅狐系统的创新融合

在全球化经济的浪潮中&#xff0c;跨境电商正成为连接不同国家和地区消费者的重要桥梁。迅狐多商户跨境电商商城系统&#xff0c;以其创新的技术解决方案&#xff0c;将传统销售模式与新型电商营销手段完美融合&#xff0c;为用户和技术商提供了一个多语言、多功能的跨境电商平…

预防侵权知识丨什么是图形商标?怎么用产品图片进行图形商标查询检索?

图形商标查询检索是跨境电商预防侵权中重要的一环&#xff0c;但是有很多卖家对图形商标不太了解&#xff0c;也不知道怎么进行图形商标的查询检索。所以&#xff0c;我们一起来看下。 一、什么是图形商标 图形商标是商标的一种&#xff0c;指的是由几何图形或其它事物图案构…

一文讲清楚SpringBoot项目打包jar后运行报错template might not exist - 第514篇

历史文章&#xff08;文章累计500&#xff09; 《国内最全的Spring Boot系列之一》 《国内最全的Spring Boot系列之二》 《国内最全的Spring Boot系列之三》 《国内最全的Spring Boot系列之四》 《国内最全的Spring Boot系列之五》 《国内最全的Spring Boot系列之六》 《…

链动3+1模式:引领企业创新发展的全新商业模式

在数字化时代&#xff0c;企业正积极寻求创新策略以应对竞争激烈的市场环境。链动31模式&#xff0c;作为一种前沿的商业模式&#xff0c;为企业带来了全新的发展机遇。本文将对链动31模式进行深度剖析&#xff0c;并与传统的链动21模式进行对比&#xff0c;以展现其独特魅力和…

C语言-信号

信号 一、信号是什么东西 信号是事件发生时通知进程的一种机制&#xff0c;有时也称之为软件中断。 信号的到来会打断了程序执行的正常流程。 大多数情况下&#xff0c;无法预测信号到达的精确时间。 一个&#xff08;具有合适权限的&#xff09;进程能够向另一进程发送信…

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning

参数高效微调PEFT(一)快速入门BitFit、Prompt Tuning、Prefix Tuning 目前&#xff0c;模型最全的网站是HuggingFace&#xff0c;但是国内需要魔法流量才能访问。另外&#xff0c;现在大模型权重文件都较大&#xff0c;也会浪费不少流量&#xff0c;因此这里推荐使用魔搭社区下…