Web Analytics
Nhảy tới nội dung

Ví dụ

Version 2.0.0+​

initSettings (Quan trọng)​

Bạn bắt buộc phải gọi initSettings() một lần trước khi sử dụng bất kỳ API ScreenGuard nào khác. Mỗi tham số dưới đây có ví dụ riêng.

enableCapture & enableRecord​

Các tổ hợp để điều khiển độc lập việc chụp và quay màn hình.

// Cho phép chụp màn hình, chặn quay màn hình
await ScreenGuardModule.initSettings({
enableCapture: true,
enableRecord: false,
});

// Cho phép quay màn hình, chặn chụp màn hình
await ScreenGuardModule.initSettings({
enableCapture: false,
enableRecord: true,
});

// Chặn cả chụp và quay màn hình (phổ biến nhất)
await ScreenGuardModule.initSettings({
enableCapture: false,
enableRecord: false,
});

// Cho phép cả hai (ví dụ: cho màn hình review/demo)
await ScreenGuardModule.initSettings({
enableCapture: true,
enableRecord: true,
});

enableContentMultitask (iOS)​

Kết hợp với enableCapture / enableRecord để điều khiển hiển thị trong App Switcher.

// Cho phép chụp & quay màn hình, nhưng ẩn nội dung trong App Switcher
await ScreenGuardModule.initSettings({
enableCapture: true,
enableRecord: true,
enableContentMultitask: false,
});

// Chặn chụp & quay màn hình, nhưng giữ nội dung hiển thị trong App Switcher
await ScreenGuardModule.initSettings({
enableCapture: false,
enableRecord: false,
enableContentMultitask: true,
});

displayScreenGuardOverlay (iOS)​

await ScreenGuardModule.initSettings({
displayScreenGuardOverlay: true, // hiển thị overlay khi chụp/quay màn hình
timeAfterResume: 2000,
});

displayScreenguardOverlayAndroid (Android)​

await ScreenGuardModule.initSettings({
displayScreenguardOverlayAndroid: true, // hiển thị overlay khi quay lại từ background
});

timeAfterResume​

await ScreenGuardModule.initSettings({
displayScreenGuardOverlay: true,
timeAfterResume: 2000, // overlay hiển thị trong 2 giây
});

getScreenshotPath​

await ScreenGuardModule.initSettings({
getScreenshotPath: true, // bao gồm đường dẫn tệp trong screenshotData
});

limitCaptureEvtCount​

await ScreenGuardModule.initSettings({
limitCaptureEvtCount: 3, // chỉ phát sự kiện cho 3 ảnh chụp đầu tiên
});

trackingLog​

await ScreenGuardModule.initSettings({
trackingLog: true, // bật ghi log hoạt động
});

Ví dụ tổng hợp​

import React, { useEffect } from 'react';
import ScreenGuardModule from 'react-native-screenguard';

export default function App() {
useEffect(() => {
ScreenGuardModule.initSettings({
displayScreenGuardOverlay: true,
timeAfterResume: 2000,
getScreenshotPath: true,
trackingLog: true,
});

return () => {
ScreenGuardModule.unregister();
};
}, []);

// ...
}

Đăng ký với Màu sắc​

