uni-app ios录屏功能

发布于 1周前 作者 yuanlaile 来自 Uni-App

uni-app ios录屏功能

ios录屏功能 ios录屏功能 ios录屏功能 ios录屏功能 ios录屏功能 ios录屏功能

9 回复

Q; 1196097915 这里能做


求教下怎么解决的呀

回复 1***@163.com: 做了个ios录屏插件

后台录屏、应用外录屏、直播屏幕(ios) :https://ext.dcloud.net.cn/plugin?id=8149

公司承接项目外包开发、双端(Android,iOS)原生插件开发。
为什么选择我们: 1、1000+项目开发积累,数百种商业模式开发经验,更懂您的需求,沟通无障碍。 2、一年免费技术保障,系统故障或被攻击,2小时快速响应提供解决方案落地。 3、软件开发源码定制工厂,去中间商降低成本,提高软件开发需求沟通效率。 4、纯原生开发,拒绝模板和封装系统,随时更新迭代,增加功能,无需重做系统。 5、APP定制包办软件著作权申请,30天内保证拿到软著证书,知识产权受保护。 6、中软云科技导入严谨的项目管理系统,确保项目准时交付,快速抢占市场商机。 7、软件开发费、维护费、第三方各种费用公开透明,不花冤枉钱,不玩套路。
已有大量双端插件、App、小程序、公众号、PC、移动端、游戏等案例。
行业开发经验:银行、医疗、直播、电商、教育、旅游、餐饮、分销、微商、物联网、零售等
商务QQ:1559653449 商务微信:fan-rising
7x24小时在线,欢迎咨询了解

针对uni-app在iOS平台上实现录屏功能的需求,虽然uni-app本身没有直接提供录屏的API,但我们可以通过调用原生插件或利用iOS的ReplayKit框架来实现这一功能。以下是一个利用uni-app插件机制,结合iOS原生代码实现录屏功能的示例。

步骤一:创建uni-app插件

  1. 创建插件项目: 使用HBuilderX创建一个uni-app插件项目。

  2. 编写iOS原生代码: 在插件的iOS目录中,创建一个ReplayKitScreenRecorder.m文件,并添加以下代码:

#import <ReplayKit/ReplayKit.h>
#import "ReplayKitScreenRecorder.h"

@implementation ReplayKitScreenRecorder

+ (void)startRecording:(NSString *)callbackId {
    RPScreenRecorder *screenRecorder = [RPScreenRecorder sharedRecorder];
    
    if (screenRecorder.isAvailable) {
        [screenRecorder startRecordingWithHandler:^(NSError * _Nullable error) {
            if (error) {
                // 录屏失败,通过JS回调通知uni-app
                NSString *jsCode = [NSString stringWithFormat:@"uni.%@('%@', {error: '%@'})", callbackId, @"fail", error.localizedDescription];
                [uniAppEvalJS:jsCode];
            } else {
                // 录屏开始,通过JS回调通知uni-app
                NSString *jsCode = [NSString stringWithFormat:@"uni.%@('%@')", callbackId, @"start"];
                [uniAppEvalJS:jsCode];
            }
        }];
    } else {
        // 录屏功能不可用,通过JS回调通知uni-app
        NSString *jsCode = [NSString stringWithFormat:@"uni.%@('%@', {error: 'Screen recording is not available'})", callbackId, @"fail"];
        [uniAppEvalJS:jsCode];
    }
}

+ (void)stopRecording:(NSString *)callbackId {
    RPScreenRecorder *screenRecorder = [RPScreenRecorder sharedRecorder];
    
    if (screenRecorder.isRecording) {
        [screenRecorder stopRecordingWithHandler:^(RPPreviewViewController * _Nullable previewController, NSError * _Nullable error) {
            if (error) {
                // 录屏停止失败,通过JS回调通知uni-app
                NSString *jsCode = [NSString stringWithFormat:@"uni.%@('%@', {error: '%@'})", callbackId, @"stopFail", error.localizedDescription];
                [uniAppEvalJS:jsCode];
            } else {
                // 录屏停止成功,通过JS回调通知uni-app
                NSString *jsCode = [NSString stringWithFormat:@"uni.%@('%@', {previewController: '%@'})", callbackId, @"stopSuccess", previewController ? @"exists" : @"nil"];
                [uniAppEvalJS:jsCode];
                
                // 如果有预览控制器,可以进一步处理,比如展示给用户
                if (previewController) {
                    // [self presentViewController:previewController animated:YES completion:nil];
                }
            }
        }];
    } else {
        // 没有正在进行的录屏,通过JS回调通知uni-app
        NSString *jsCode = [NSString stringWithFormat:@"uni.%@('%@', {error: 'No recording in progress'})", callbackId, @"stopFail"];
        [uniAppEvalJS:jsCode];
    }
}

@end

步骤二:在uni-app中调用插件

在uni-app的JavaScript代码中,通过plus.bridge.exec方法调用上述插件的录屏功能:

function startRecording() {
    plus.bridge.exec('ReplayKitScreenRecorder', 'startRecording', [function(res) {
        console.log(res);
    }]);
}

function stopRecording() {
    plus.bridge.exec('ReplayKitScreenRecorder', 'stopRecording', [function(res) {
        console.log(res);
    }]);
}

注意:以上代码仅为示例,实际开发中可能需要根据具体需求进行调整,并确保iOS项目的配置正确,包括权限设置等。

回到顶部