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

接入短剧播放插线

  • 申请添加插件
  • 基础接入
      • 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 } = obj
  wx.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 方法中,需要自己实现一个后台接口来获取加密后的数据,并将其返回encryptedData
    this.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)
    // 关于分享的处理
    // 开启分享以及withShareTicket
    pm.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.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')
  },
  onCheckIsCanPlay(param) {
   
    // TODO: 碰到不可以解锁的剧集,会触发此事件,这里可以进行扣币解锁逻辑,如果用户无足够的币,可调用下面的this.isCanPlay设置
    console.log('onCheckIsCanPlay param', param)
    var serialNo = param.serialNo
    this.getEncryptData({
    serialNo: serialNo }).then(res => {
   
      // encryptedData是后台加密后的数据,具体实现见下面的加密章节
      this.pm.

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

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

相关文章

操作系统导论-py2文件修改为py3文件快捷解决方法

在操作系统导论作业中,我们需要用到HW文件。但是这个代码包中,所有.py文件都是py2格式的,需要我们修改为py3文件后运行,即将.py文件开头的 #! /usr/bin/env python 修改为: #! /usr/bin/env python3 在前面小部分文件中…

【快捷部署】010_MySQL(5.7.27)

📣【快捷部署系列】010期信息 编号选型版本操作系统部署形式部署模式复检时间010MySQL5.7.27Ubuntu 20.04Docker单机2024-03-28 一、快捷部署 #!/bin/bash ################################################################################# # 作者&#xff1a…

idea类已经存在却报错

一句话导读 在idea中导入新的项目,很多类都飘红报错,mvn compile可以通过,可能是因为idea缓存问题导致。 由于这个项目是由老项目复制过来后,再继续开发新的功能,很多同事导入后,都爆出新的类找不到。而编译…

正弦实时数据库(SinRTDB)的使用(4)-快照查询

前文已经将松果实时数据库的安装、创建点表、创建测点、接入OPC DA的数据进行了介绍,没有了解的可以先看如下博客: 正弦实时数据库(SinRTDB)的安装 正弦实时数据库(SinRTDB)的使用(1)-使用数据发生器写入数据 正弦实时数据库(SinRTDB)的使用(2)-接入O…

【吊打面试官系列】Redis篇 -怎么测试 Redis 的连通性?

大家好,我是锋哥。今天分享关于 【怎么测试 Redis 的连通性?】面试题,希望对大家有帮助; 怎么测试 Redis 的连通性? 使用 ping 命令。 要测试Redis的连通性,可以使用redis-cli命令行工具或编写代码。以下是…

Docker 哲学 - Dockerfile 指令

Dockerfile 的 entrypoint 和 cmd 书写方式一样吗,分别用一个node项目的 demo来举例 Dockerfile 的 entrypoint 、cmd 有什么区别,分别举例他们同时出现的场景和 单独出现的场景 entrypoint 和 cmd 命令: 同时出现: 1、cmd 作为 e…

格式化危机!教你轻松恢复数据!

一、遭遇格式化,数据恢复并非难事 当存储设备遭遇格式化后,许多人可能会陷入恐慌,担心重要数据一去不复返。但实际上,数据恢复并非如想象中那般困难。格式化操作主要清除了文件系统的索引信息,而实际的数据往往还残留…

[STM32] Keil 创建 HAL 库的工程模板

Keil 创建 HAL 库的工程模板 跟着100ASK_STM32F103_MINI用户手册V1.1.pdf的第7章步骤进行Keil工程的创建。 文章目录 1 创建相关文件夹2 创建“main.c/h”和“stm32f1xx_clk.c/h”3 复制CMSIS和HAL库4 创建新的Keil工程5 添加组文件夹和工程文件6 配置Keil设置 1 创建相关文件…

Ollama使用

当前各种大模型层出不穷,但想要在本地运行起来一个大模型还是有一定门槛的。 并且模型众多, 每个模型都有自己不同的配置和使用方法,使用非常不便。 Ollama就是一个非常好的工具, 可以让你方便在本地运行各种大模型。 1 安装 支…

【前端学习——js篇】11.元素可见区域

具体见:https://github.com/febobo/web-interview 11.元素可见区域 ①offsetTop、scrollTop offsetTop,元素的上外边框至包含元素的上内边框之间的像素距离,其他offset属性如下图所示: 下面再来了解下clientWidth、clientHeight…

报错there is no HDFS_NAMENODE_USER defined

在Hadoop安装目录下找到sbin文件夹,修改里面的四个文件 1、对于start-dfs.sh和stop-dfs.sh文件,添加下列参数: HDFS_DATANODE_USERroot HDFS_DATANODE_SECURE_USERhdfs HDFS_NAMENODE_USERroot HDFS_SECONDARYNAMENODE_USERroot 2、对于st…

云贝教育 |【技术文章】pg_bulkload介绍

注: 本文为云贝教育 刘峰 原创,请尊重知识产权,转发请注明出处,不接受任何抄袭、演绎和未经注明出处的转载。 pg_bulkload 是一个高性能的数据加载工具,专门为PostgreSQL数据库设计,用于大批量数据的快速导入。pg_bulk…

【YOLOV5 入门】——detect.py简单解析模型检测基于torch.hub的检测方法

声明:笔记是毕设时根据B站博主视频学习时自己编写,请勿随意转载! 一、打开detect.py(文件解析) 打开上节桌面创建的yolov5-7.0文件夹里的detect.py文件(up主使用的是VScode,我这里使用pycharm…

电商数据采集平台兼具海量采集国内淘系京东国外LAZADA亚马逊阿里巴巴等平台数据采集

很多的电商数据采集API接口可以使用国内电商平台淘系、京东的行业数据,境外Lazada等平台的行业数据,以及各类直播电商数据等,相对淘数据来说,平台更多一些,但是价格也比较贵,一般是按照行业下类目来销售的&…

华为耳机快速配对新设备,一招搞定

耳机现在已经是我们形影不离的随身设备,如果我们碰见华为手机或平板无法连接或连接不上华为耳机(如FreeBuds、FreeLace系列及FreeClip蓝牙耳机)的问题,其实很简单,今天分享一个小妙招,帮助我们快速解决这个…

ConcurrentHashMap 是如何保证并发安全的

ConcurrentHashMap JDK1.7 ConcurrentHashMap 是如何保证并发安全的?使用分段锁的概念: 例如这张图,共有 256 个槽位,如果整个哈希表用一把锁,势必性能低下 如果256个槽位,每个槽位都有一把锁&#xff0…

懒人方法|(一)分享:NHANES数据库怎么下载整理

1.前言 继前面孟德尔随机化的代码分享,应粉丝要求出一篇关于NHANES数据库的数据整理入门教程 前面MR代码:全代码分享|R语言孟德尔随机化怎么做?TwoSampleMR包MR一套标准流程 2.数据库界面 NHANES(National Health …

数据结构算法刷题笔记——题型解法

数据结构算法刷题笔记——题型解法 一、常用容器1.1 vector1.1.1 vector基本操作1.1.1.0 头文件#include<vector>1.1.1.1 构造一个vector容器1.1.1.2 元素访问1.1.1.3 元素个数 .size()1.1.1.4 最大容量 .capacity()1.1.1.5 改变容器有效元素个数 .resize(n)1.1.1.6 改变…

详解智慧路灯杆网关的集中供电能力

智慧路灯杆网关是智慧杆物联网系统中不可或缺的设备。智慧杆网关不仅可以作为杆载设备与云平台、设备与设备之间的桥梁&#xff0c;促进数据的无缝传输&#xff0c;而且还能提供高效的能源管理和供电功能。 BMG8200系列交流型智慧路灯杆网关就集成了强大的供电能力&#xff0c;…

数字信号转模拟信号 DA变换 高精度PWM脉宽调制信号100Hz PWM/5KHz PWM /10KHz PWM转4-20mA/0-10V/1-5V/0-5V

主要特性: >>精度等级&#xff1a;0.1级。产品出厂前已检验校正&#xff0c;用户可以直接使用 >>辅助电源&#xff1a;8-32V 宽范围供电 >>PWM脉宽调制信号输入: 1Hz~10KHz >>输出标准信号&#xff1a;0-5V/0-10V/1-5V,0-10mA/0-20mA/4-20mA等&…