Kích hoạt ScreenGuard với overlay màu đặc (ví dụ: màu đỏ Google #DB4437).

await ScreenGuardModule.register({
backgroundColor: '#DB4437',
});

Đăng ký với Làm mờ​

Kích hoạt ScreenGuard với hiệu ứng làm mờ, bán kính 35.

await ScreenGuardModule.registerWithBlurView({
radius: 35,
});

Đăng ký với Hình ảnh​

Hiển thị hình ảnh tùy chỉnh kèm overlay màu nền.

// Hình ảnh từ mạng
await ScreenGuardModule.registerWithImage({
source: { uri: 'https://example.com/logo.png' },
width: 200,
height: 200,
backgroundColor: '#0f0f23',
alignment: 4, // center
});

// Hình ảnh local
await ScreenGuardModule.registerWithImage({
source: require('./assets/logo.png'),
width: 200,
height: 200,
backgroundColor: '#0f0f23',
});

Đăng ký một phần MỚI ✨​

Chỉ che một vùng view cụ thể (chỉ iOS, v2.0.2+).

import React, { useRef } from 'react';
import { View, Text, Button } from 'react-native';
import ScreenGuardModule from 'react-native-screenguard';

export default function App() {
const sensitiveRef = useRef<View>(null);

const enablePartialGuard = async () => {
await ScreenGuardModule.registerScreenguardPartially({
viewRef: sensitiveRef,
backgroundColor: '#000000',
});
};

return (
<View>
<View ref={sensitiveRef}>
<Text>Nội dung này sẽ bị che trong ảnh chụp màn hình</Text>
</View>
<Button title="Bật Guard" onPress={enablePartialGuard} />
</View>
);
}

Hủy đăng ký​

await ScreenGuardModule.unregister();

Lắng nghe sự kiện chụp màn hình (Hook)​

import { useSGScreenShot } from 'react-native-screenguard';

function MyComponent() {
const { screenshotData, activationStatus } = useSGScreenShot((event) => {
console.log('Đã phát hiện chụp màn hình:', event.name);
});

return (
<View>
<Text>Bảo vệ: {activationStatus?.isActivated ? 'Đang bật' : 'Đang tắt'}</Text>
<Text>Ảnh chụp gần nhất: {screenshotData?.name || 'Không có'}</Text>
</View>
);
}

Lắng nghe sự kiện quay màn hình (Hook)​

import { useSGScreenRecord } from 'react-native-screenguard';

function MyComponent() {
const { recordingData } = useSGScreenRecord((event) => {
if (event.isRecording) {
console.log('Đã bắt đầu quay màn hình!');
}
});

return (
<Text>Đang quay: {recordingData?.isRecording ? 'Có' : 'Không'}</Text>
);
}

Version <= 1.1.1​

initSettings() không tồn tại trong v1.x. Bạn có thể gọi trực tiếp các hàm register.

Hỗ trợ Promise

Các hàm register trả về Promise từ v1.0.8+ — có thể dùng await hoặc .then(). Với các phiên bản dưới 1.0.8, các hàm trả về ngay lập tức mà không có Promise.

Đăng ký với Màu sắc​

import ScreenGuardModule from 'react-native-screenguard';

// v1.0.8+ (async/await)
await ScreenGuardModule.register({
backgroundColor: '#DB4437', // màu đỏ Google
timeAfterResume: 1000,
});

// v1.0.8+ (Promise .then)
ScreenGuardModule.register({
backgroundColor: '#DB4437',
timeAfterResume: 1000,
}).then(() => {
console.log('Đã đăng ký');
}).catch((err) => {
console.error(err);
});

// v < 1.0.8 (không hỗ trợ Promise)
ScreenGuardModule.register({
backgroundColor: '#DB4437',
timeAfterResume: 1000,
});

Đăng ký với Làm mờ​

// v1.0.8+ (async/await)
await ScreenGuardModule.registerWithBlurView({
radius: 35,
timeAfterResume: 1000,
});

// v1.0.8+ (Promise .then)
ScreenGuardModule.registerWithBlurView({
radius: 35,
timeAfterResume: 1000,
}).then(() => console.log('Đã đăng ký'));

// v < 1.0.8
ScreenGuardModule.registerWithBlurView({
radius: 35,
timeAfterResume: 1000,
});

Hủy đăng ký​

// v1.0.8+ (async/await)
await ScreenGuardModule.unregister();

// v1.0.8+ (Promise .then)
ScreenGuardModule.unregister().then(() => console.log('Đã hủy đăng ký'));

// v < 1.0.8
ScreenGuardModule.unregister();

Đăng ký với Hình ảnh​

// v1.0.8+ (async/await)
await ScreenGuardModule.registerWithImage({
source: { uri: 'https://example.com/logo.png' },
width: 200,
height: 200,
backgroundColor: '#0f0f23',
alignment: 4,
timeAfterResume: 1000,
});

// v1.0.8+ (Promise .then)
ScreenGuardModule.registerWithImage({
source: { uri: 'https://example.com/logo.png' },
width: 200,
height: 200,
backgroundColor: '#0f0f23',
alignment: 4,
timeAfterResume: 1000,
}).then(() => console.log('Đã đăng ký'));

// v < 1.0.8
ScreenGuardModule.registerWithImage({
source: { uri: 'https://example.com/logo.png' },
width: 200,
height: 200,
backgroundColor: '#0f0f23',
alignment: 4,
timeAfterResume: 1000,
});

Lắng nghe sự kiện chụp màn hình​

import ScreenGuardModule from 'react-native-screenguard';

ScreenGuardModule.registerScreenshotEventListener(true, (data) => {
if (data != null) {
console.log('path:', data.path);
console.log('name:', data.name);
console.log('type:', data.type);
}
});

// Dọn dẹp
ScreenGuardModule.removeScreenshotEventListener();

Lắng nghe sự kiện quay màn hình​

import ScreenGuardModule from 'react-native-screenguard';

// Chỉ iOS
ScreenGuardModule.registerScreenRecordingEventListener(() => {
console.log('Quay màn hình đã kết thúc');
});

// Dọn dẹp
ScreenGuardModule.removeRecordingEventListener();

Class Component (Legacy)​

Dành cho React Native < 0.59.

import React, { Component } from 'react';
import { View, Text, Button } from 'react-native';
import ScreenGuardModule from 'react-native-screenguard';

// v1.0.8+ hỗ trợ async/await. Với v < 1.0.8, hãy bỏ async/await.
class App extends Component {
componentDidMount() {
ScreenGuardModule.registerScreenshotEventListener(true, (data) => {
console.log('Ảnh chụp:', data?.name);
});
}

componentWillUnmount() {
ScreenGuardModule.removeScreenshotEventListener();
ScreenGuardModule.unregister();
}

activateWithColor = async () => {
await ScreenGuardModule.register({
backgroundColor: '#DB4437',
timeAfterResume: 1000,
});
};

activateWithBlur = async () => {
await ScreenGuardModule.registerWithBlurView({
radius: 35,
timeAfterResume: 1000,
});
};

deactivate = async () => {
await ScreenGuardModule.unregister();
};

render() {
return (
<View>
<Text>Nội dung nhạy cảm</Text>
<Button title="Màu sắc" onPress={this.activateWithColor} />
<Button title="Làm mờ" onPress={this.activateWithBlur} />
<Button title="Hủy kích hoạt" onPress={this.deactivate} />
</View>
);
}
}

export default App;