更新记录
1.5(2026-03-18)
1、ios录屏插件包优化
1.4(2026-03-14)
1、优化安卓录屏代码 2、增加ios录屏功能
1.3(2025-08-15)
1、修复了后台截屏报错的bug 2、优化了截屏时机,解决有时候会把授权弹窗截屏进去的bug
查看更多平台兼容性
| Android | Android CPU类型 | iOS |
|---|---|---|
| 适用版本区间:8.1 - 16.0 | armeabi-v7a:未测试,arm64-v8a:未测试,x86:未测试 | 适用版本区间:12 - 18 |
原生插件通用使用流程:
- 购买插件,选择该插件绑定的项目。
- 在HBuilderX里找到项目,在manifest的app原生插件配置中勾选模块,如需要填写参数则参考插件作者的文档添加。
- 根据插件作者的提供的文档开发代码,在代码中引用插件,调用插件功能。
- 打包自定义基座,选择插件,得到自定义基座,然后运行时选择自定义基座,进行log输出测试。
- 开发完毕后正式云打包
付费原生插件目前不支持离线打包。
Android 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/android
iOS 离线打包原生插件另见文档 https://nativesupport.dcloud.net.cn/NativePlugin/offline_package/ios
注意事项:使用HBuilderX2.7.14以下版本,如果同一插件且同一appid下购买并绑定了多个包名,提交云打包界面提示包名绑定不一致时,需要在HBuilderX项目中manifest.json->“App原生插件配置”->”云端插件“列表中删除该插件重新选择
android屏幕录制插件使用文档(ios集成方式在下面)
使用前提与注意事项
(1)录屏的时候如果需要声音输入需录音权限(android.permission.RECORD_AUDIO),无声录制可以不用授权
(2)uniapp导入插件后需要重新制作自定义基座才生效
使用步骤
引入插件
onLoad() {
//引入插件这个操作初始化一次就可以,把screenModule存成全局变量
this.screenModule = uni.requireNativePlugin('cfy-screen')
},
开始录屏
//开始录屏
startRec() {
/*
传递参数说明:
duration:表示最大录屏时间,接收int类型的数据,单位为秒。默认值为0,表示无时长限制,比如传60代表最长录制时间为60秒,60秒后自动停止。
voiceStatus:是否有声音,接收int类型的数据,默认值为1,1代表开启声音录制,0代表关闭声音录制。
*/
let that = this
const palm = {"duration":0, "voiceStatus": 1}
this.screenModule.jhfStartScreen(palm, initObj => {
console.log("初始化参数",initObj)//{"code":1}
if(initObj.code == 1){
uni.showToast({
title: '录屏开启成功',
icon: 'none'
})
//
that.recordStatus = "录屏中"
}else if(initObj.code == -100){
console.log("服务中断")
that.recordStatus = "录屏服务中断"
}
},finishObj=>{
console.log("录屏结束返回参数",finishObj)
/*"filePath": "/storage/emulated/0/Android/data/uni.UNIC2FEEDC/files/Documents/2024-10-29-10-36-18.mp4"
//录屏的存储路径,拿到这个路径之后可以做后续操作,上传、存相册、或者展示等
*/
uni.showToast({
title: '录屏完成',
icon: 'none'
})
that.recordStatus = "录屏完成"
})
},
暂停录屏
//暂停录屏
pauseRec() {
this.screenModule.jhfPauseScreen()
this.recordStatus = "暂停中"
},
继续录屏
resumeRec() {
this.screenModule.jhfResumeScreen()
this.recordStatus = "录屏中"
},
结束录制
stopRec() {
//停止录制,结束录屏之后参数在启动录屏传递的第二个回调方法中获取
this.screenModule.jhfStopScreen()
},
开始截屏
//开始截屏
captureScreen(){
let that = this
uni.showLoading({
title:"加载中"
})
/*
传递参数说明:
imgType:保存的截屏图片类型,接收string类型,默认值是“jpg”,可以传递jpg和png
*/
const palm = {
"imgType":"png",
}
that.shortStatus = "截屏准备中"
this.screenModule.jhfStart_CaptureScreen(palm,finishObj=>{
console.log("截屏结束回掉",finishObj)
uni.showToast({
title: '截屏完成',
icon: 'none'
})
uni.hideLoading()
that.shortStatus = "截屏完成"
})
}
iOS屏幕录制插件使用文档
一、插件概述
本插件为UniApp项目提供iOS屏幕录制功能,支持系统级录制、应用外录屏及麦克风声音采集。
⚠️ 重要提示:iOS录屏涉及应用扩展、多进程、多配置文件,集成前请仔细阅读本文档并按步骤操作。
二、核心概念
iOS录屏需要三个核心标识,它们的命名规则直接影响功能可用性(必须按照下面的规则命名):
| 标识类型 | 命名规则 | 示例 |
|---|---|---|
| 主应用ID | 自定义 | com.plugin.screen |
| App Group | group. + 主应用ID |
group.com.plugin.screen |
| 扩展ID | 主应用ID + .screenRecorder |
com.plugin.screen.screenRecorder |
三、Apple开发者后台配置
1、创建AppGroup
-
登录 Apple Developer 中心
-
进入 Certificates, Identifiers & Profiles → Identifiers
-
点击 + → 选择 App Groups → Continue
-
⚠️ AppGroups不能随便创建,名称必须为:
group.+ 主应用ID(如 group.com.plugin.screen)
2、创建主应用的Identifiers
-
Identifiers → + → 选择 App IDs → Continue
-
填写Bundle ID(如 com.plugin.screen)
-
启用 App Groups 能力,选择已创建的App Group
3、创建录屏扩展应用Extension的Identifiers
-
Identifiers → + → 选择 App IDs → Continue
-
⚠️ Bundle ID必须为:主应用ID +
.screenRecorder(如com.plugin.screen.screenRecorder) -
⚠️ 扩展创建的时候不能选择App Clip,要选择App,Capabilities中仅勾选 App Groups,其他不要勾选
-
启用 App Groups 能力,选择跟主应用ID同一个App Group
-
注意:不管是主应用的id还是扩展的id,必须启用App Groups 能力,并且主应用和扩展选择同一个AppGroups
4、生成描述文件
为主应用和扩展分别生成描述文件:
-
调试用:类型选择 iOS App Development
-
上架用:类型选择 App Store Connect
证书制作方式与常规iOS应用相同,本文不再赘述。
5、 最后总结一下重点:
- 主应用ID:随便创建,比如
com.plugin.screen - App Groups,不能随便创建,必须是
group.加上主应用的Identifiers,比如group.com.plugin.screen - 扩展Extension的Id,不能随便创建,必须是主应用的Identifiers 加上
.screenRecorder,比如com.plugin.screen.screenRecorder
四、插件集成
1、扩展配置
(1)、在项目跟目录下创建nativeplugins文件夹
(2)、在nativeplugins下新建文件夹cfy-screen
(3)、将生成的扩展描述文件ios-xxx.mobileprovision放到cfy-screen文件夹下
-
根据环境选择描述文件,比如你要调试那就选择扩展的调试的描述文件,假如你要上线appstore那就选择正式的描述文件
-
⚠️ 文件名必须以 ios- 开头(如 ios-development.mobileprovision)
(4)、在cfy-screen文件夹下新建ios-extension.json文件,内容如下。
-
⚠️ 注意下面注释内容,替换成自己的,然后把注释去掉
-
⚠️ 注意下面注释内容,替换成自己的,然后把注释去掉
-
⚠️ 特别注意:下面文件中不能有注释,项目中一定把注释去掉,我这里是备注提醒大家配置
-
⚠️ 特别注意:下面文件中不能有注释,项目中一定把注释去掉,我这里是备注提醒大家配置
{
"ScreenRecorderExtension.appex": {
"identifier": "com.testscreen.plugin.screenRecorder", //扩展的ID
"profile": "ios-develop.mobileprovision", //扩展描述文件的名称(刚才移动进来的跟该文件同级目录下)
"plists": {
"CFBundleDisplayName": "扩展名称", //该名称录屏的时候弹窗会显示(一般跟自己主应用一致就可以)
"NSExtension": {
"NSExtensionAttributes": {
"RPVideoExtensionBundleIdentifier": "com.testscreen.plugin.screenRecorder" //扩展的ID
},
"NSExtensionPointIdentifier": "com.apple.broadcast-services-upload",
"NSExtensionPrincipalClass": "SampleHandler"
}
},
"entitlements": {
"com.apple.security.application-groups": ["group.com.testscreen.plugin"] //AppGroups
}
}
}
完成上面配置后目录如下
├── nativeplugins/
│ └── cfy-screen/
├── ios-develop.mobileprovision # 扩展描述文件(注意这里是扩展的描述文件,不是主应用的,名称必须以ios-开头)
│ ├── ios-extension.json #该文件中不能有注释
└──
五、项目配置
1、manifest中capabilities配置
-
打开 manifest.json,点击最下面的 “源码视图”
-
找到app-plus节点 ---> distribute节点 --> ios节点(没有上面节点就创建),然后在ios节点下添加下面内容:
//group.com.testscreen.plugin替换成在开发者账号中创建的AppGroups
"capabilities" : {
"entitlements" : {
"com.apple.security.application-groups" : [ "自己的AppGroups" ]
}
}
- ⚠️ 特别注意:上面[]中的内容一定要替换成自己的AppGroups,跟上面ios-extension.json文件中com.apple.security.application-groups节点下内容一致
- ⚠️ 特别注意:下面文件中不能有注释,项目中一定把注释去掉,我这里是备注提醒大家配置
- 添加完后应该是像这样的(不要有注释,把所有注释去掉)
"app-plus" : {
/* 应用发布信息 */
"distribute" : {
/* ios打包配置 */
"ios" : {
//这里可能还有其他配置,不同项目配置不一样,不用管,只要关注下面节点有没有
"capabilities" : {
"entitlements" : {
"com.apple.security.application-groups" : [ "自己的AppGroups" ]
}
}
},
},
},
2、选择插件
-
打开 manifest.json
-
进入 App原生插件配置 → 选择云端插件 → 选择cfy-screen插件
3、配置权限
- 录屏需要使用到麦克风权限,需要在manifest.json基础配置中的
安卓/ios权限模块配置麦克风权限NSMicrophoneUsageDescription, - 描述内容尽量详细一些,比如:录屏功能需要使用麦克风权限以录制环境声音,是否允许?
- 如果需要调用到视频保存相册,那还必须开启相册读写权限
4、制作自定义基座或者云打包
-
Bundle ID:必须选择主应用ID(如 com.plugin.screen)
-
证书:调试选开发证书,发布选发布证书
-
描述文件:选择主应用对应的描述文件
-
⚠️ 云打包或者自定义基座用的是主应用的ID以及描述文件
-
⚠️ 修改manifest.json文件或更换插件包后,必须重新制作自定义基座才能生效。
六 插件使用
插件提供两种使用方式,开发者可根据上架需求选择。
1、方式一:系统录屏按钮(推荐)
使用iOS系统原生的录屏按钮,完全遵循苹果官方规范,无上架审核风险。
-
优点:完全遵循苹果官方规范,审核100%通过
-
缺点:无法自定义录屏按钮以及启动事件,但可通过CSS调整按钮位置
-
缺点:⚠️ 必须在
nvue页面中使用vue页面中使用会显示不出来录屏按钮
<template>
<view class="content">
<text class="tips">提示:下方为iOS系统录屏按钮,位置可通过CSS自定义</text>
<text class="tips"
>注意:网络上有非官方方式捕获录屏事件,但上架审核会被拒绝</text
>
<cfy-screen-component
ref="screenComp"
style="width: 40rpx; height: 40rpx; margin-top: 40rpx;"
/>
<button class="button" @click="checkAndGetOmissionFile">
获取遗漏文件
</button>
<button class="button" @click="getAllScreenFile">获取所有录屏文件</button>
<button class="button" @click="deleteAllScreenFile">
清空所有录屏文件
</button>
<button class="button" @click="saveFileToAlbum">保存到相册</button>
<button class="button" @click="playRecordedVideo">播放录屏</button>
</view>
</template>
<script>
export default {
data() {
return {
filePath: "",
};
},
onLoad() {
// 确保DOM渲染完成后再获取组件实例
this.$nextTick(() => {
this.initScreenRecorder();
});
},
methods: {
// 初始化录屏监听
initScreenRecorder() {
this.$refs.screenComp.setupScreenData({}, (ret) => {
console.log("录屏回调", ret);
if (ret && ret.path) {
this.filePath = ret.path;
}
});
},
// 获取遗漏文件(因App闪退等原因未返回的文件)
// 返回值:文件路径数组
checkAndGetOmissionFile() {
this.$refs.screenComp.checkAndgetOmissionFile({}, (fileArr) => {
console.log("遗漏文件", fileArr);
});
},
// 获取所有录屏文件
// 返回值:文件路径数组
getAllScreenFile() {
this.$refs.screenComp.getAllAScreenFile({}, (fileArr) => {
console.log("所有录屏文件", fileArr);
});
},
// 清空所有录屏文件(建议定期清理,避免占用空间)
deleteAllScreenFile() {
this.$refs.screenComp.deleteAllAScreenFile({}, (ret) => {
console.log("清空完成", ret);
});
},
// 保存视频到相册
saveFileToAlbum() {
if (!this.filePath) {
uni.showToast({ title: "暂无录屏文件", icon: "none" });
return;
}
this.$refs.screenComp.saveToAlbum(this.filePath, (ret) => {
console.log("保存回调", ret);
});
},
// 播放录屏文件
playRecordedVideo() {
if (!this.filePath) {
uni.showToast({ title: "暂无录屏文件", icon: "none" });
return;
}
this.$refs.screenComp.playRecordedVideo(this.filePath, (ret) => {
console.log("播放回调", ret);
});
},
},
};
</script>
2、方式二:自定义录屏事件(慎用)
通过非官方技术手段捕获录屏启动事件,可实现完全自定义的录屏交互。
- 优点:可完全自定义录屏触发事件,交互更灵活
- 优点:可以在vue以及nvue页面中使用
- 缺点:存在上架被拒风险,不建议提交App Store的应用使用
<template>
<view class="content">
<text class="tips warning"
>⚠️ 警告:此方式非苹果官方支持,上架可能被拒</text
>
<text class="tips">建议仅用于企业内部应用或个人测试</text>
<button class="screen" @click="startScreen">
{{isScreening?'停止录屏':'开始录屏'}}
</button>
<button class="button" @click="checkAndgetOmissionFile">
获取遗漏文件
</button>
<button class="button" @click="getAllAScreenFile">获取所有录屏文件</button>
<button class="button" @click="deleteAllAScreenFile">
清空所有录屏文件
</button>
<button class="button" @click="saveFileToaum">保存相册</button>
<button class="button" @click="playRecordedVideo">播放文件</button>
</view>
</template>
<script>
export default {
data() {
return {
filePath: "",
screenComp: null,
isScreening: false,
};
},
onLoad() {
this.screenComp = uni.requireNativePlugin("cfy-screen-module");
},
methods: {
//开始录屏按钮
startScreen() {
const that = this;
this.screenComp.setupScreenData({}, (ret) => {
console.log("录屏回掉", ret);
if (!ret) return;
if (ret.code == 0) {
//开始录屏
that.isScreening = true;
} else {
that.isScreening = false;
if (ret.path) {
this.filePath = ret.path;
}
}
});
},
// 获取遗漏文件(因App闪退等原因未返回的文件)
// 返回值:文件路径数组
checkAndGetOmissionFile() {
this.$refs.screenComp.checkAndgetOmissionFile({}, (fileArr) => {
console.log("遗漏文件", fileArr);
});
},
// 获取所有录屏文件
// 返回值:文件路径数组
getAllScreenFile() {
this.$refs.screenComp.getAllAScreenFile({}, (fileArr) => {
console.log("所有录屏文件", fileArr);
});
},
// 清空所有录屏文件(建议定期清理,避免占用空间)
deleteAllScreenFile() {
this.$refs.screenComp.deleteAllAScreenFile({}, (ret) => {
console.log("清空完成", ret);
});
},
// 保存视频到相册
saveFileToAlbum() {
if (!this.filePath) {
uni.showToast({ title: "暂无录屏文件", icon: "none" });
return;
}
this.$refs.screenComp.saveToAlbum(this.filePath, (ret) => {
console.log("保存回调", ret);
});
},
// 播放录屏文件
playRecordedVideo() {
if (!this.filePath) {
uni.showToast({ title: "暂无录屏文件", icon: "none" });
return;
}
this.$refs.screenComp.playRecordedVideo(this.filePath, (ret) => {
console.log("播放回调", ret);
});
},
},
};
</script>

收藏人数:
购买(
试用
赞赏(1)
下载 105
赞赏 1
下载 13090
赞赏 1
赞赏
京公网安备:11010802035340号