For now you might disable RNPreventScreenshot.enableSecureView() in development mode (check DEV variable)
$ npm install react-native-screenshot-prevent --save
$ react-native link react-native-screenshot-prevent
- In XCode, in the project navigator, right click
Libraries
➜Add Files to [your project's name]
- Go to
node_modules
➜react-native-screenshot-prevent
and addRNScreenshotPrevent.xcodeproj
- In XCode, in the project navigator, select your project. Add
libRNScreenshotPrevent.a
to your project'sBuild Phases
➜Link Binary With Libraries
- Run your project (
Cmd+R
)<
- Open up
android/app/src/main/java/[...]/MainApplication.java
- Add
import com.killserver.screenshotprev.RNScreenshotPreventPackage;
to the imports at the top of the file - Add
new RNScreenshotPreventPackage()
to the list returned by thegetPackages()
method
- Append the following lines to
android/settings.gradle
:include ':react-native-screenshot-prevent' project(':react-native-screenshot-prevent').projectDir = new File(rootProject.projectDir, '../node_modules/react-native-screenshot-prevent/android')
- Insert the following lines inside the dependencies block in
android/app/build.gradle
:implementation project(':react-native-screenshot-prevent')
// sample code
import RNScreenshotPrevent, { addListener } from 'react-native-screenshot-prevent';
/* (IOS, Android) for android might be the only step to get secureView
* on IOS enables blurry view when app goes into inactive state
*/
RNPreventScreenshot.enabled(true/false);
/* (IOS) enableSecureView for IOS13+
* creates a hidden secureTextField which prevents Application UI capture on screenshots
*/
if(!__DEV__) RNPreventScreenshot.enableSecureView();
/* (IOS) disableSecureView for IOS13+
* remove a hidden secureTextField which prevents Application UI capture on screenshots
*/
if(!__DEV__) RNPreventScreenshot.disableSecureView();
/* (IOS) notification handler
* notifies when user has taken screenshot (yes, after taking) - you can show alert or do some actions
*
* @param {function} callback fn
* @returns object with .remove() method
*/
addListener(fn);
/** example using the listener */
useEffect(() => {
const subscription = RNPreventScreenshot.addListener(() => {
console.log('Screenshot taken');
showAlert({
title: 'Warning',
message: 'You have taken a screenshot of the app. This is prohibited due to security reasons.',
confirmText: 'I understand'
});
})
return () => {
subscription.remove();
}
}, []);