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"
     }
 }

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~

  • 20
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值