新增版本检测,合同记录,业绩账户调整
This commit is contained in:
@@ -0,0 +1,3 @@
|
||||
{
|
||||
"deploymentTarget": "9"
|
||||
}
|
||||
146
uni_modules/uni-usercapturescreen/utssdk/app-ios/index.uts
Normal file
146
uni_modules/uni-usercapturescreen/utssdk/app-ios/index.uts
Normal file
@@ -0,0 +1,146 @@
|
||||
import { NotificationCenter } from 'Foundation';
|
||||
import { CGRect } from "CoreFoundation";
|
||||
import { UIApplication, UIView, UITextField, UIScreen, UIDevice } from "UIKit"
|
||||
import { UTSiOS } from "DCloudUTSFoundation"
|
||||
import { DispatchQueue } from 'Dispatch';
|
||||
import { SetUserCaptureScreenOptions, OnUserCaptureScreenCallbackResult, OnUserCaptureScreen, OffUserCaptureScreen, SetUserCaptureScreen, UserCaptureScreenCallback, SetUserCaptureScreenSuccess, SetUserCaptureScreenFail } from "../interface.uts"
|
||||
|
||||
/**
|
||||
* 定义监听截屏事件工具类
|
||||
*/
|
||||
class CaptureScreenTool {
|
||||
static listener : UserCaptureScreenCallback | null;
|
||||
static secureView : UIView | null;
|
||||
|
||||
// 监听截屏
|
||||
static listenCaptureScreen(callback : UserCaptureScreenCallback | null) {
|
||||
this.listener = callback
|
||||
|
||||
// 注册监听截屏事件及回调方法
|
||||
// target-action 回调方法需要通过 Selector("方法名") 构建
|
||||
const method = Selector("userDidTakeScreenshot")
|
||||
NotificationCenter.default.addObserver(this, selector = method, name = UIApplication.userDidTakeScreenshotNotification, object = null)
|
||||
}
|
||||
|
||||
// 捕获截屏回调的方法
|
||||
// target-action 的方法前需要添加 @objc 前缀
|
||||
@objc static userDidTakeScreenshot() {
|
||||
// 回调
|
||||
const res: OnUserCaptureScreenCallbackResult = {
|
||||
}
|
||||
this.listener?.(res)
|
||||
}
|
||||
|
||||
// 移除监听事件
|
||||
static removeListen(callback : UserCaptureScreenCallback | null) {
|
||||
this.listener = null
|
||||
NotificationCenter.default.removeObserver(this)
|
||||
}
|
||||
|
||||
static createSecureView() : UIView | null {
|
||||
let field = new UITextField(frame = CGRect.zero)
|
||||
field.isSecureTextEntry = true
|
||||
if (field.subviews.length > 0 && UIDevice.current.systemVersion != '15.1') {
|
||||
let view = field.subviews[0]
|
||||
view.subviews.forEach((item) => {
|
||||
item.removeFromSuperview()
|
||||
})
|
||||
view.isUserInteractionEnabled = true
|
||||
return view
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
// 开启防截屏
|
||||
static onAntiScreenshot(option : SetUserCaptureScreenOptions) {
|
||||
// uts方法默认会在子线程中执行,涉及 UI 操作必须在主线程中运行,通过 DispatchQueue.main.async 方法可将代码在主线程中运行
|
||||
DispatchQueue.main.async(execute = () : void => {
|
||||
let secureView = this.createSecureView()
|
||||
let window = UTSiOS.getKeyWindow()
|
||||
let rootView = window.rootViewController == null ? null : window.rootViewController!.view
|
||||
if (secureView != null && rootView != null) {
|
||||
let rootSuperview = rootView!.superview
|
||||
if (rootSuperview != null) {
|
||||
this.secureView = secureView
|
||||
rootSuperview!.addSubview(secureView!)
|
||||
rootView!.removeFromSuperview()
|
||||
secureView!.addSubview(rootView!)
|
||||
let rect = rootView!.frame
|
||||
secureView!.frame = UIScreen.main.bounds
|
||||
rootView!.frame = rect
|
||||
}
|
||||
}
|
||||
let res: SetUserCaptureScreenSuccess = {
|
||||
}
|
||||
option.success?.(res)
|
||||
option.complete?.(res)
|
||||
})
|
||||
}
|
||||
|
||||
// 关闭防截屏
|
||||
static offAntiScreenshot(option : SetUserCaptureScreenOptions) {
|
||||
DispatchQueue.main.async(execute = () : void => {
|
||||
if (this.secureView != null) {
|
||||
let window = UTSiOS.getKeyWindow()
|
||||
let rootView = window.rootViewController == null ? null : window.rootViewController!.view
|
||||
if (rootView != null && this.secureView!.superview != null) {
|
||||
let rootSuperview = this.secureView!.superview
|
||||
if (rootSuperview != null) {
|
||||
rootSuperview!.addSubview(rootView!)
|
||||
this.secureView!.removeFromSuperview()
|
||||
}
|
||||
}
|
||||
this.secureView = null
|
||||
}
|
||||
let res: SetUserCaptureScreenSuccess = {
|
||||
}
|
||||
option.success?.(res)
|
||||
option.complete?.(res)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启截图监听
|
||||
*/
|
||||
export const onUserCaptureScreen : OnUserCaptureScreen = function (callback : UserCaptureScreenCallback | null) {
|
||||
CaptureScreenTool.listenCaptureScreen(callback)
|
||||
}
|
||||
|
||||
/**
|
||||
* 关闭截屏监听
|
||||
*/
|
||||
export const offUserCaptureScreen : OffUserCaptureScreen = function (callback : UserCaptureScreenCallback | null) {
|
||||
CaptureScreenTool.removeListen(callback)
|
||||
}
|
||||
|
||||
/**
|
||||
* 开启/关闭防截屏
|
||||
*/
|
||||
export const setUserCaptureScreen : SetUserCaptureScreen = function (options : SetUserCaptureScreenOptions) {
|
||||
if (UIDevice.current.systemVersion < "13.0") {
|
||||
let res: SetUserCaptureScreenFail = {
|
||||
errCode: 12001,
|
||||
errSubject: "uni-usercapturescreen",
|
||||
errMsg: "setUserCaptureScreen:system not support"
|
||||
}
|
||||
options.fail?.(res);
|
||||
options.complete?.(res);
|
||||
|
||||
} else if (UIDevice.current.systemVersion == "15.1") {
|
||||
let res: SetUserCaptureScreenFail = {
|
||||
errCode: 12010,
|
||||
errSubject: "uni-usercapturescreen",
|
||||
errMsg: "setUserCaptureScreen:system internal error"
|
||||
}
|
||||
options.fail?.(res);
|
||||
options.complete?.(res);
|
||||
} else {
|
||||
if (options.enable == true) {
|
||||
CaptureScreenTool.offAntiScreenshot(options)
|
||||
} else {
|
||||
CaptureScreenTool.onAntiScreenshot(options)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user