Plugin.Maui.ScreenSecurity
1.1.6
See the version list below for details.
dotnet add package Plugin.Maui.ScreenSecurity --version 1.1.6
NuGet\Install-Package Plugin.Maui.ScreenSecurity -Version 1.1.6
<PackageReference Include="Plugin.Maui.ScreenSecurity" Version="1.1.6" />
paket add Plugin.Maui.ScreenSecurity --version 1.1.6
#r "nuget: Plugin.Maui.ScreenSecurity, 1.1.6"
// Install Plugin.Maui.ScreenSecurity as a Cake Addin #addin nuget:?package=Plugin.Maui.ScreenSecurity&version=1.1.6 // Install Plugin.Maui.ScreenSecurity as a Cake Tool #tool nuget:?package=Plugin.Maui.ScreenSecurity&version=1.1.6
Plugin.Maui.ScreenSecurity
Plugin.Maui.ScreenSecurity
provides a seamless solution for preventing content exposure, as well as blocking screenshots and recordings within your .NET MAUI application
Platforms supported
Platform | Version |
---|---|
.Net MAUI Android | API 21+ |
.Net MAUI iOS | iOS 14+ |
Windows | 10.0.17763+ |
Version 1.1.6
What's new?
- Removed .Net6 support. ⚠️
- Added .Net8 support to all platforms.
- Fixed iOS 17 issues.
- Fixed screenshot not working on iOS 17+ issue, by changing the screenshot protection implementation, now a blank white or black (depending on the current OS theme) is added before taking the screenshot to cover the screen content. ❗
Click here to see the full Changelog!
Installation
Plugin.Maui.ScreenSecurity
is available via NuGet, grab the latest package and install it on your solution:
Install-Package Plugin.Maui.ScreenSecurity
In your MauiProgram
class add the following using
statement:
using Plugin.Maui.ScreenSecurity;
Finally, add the default instance of the plugin as a singleton to inject it in your code late:
builder.Services.AddSingleton<IScreenSecurity>(ScreenSecurity.Default);
⚠️ WARNING ⚠️
It's important to acknowledge that preventing users from taking screenshots or recordings of your app can be a challenging task and achieving complete prevention may not be feasible. It's worth noting that no method can entirely eliminate the possibility of your screen being captured through another physical device or a potential breach in the OS.
👉 It's also important to consider the impact on user experience when implementing any of these methods and striking a balance with the security concerns of your app.
API Usage
If you are still using version 1.0.0, please refer to the Legacy docs for the previous version.
The new unified API only have 2 methods: ActivateScreenSecurityProtection()
and DeactivateScreenSecurityProtection()
, with optional parameters that will be only applied to the iOS platform.
void ActivateScreenSecurityProtection();
When you activate this protection, your app's content will be safeguarded when it's sent to the Recents screen or the App Switcher. This helps ensure that sensitive information won't be exposed.
Behavior by platform:
- Android: provides enhanced protection for screen content by preventing exposure when the app is sent to the Background or displayed on the Recents screen. It also effectively prevents unauthorized screenshots or recordings from being captured.
- Windows: Prevents screenshots and recordings by obscuring the screen of the app.
- iOS: By default, it apply a blur layer when the app is sent to the Background or displayed on the App Switcher. Also enables the screenshot and screen recording protection.
void ActivateScreenSecurityProtection(bool blurScreenProtection, bool preventScreenshot, bool preventScreenRecording);
This method is similar to the previous method, but with parameters to change the default values in iOS:
blurScreenProtection
: Enable/disable screen blurring to prevent content visibility in the background. True by default.preventScreenshot
: Decide whether users can take screenshots of your app. True by default.preventScreenRecording
: Control whether users can record the screen while using your app. True by default.
void ActivateScreenSecurityProtection(ScreenProtectionOptions screenProtectionOptions);
This method is similar to the original method, but takes a ScreenProtectionOptions
parameter. This allows you to further customize the screen protection by specifying either a Color or an Image, along with the the screenshot and screen recording protection for iOS devices.
Note: If you set both Color and Image, it will only apply the one you declared first.
ScreenProtectionOptions
properties:
Color
: Represents a color in the form of a hexadecimal string and can be passed as an argument to customize the color layer. It supports formats such as#RGB
,#RGBA
,#RRGGBB
, or#RRGGBBAA
. Empty by default.Image
: The name of the image file along with its extension. In order to utilize this property, please follow these steps:- Save the image you intend to use inside the
Resources\Images
folder. - Ensure you refer to the .Net MAUI Image documentation for detailed instructions on how to accomplish this task effectively.
- ⚠️ If your app does not recognize the image after setting the build action to
MauiImage
, consider changing the build action toEmbedded resource
to ensure proper functionality.
- Save the image you intend to use inside the
PreventScreenshot
: Decide whether users can take screenshots of your app. True by default.PreventScreenRecording
: Control whether users can record the screen while using your app. True by default.
void DeactivateScreenSecurityProtection();
This method deactivates all screen security protection.
Usage Example
public partial class MainPage : ContentPage
{
private readonly IScreenSecurity _screenSecurity;
public MainPage(IScreenSecurity screenSecurity)
{
InitializeComponent();
_screenSecurity = screenSecurity;
}
protected override void OnAppearing()
{
base.OnAppearing();
// Activate the screen security protection with default settings
_screenSecurity.ActivateScreenSecurityProtection();
/*
// For changing iOS options, follow one of the next examples:
// Example 1: Customize with a specific color
var screenProtectionOptions = new ScreenProtectionOptions
{
HexColor = "#6C4675",
PreventScreenshot = true,
PreventScreenRecording = false
};
// Example 2: Customize with an image
var screenProtectionOptions = new ScreenProtectionOptions
{
Image = "protection_bg.png"
PreventScreenshot = false,
PreventScreenRecording = true
};
_screenSecurity.ActivateScreenSecurityProtection(screenProtectionOptions);
*/
}
protected override void OnDisappearing()
{
_screenSecurity.DeactivateScreenSecurityProtection();
base.OnDisappearing();
}
}
Sample
Refer to the ScreenSecuritySample for a comprehensive and detailed implementation of this plugin, providing you with a complete understanding of its usage.
Contributions
Please feel free to open an Issue if you encounter any bugs or submit a PR to contribute improvements or fixes. Your contributions are greatly appreciated.
License
The Plugin.Maui.ScreenSecurity is licensed under MIT.
Contributors
- Goran Karacic for the iOS 17 fix.
Product | Versions Compatible and additional computed target framework versions. |
---|---|
.NET | net7.0 is compatible. net7.0-android was computed. net7.0-android33.0 is compatible. net7.0-ios was computed. net7.0-ios16.1 is compatible. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net7.0-windows10.0.19041 is compatible. net8.0 is compatible. net8.0-android was computed. net8.0-android34.0 is compatible. net8.0-browser was computed. net8.0-ios was computed. net8.0-ios17.2 is compatible. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net8.0-windows10.0.19041 is compatible. |
-
net7.0
- No dependencies.
-
net7.0-android33.0
- No dependencies.
-
net7.0-ios16.1
- No dependencies.
-
net7.0-windows10.0.19041
- No dependencies.
-
net8.0
- Microsoft.Maui.Controls (>= 8.0.7)
- Microsoft.Maui.Controls.Compatibility (>= 8.0.7)
-
net8.0-android34.0
- No dependencies.
-
net8.0-ios17.2
- No dependencies.
-
net8.0-windows10.0.19041
- No dependencies.
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.
Version | Downloads | Last updated | |
---|---|---|---|
1.2.0 | 1,186 | 10/14/2024 | |
1.1.8-beta | 1,840 | 5/25/2024 | |
1.1.7-beta | 3,986 | 5/19/2024 | |
1.1.6 | 10,079 | 3/18/2024 | |
1.1.5 | 5,844 | 10/24/2023 | |
1.1.0 | 2,232 | 7/21/2023 | |
1.0.7-beta | 134 | 7/18/2023 | |
1.0.6-beta | 135 | 7/18/2023 | |
1.0.5-beta | 142 | 7/17/2023 | |
1.0.4-beta | 115 | 7/12/2023 | |
1.0.3-beta | 123 | 7/9/2023 | |
1.0.0 | 770 | 5/19/2023 |