├── .github ├── ISSUE_TEMPLATE │ ├── bug_report.md │ └── feature_request.md ├── PULL_REQUEST_TEMPLATE.md ├── dependabot.yml └── workflows │ ├── codeql-analysis.yml │ ├── main.yml │ └── nuget.yml ├── .gitignore ├── CODE_OF_CONDUCT.md ├── CONTRIBUTING.md ├── Cleanup_Solution_For_Deployment.bat ├── GitHubPackages ├── SourceAdd.cmd ├── nuget.exe └── publish.cmd ├── LICENSE ├── README.md ├── SECURITY.md ├── Sample └── Direct Maui │ ├── LocalNotification.Sample.sln │ └── LocalNotification.Sample │ ├── App.xaml │ ├── App.xaml.cs │ ├── AppShell.xaml │ ├── AppShell.xaml.cs │ ├── LocalNotification.Sample.csproj │ ├── MainPage.xaml │ ├── MainPage.xaml.cs │ ├── MauiProgram.cs │ ├── NotificationPage.xaml │ ├── NotificationPage.xaml.cs │ ├── Platforms │ ├── Android │ │ ├── AndroidManifest.xml │ │ ├── MainActivity.cs │ │ ├── MainApplication.cs │ │ ├── ManifestInfo.cs │ │ └── Resources │ │ │ ├── raw │ │ │ └── good_things_happen.mp3 │ │ │ └── values │ │ │ └── colors.xml │ ├── Windows │ │ ├── App.xaml │ │ ├── App.xaml.cs │ │ ├── Package.appxmanifest │ │ └── app.manifest │ └── iOS │ │ ├── AppDelegate.cs │ │ ├── CustomUserNotificationCenterDelegate.cs │ │ ├── Info.plist │ │ ├── Program.cs │ │ └── Resources │ │ └── good_things_happen.aiff │ └── Resources │ ├── AppIcon │ ├── appicon.svg │ └── appiconfg.svg │ ├── Fonts │ ├── OpenSans-Regular.ttf │ └── OpenSans-Semibold.ttf │ ├── Images │ ├── dotnet_bot.svg │ ├── i2.png │ ├── i3.png │ └── icon1.png │ ├── Raw │ ├── AboutAssets.txt │ └── appicon1.png │ ├── Splash │ └── splash.svg │ └── Styles │ ├── Colors.xaml │ └── Styles.xaml ├── Screenshots ├── AndroidNotificationAction.png ├── AndroidNotificationIcon.png ├── SoundFileMap.png ├── iOSNotificationAction.png ├── icon.png ├── icon64.png └── screenRecord.gif ├── Source ├── Plugin.LocalNotification.sln └── Plugin.LocalNotification │ ├── AndroidOption │ ├── AndroidAction.cs │ ├── AndroidAlarmType.cs │ ├── AndroidColor.cs │ ├── AndroidGeofenceOptions.cs │ ├── AndroidIcon.cs │ ├── AndroidImportance.cs │ ├── AndroidLaunch.cs │ ├── AndroidLocalNotificationBuilder.cs │ ├── AndroidNotificationPermission.cs │ ├── AndroidOptions.cs │ ├── AndroidPendingIntentFlags.cs │ ├── AndroidPriority.cs │ ├── AndroidProgressBar.cs │ ├── AndroidScheduleOptions.cs │ ├── AndroidVisibilityType.cs │ ├── IAndroidLocalNotificationBuilder.cs │ ├── NotificationChannelGroupRequest.cs │ └── NotificationChannelRequest.cs │ ├── EventArgs │ ├── NotificationActionEventArgs.cs │ ├── NotificationEventArgs.cs │ └── NotificationEventReceivingArgs.cs │ ├── ILocalNotificationBuilder.cs │ ├── INotificationService.cs │ ├── Json │ ├── INotificationSerializer.cs │ └── NotificationSerializer.cs │ ├── LocalNotificationBuilder.cs │ ├── LocalNotificationCenter.cs │ ├── LocalNotificationExtensions.cs │ ├── LocalNotificationInitializeService.cs │ ├── NotificationAction.cs │ ├── NotificationCategory.cs │ ├── NotificationCategoryType.cs │ ├── NotificationImage.cs │ ├── NotificationPermission.cs │ ├── NotificationRepeat.cs │ ├── NotificationRequest.cs │ ├── NotificationRequestGeofence.cs │ ├── NotificationRequestSchedule.cs │ ├── Platforms │ ├── Android │ │ ├── GeofenceTransitionsIntentReceiver.cs │ │ ├── LocalNotificationCenter.cs │ │ ├── ManifestInfo.cs │ │ ├── NotificationActionReceiver.cs │ │ ├── NotificationPerms.cs │ │ ├── NotificationRepository.cs │ │ ├── NotificationServiceImpl.cs │ │ ├── PlatformExtensions.cs │ │ └── ScheduledAlarmReceiver.cs │ ├── Generic │ │ └── NotificationServiceImpl.cs │ ├── Windows │ │ ├── LocalNotificationCenter.cs │ │ ├── NotificationRepository.cs │ │ └── NotificationServiceImpl.cs │ └── iOS │ │ ├── LocalNotificationCenter.cs │ │ ├── ManifestInfo.cs │ │ ├── NotificationServiceImpl.cs │ │ ├── PlatformExtensions.cs │ │ └── UserNotificationCenterDelegate.cs │ ├── Plugin.LocalNotification.csproj │ ├── Plugin.LocalNotification.ruleset │ ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx │ ├── WindowsOption │ ├── WindowsAction.cs │ └── WindowsOptions.cs │ └── iOSOption │ ├── IiOSLocalNotificationBuilder.cs │ ├── iOSAction.cs │ ├── iOSActionIcon.cs │ ├── iOSActionIconType.cs │ ├── iOSActionType.cs │ ├── iOSAuthorizationOptions.cs │ ├── iOSGeofenceOptions.cs │ ├── iOSLocalNotificationBuilder.cs │ ├── iOSLocationAuthorization.cs │ ├── iOSNotificationPermission.cs │ ├── iOSOptions.cs │ └── iOSPriority.cs └── UnitTests └── LocalNotification.UnitTests ├── GlobalUsing.cs ├── LocalNotification.UnitTests.csproj ├── Resources └── dotnet_logo.png ├── Tests ├── LocalNotificationCenterTests.cs └── NotificationImageTests.cs └── xunit.runner.json /.github/ISSUE_TEMPLATE/bug_report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug report 3 | about: Create a report to help us improve 4 | title: '' 5 | labels: bug 6 | assignees: thudugala 7 | 8 | --- 9 | 10 | **Describe the bug** 11 | A clear and concise description of what the bug is. 12 | 13 | **To Reproduce** 14 | Steps to reproduce the behavior: 15 | 1. Go to '...' 16 | 2. Click on '....' 17 | 3. Scroll down to '....' 18 | 4. See error 19 | 20 | **Expected behavior** 21 | A clear and concise description of what you expected to happen. 22 | 23 | **Screenshots** 24 | If applicable, add screenshots to help explain your problem. 25 | 26 | **Platform (please complete the following information):** 27 | - OS: [e.g. iOS] 28 | - Version [e.g. 22] 29 | 30 | **Smartphone (please complete the following information):** 31 | - Device: [e.g. iPhone6] 32 | - OS: [e.g. iOS8.1] 33 | - Version [e.g. 22] 34 | 35 | **Additional context** 36 | Add any other context about the problem here. 37 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature_request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature request 3 | about: Suggest an idea for this project 4 | title: '' 5 | labels: enhancement 6 | assignees: '' 7 | 8 | --- 9 | 10 | **Is your feature request related to a problem? Please describe.** 11 | A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] 12 | 13 | **Describe the solution you'd like** 14 | A clear and concise description of what you want to happen. 15 | 16 | **Describe alternatives you've considered** 17 | A clear and concise description of any alternative solutions or features you've considered. 18 | 19 | **Additional context** 20 | Add any other context or screenshots about the feature request here. 21 | -------------------------------------------------------------------------------- /.github/PULL_REQUEST_TEMPLATE.md: -------------------------------------------------------------------------------- 1 | ### What does this PR do? 2 | 3 | 4 | ##### Why are we doing this? Any context or related work? 5 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # To get started with Dependabot version updates, you'll need to specify which 2 | # package ecosystems to update and where the package manifests are located. 3 | # Please see the documentation for all configuration options: 4 | # https://help.github.com/github/administering-a-repository/configuration-options-for-dependency-updates 5 | 6 | version: 2 7 | updates: 8 | - package-ecosystem: "nuget" # See documentation for possible values 9 | directory: "/Sample/Direct/LocalNotification.Sample.Android" # Location of package manifests 10 | schedule: 11 | interval: "daily" 12 | 13 | - package-ecosystem: "nuget" # See documentation for possible values 14 | directory: "/Sample/Direct/LocalNotification.Sample.iOS" # Location of package manifests 15 | schedule: 16 | interval: "daily" 17 | -------------------------------------------------------------------------------- /.github/workflows/codeql-analysis.yml: -------------------------------------------------------------------------------- 1 | # For most projects, this workflow file will not need changing; you simply need 2 | # to commit it to your repository. 3 | # 4 | # You may wish to alter this file to override the set of languages analyzed, 5 | # or to provide custom queries or build logic. 6 | # 7 | # ******** NOTE ******** 8 | # We have attempted to detect the languages in your repository. Please check 9 | # the `language` matrix defined below to confirm you have the correct set of 10 | # supported CodeQL languages. 11 | # 12 | name: "CodeQL" 13 | 14 | on: 15 | push: 16 | branches: [ master ] 17 | pull_request: 18 | # The branches below must be a subset of the branches above 19 | branches: [ master ] 20 | schedule: 21 | - cron: '35 0 * * 3' 22 | 23 | jobs: 24 | analyze: 25 | name: Analyze 26 | runs-on: ubuntu-latest 27 | permissions: 28 | actions: read 29 | contents: read 30 | security-events: write 31 | 32 | strategy: 33 | fail-fast: false 34 | matrix: 35 | language: [ 'csharp' ] 36 | # CodeQL supports [ 'cpp', 'csharp', 'go', 'java', 'javascript', 'python', 'ruby' ] 37 | # Learn more about CodeQL language support at https://git.io/codeql-language-support 38 | 39 | steps: 40 | - name: Checkout repository 41 | uses: actions/checkout@v2 42 | 43 | # Initializes the CodeQL tools for scanning. 44 | - name: Initialize CodeQL 45 | uses: github/codeql-action/init@v1 46 | with: 47 | languages: ${{ matrix.language }} 48 | # If you wish to specify custom queries, you can do so here or in a config file. 49 | # By default, queries listed here will override any specified in a config file. 50 | # Prefix the list here with "+" to use these queries and those in the config file. 51 | # queries: ./path/to/local/query, your-org/your-repo/queries@main 52 | 53 | # Autobuild attempts to build any compiled languages (C/C++, C#, or Java). 54 | # If this step fails, then you should remove it and run the build manually (see below) 55 | - name: Autobuild 56 | uses: github/codeql-action/autobuild@v1 57 | 58 | # ℹ️ Command-line programs to run using the OS shell. 59 | # 📚 https://git.io/JvXDl 60 | 61 | # ✏️ If the Autobuild fails above, remove it and uncomment the following three lines 62 | # and modify them (or add more) to build your code if your project 63 | # uses a compiled language 64 | 65 | #- run: | 66 | # make bootstrap 67 | # make release 68 | 69 | - name: Perform CodeQL Analysis 70 | uses: github/codeql-action/analyze@v1 71 | -------------------------------------------------------------------------------- /.github/workflows/main.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | # MAUI Android Build 7 | build-android: 8 | runs-on: windows-latest 9 | name: Android Build 10 | steps: 11 | 12 | - name: Checkout 13 | uses: actions/checkout@v4.2.2 14 | 15 | - name: Setup .NET 9 16 | uses: actions/setup-dotnet@v4.3.0 17 | with: 18 | dotnet-version: 9.x 19 | 20 | - uses: actions/setup-java@4.7.0 21 | with: 22 | distribution: 'microsoft' 23 | java-version: '17' 24 | 25 | - name: Install MAUI Workload 26 | run: dotnet workload install maui --ignore-failed-sources 27 | 28 | - name: Restore Dependencies 29 | run: dotnet restore 'Sample/Direct Maui/LocalNotification.Sample/LocalNotification.Sample.csproj' 30 | 31 | - name: Build MAUI Android 32 | run: dotnet publish 'Sample/Direct Maui/LocalNotification.Sample/LocalNotification.Sample.csproj' -c Release -f net9.0-android --no-restore 33 | 34 | - name: Upload Android Artifact 35 | uses: actions/upload-artifact@v4.6.0 36 | with: 37 | name: mauibeach-android-ci-build 38 | path: 'Sample/Direct Maui/LocalNotification.Sample/bin/Release/net8.0-android/*Signed.a*' 39 | 40 | # MAUI iOS Build 41 | build-ios: 42 | runs-on: macos-latest 43 | name: iOS Build 44 | steps: 45 | 46 | - name: Checkout 47 | uses: actions/checkout@v4.2.2 48 | 49 | - name: Setup .NET 9 50 | uses: actions/setup-dotnet@v4.3.0 51 | with: 52 | dotnet-version: 9.x 53 | 54 | - name: Install MAUI Workload 55 | run: dotnet workload install maui --ignore-failed-sources 56 | 57 | - name: Set XCode Version 58 | shell: bash 59 | run: | 60 | sudo xcode-select -s "/Applications/Xcode_16.2.app" 61 | echo "MD_APPLE_SDK_ROOT=/Applications/Xcode_16.2.app" >> $GITHUB_ENV 62 | 63 | - name: Install iOS Simulators 64 | run: | 65 | sudo xcode-select --switch /Applications/Xcode_16.2.app 66 | sudo xcodebuild -runFirstLaunch 67 | sudo xcrun simctl list 68 | sudo xcrun simctl create "iPhone 16" com.apple.CoreSimulator.SimDeviceType.iPhone-16 com.apple.CoreSimulator.SimRuntime.iOS-16-2 69 | 70 | - name: Restore Dependencies 71 | run: dotnet restore 'Sample/Direct Maui/LocalNotification.Sample/LocalNotification.Sample.csproj' 72 | 73 | - name: Build MAUI iOS 74 | run: dotnet build 'Sample/Direct Maui/LocalNotification.Sample/LocalNotification.Sample.csproj' -c Release -f net9.0-ios --no-restore /p:buildForSimulator=True /p:packageApp=True /p:ArchiveOnBuild=False 75 | 76 | - name: Upload iOS Artifact 77 | uses: actions/upload-artifact@v4.6.0 78 | with: 79 | name: mauibeach-ios-ci-build 80 | path: 'Sample/Direct Maui/LocalNotification.Sample/bin/Release/net8.0-ios/iossimulator-x64/**/*.app' 81 | -------------------------------------------------------------------------------- /.github/workflows/nuget.yml: -------------------------------------------------------------------------------- 1 | name: Nuget Build 2 | 3 | on: [push] 4 | 5 | jobs: 6 | nuget: 7 | runs-on: windows-latest 8 | 9 | steps: 10 | - uses: actions/checkout@v4.2.2 11 | 12 | - name: Setup .NET 9 13 | uses: actions/setup-dotnet@v4.3.0 14 | with: 15 | dotnet-version: 9.x 16 | 17 | - name: Install MAUI Workloads 18 | run: | 19 | dotnet workload install android --ignore-failed-sources 20 | dotnet workload install ios --ignore-failed-sources 21 | dotnet workload install maui --ignore-failed-sources 22 | 23 | - name: Add private GitHub registry to NuGet 24 | run: dotnet nuget add source "https://nuget.pkg.github.com/thudugala/index.json" --name "GitHub" --username thudugala --password ${{ secrets.GITHUB_TOKEN }} 25 | 26 | - name : restore Plugin.LocalNotification.sln 27 | run: dotnet restore Source/Plugin.LocalNotification.sln 28 | 29 | - name: build Plugin.LocalNotification.csproj 30 | run: dotnet build Source/Plugin.LocalNotification/Plugin.LocalNotification.csproj --configuration Release 31 | 32 | - uses: actions/upload-artifact@v4.6.0 33 | with: 34 | name: Plugin.LocalNotification 35 | path: Source/Plugin.LocalNotification/bin/Release/ 36 | 37 | 38 | 39 | - name: Push generated package to GitHub registry 40 | run: dotnet nuget push "**/*.nupkg" --api-key ${{ secrets.Elvin_Package_Registry }} --source "GitHub" --skip-duplicate 41 | 42 | -------------------------------------------------------------------------------- /CODE_OF_CONDUCT.md: -------------------------------------------------------------------------------- 1 | # Contributor Covenant Code of Conduct 2 | 3 | ## Our Pledge 4 | 5 | In the interest of fostering an open and welcoming environment, we as 6 | contributors and maintainers pledge to making participation in our project and 7 | our community a harassment-free experience for everyone, regardless of age, body 8 | size, disability, ethnicity, sex characteristics, gender identity and expression, 9 | level of experience, education, socio-economic status, nationality, personal 10 | appearance, race, religion, or sexual identity and orientation. 11 | 12 | ## Our Standards 13 | 14 | Examples of behavior that contributes to creating a positive environment 15 | include: 16 | 17 | * Using welcoming and inclusive language 18 | * Being respectful of differing viewpoints and experiences 19 | * Gracefully accepting constructive criticism 20 | * Focusing on what is best for the community 21 | * Showing empathy towards other community members 22 | 23 | Examples of unacceptable behavior by participants include: 24 | 25 | * The use of sexualized language or imagery and unwelcome sexual attention or 26 | advances 27 | * Trolling, insulting/derogatory comments, and personal or political attacks 28 | * Public or private harassment 29 | * Publishing others' private information, such as a physical or electronic 30 | address, without explicit permission 31 | * Other conduct which could reasonably be considered inappropriate in a 32 | professional setting 33 | 34 | ## Our Responsibilities 35 | 36 | Project maintainers are responsible for clarifying the standards of acceptable 37 | behavior and are expected to take appropriate and fair corrective action in 38 | response to any instances of unacceptable behavior. 39 | 40 | Project maintainers have the right and responsibility to remove, edit, or 41 | reject comments, commits, code, wiki edits, issues, and other contributions 42 | that are not aligned to this Code of Conduct, or to ban temporarily or 43 | permanently any contributor for other behaviors that they deem inappropriate, 44 | threatening, offensive, or harmful. 45 | 46 | ## Scope 47 | 48 | This Code of Conduct applies both within project spaces and in public spaces 49 | when an individual is representing the project or its community. Examples of 50 | representing a project or community include using an official project e-mail 51 | address, posting via an official social media account, or acting as an appointed 52 | representative at an online or offline event. Representation of a project may be 53 | further defined and clarified by project maintainers. 54 | 55 | ## Enforcement 56 | 57 | Instances of abusive, harassing, or otherwise unacceptable behavior may be 58 | reported by contacting the project team at elvin@outlook.co.nz. All 59 | complaints will be reviewed and investigated and will result in a response that 60 | is deemed necessary and appropriate to the circumstances. The project team is 61 | obligated to maintain confidentiality with regard to the reporter of an incident. 62 | Further details of specific enforcement policies may be posted separately. 63 | 64 | Project maintainers who do not follow or enforce the Code of Conduct in good 65 | faith may face temporary or permanent repercussions as determined by other 66 | members of the project's leadership. 67 | 68 | ## Attribution 69 | 70 | This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4, 71 | available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html 72 | 73 | [homepage]: https://www.contributor-covenant.org 74 | 75 | For answers to common questions about this code of conduct, see 76 | https://www.contributor-covenant.org/faq 77 | -------------------------------------------------------------------------------- /CONTRIBUTING.md: -------------------------------------------------------------------------------- 1 | # Contributing 2 | 3 | Thanks you for your interest in contributing to Plugin.LocalNotification 4 | 5 | ## Finding an issue to work on 6 | 7 | If you'd like to work on something that isn't in a current issue, especially if it would be a big change, 8 | please open a new issue for discussion! 9 | 10 | ## Bug Fixes 11 | 12 | Please fix all code analyzer issues before a pull request. 13 | -------------------------------------------------------------------------------- /Cleanup_Solution_For_Deployment.bat: -------------------------------------------------------------------------------- 1 | del /s /ah /f *.suo 2 | del /s /f *.user 3 | del /s /f *.cache 4 | del /s /f *.scc 5 | del /s /f *.vssscc 6 | del /s /f *.vspscc 7 | del /s /f *.keep 8 | del /s /ah /f vssver2.scc 9 | 10 | rd /s /q bin obj ClientBin _Resharper.* _Upgrade* 11 | 12 | del dirs.txt 13 | dir /s /b /ad bin > dirs.txt 14 | dir /s /b /ad obj >> dirs.txt 15 | dir /s /b /ad ClientBin >> dirs.txt 16 | dir /s /b /ad _Resharper.* >> dirs.txt 17 | dir /s /b /ad _Upgrade* >> dirs.txt 18 | 19 | for /f "delims=;" %%i in (dirs.txt) DO rd /s /q "%%i" 20 | del dirs.txt 21 | -------------------------------------------------------------------------------- /GitHubPackages/SourceAdd.cmd: -------------------------------------------------------------------------------- 1 | nuget source Add -Name "GitHub" -Source "https://nuget.pkg.github.com/thudugala/index.json" -UserName thudugala -Password GH_TOKEN -------------------------------------------------------------------------------- /GitHubPackages/nuget.exe: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/thudugala/Plugin.LocalNotification/a19ff2efbe3ded88deeb0e7af4981af3067af374/GitHubPackages/nuget.exe -------------------------------------------------------------------------------- /GitHubPackages/publish.cmd: -------------------------------------------------------------------------------- 1 | nuget push "Plugin.LocalNotification.4.1.0.nupkg" -Source "GitHub" 2 | 3 | nuget push "Plugin.LocalNotification.4.1.0.snupkg" -Source "GitHub" -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018 Elvin (Tharindu) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | ![icon64](https://user-images.githubusercontent.com/4112014/139563161-b7f3cdba-e161-4f6c-80ae-45f0253c4340.png) 2 | 3 | ![CI](https://github.com/thudugala/Plugin.LocalNotification/workflows/CI/badge.svg?branch=master) 4 | [![NuGet](https://img.shields.io/nuget/v/Plugin.LocalNotification.svg)](https://www.nuget.org/packages/Plugin.LocalNotification/) 5 | [![NuGet](https://img.shields.io/nuget/dt/Plugin.LocalNotification.svg)](https://www.nuget.org/packages/Plugin.LocalNotification/) 6 | 7 | # Plugin.LocalNotification 8 | The local notification plugin provides a way to show local notifications from Xamarin.Forms / .Net MAUI apps. 9 | 10 | # Setup 11 | 12 | - `Plugin.LocalNotification` Available on NuGet: https://www.nuget.org/packages/Plugin.LocalNotification 13 | - #### .Net MAUI 14 | - Install Version 10.0.0 above 15 | - Install into your project 16 | - #### Xamarin.Forms (Support ended on May 1, 2024) 17 | - - Install Version 11.0.0 below 18 | - Install into your platform-specific projects (iOS/Android), and any .NET Standard 2.0/2.1 projects required for your app. 19 | 20 | ## Platform Support 21 | 22 | | Feature | Xamarin.iOS | Xamarin.Android | net8.0-ios (>= 11) | net8.0-android (>= 11) | 23 | | ----------------------------- | ----------- | --------------- | ------------------ | ---------------------- | 24 | | Build SDK | >= 10 | >= API 31 | >= 16 | >= API 34 | 25 | | Supported OS Version | >= 10 | >= API 19 | >= 11 | >= API 21 | 26 | | Title | ✅ | ✅ | ✅ | ✅ | 27 | | Description | ✅ | ✅ | ✅ | ✅ | 28 | | Subtitle | ✅ | ✅ | ✅ | ✅ | 29 | | [Schedule](https://github.com/thudugala/Plugin.LocalNotification/wiki/3.-Scheduled-Android-notifications) | ✅ | ✅ | ✅ | ✅ | 30 | | [Repeat](https://github.com/thudugala/Plugin.LocalNotification/wiki/4.-Repeat-Notification) | ✅ | ✅ | ✅ | ✅ | 31 | | [Custom Sounds](https://github.com/thudugala/Plugin.LocalNotification/wiki/Notification-with-a-Sound-File) | ✅ | ✅ | ✅ | ✅ | 32 | | Images | ✅ | ✅ | ✅ | ✅ | 33 | | [Notification Actions](https://github.com/thudugala/Plugin.LocalNotification/wiki/5.-Notification-with-Action) | ✅ | ✅ | ✅ | ✅ | 34 | | Clear Delivered Notifications | ✅ | ✅ | ✅ | ✅ | 35 | | Get Pending Notifications | ✅ | ✅ | ✅ | ✅ | 36 | | Get Delivered Notifications | ✅ | ✅ | ✅ | ✅ | 37 | | [Location Notifications](https://github.com/thudugala/Plugin.LocalNotification/wiki/Location-Notifications) | ✅ | ✅ | ✅ | ✅ | 38 | 39 | # Usage 40 | 41 | - [Xamarin.Forms](https://github.com/thudugala/Plugin.LocalNotification/wiki#xamarinforms-support-ended-on-may-1-2024) 42 | - [.Net MAUI](https://github.com/thudugala/Plugin.LocalNotification/wiki/1.-Usage-10.0.0--.Net-MAUI) 43 | 44 | # Screen Record 45 | 46 | Screen Record 47 | 48 | # Video 49 | 50 | ### Xamarin.Forms (Support ended on May 1, 2024) 51 | [![Local Push Notifications in Xamarin.Forms](https://img.youtube.com/vi/-Nj_TRPlx-8/0.jpg)](https://www.youtube.com/watch?v=-Nj_TRPlx-8) 52 | 53 | ### .Net MAUI 54 | [![Local Push Notifications in .Net MAUI](https://img.youtube.com/vi/dWdXXGa1_hI/0.jpg)](https://www.youtube.com/watch?v=dWdXXGa1_hI) 55 | 56 | # SourceLink Support 57 | 58 | In Visual Studio, confirm that SourceLink is enabled. 59 | Also, Turn off "Just My Code" since, well, this isn't your code. 60 | 61 | https://docs.microsoft.com/en-us/dotnet/standard/library-guidance/sourcelink 62 | 63 | # Limitations 64 | 65 | Only support iOS and Android for the moment. 66 | 67 | # Contributing 68 | 69 | Contributions are welcome. Feel free to file issues and pull requests on the repo and they'll be reviewed as time permits. 70 | 71 | ## Thank you 72 | 73 | - Thank you for the Icons by [DinosoftLabs](https://www.iconfinder.com/dinosoftlabs) and [Iconic Hub](https://www.iconfinder.com/iconic_hub) 74 | - Thank you for the sound file by [Notification sounds](https://notificationsounds.com/notification-sounds/good-things-happen-547) 75 | - Thank you for the tutorial video by [Gerald Versluis](https://www.youtube.com/channel/UCBBZ2kXWmd8eXlHg2wEaClw) 76 | -------------------------------------------------------------------------------- /SECURITY.md: -------------------------------------------------------------------------------- 1 | # Security Policy 2 | 3 | ## Supported Versions 4 | 5 | Use this section to tell people about which versions of your project are 6 | currently being supported with security updates. 7 | 8 | | Version | Supported | 9 | | ------- | ------------------ | 10 | | 10.x.x | :white_check_mark: | 11 | | < 10.0.0 | :x: | 12 | 13 | ## Reporting a Vulnerability 14 | 15 | Use this section to tell people how to report a vulnerability. 16 | 17 | Tell them where to go, how often they can expect to get an update on a 18 | reported vulnerability, what to expect if the vulnerability is accepted or 19 | declined, etc. 20 | -------------------------------------------------------------------------------- /Sample/Direct Maui/LocalNotification.Sample.sln: -------------------------------------------------------------------------------- 1 |  2 | Microsoft Visual Studio Solution File, Format Version 12.00 3 | # Visual Studio Version 17 4 | VisualStudioVersion = 17.0.31611.283 5 | MinimumVisualStudioVersion = 10.0.40219.1 6 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LocalNotification.Sample", "LocalNotification.Sample\LocalNotification.Sample.csproj", "{0178E998-AF38-446B-B49E-2E9ECFC411DB}" 7 | EndProject 8 | Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "Plugin.LocalNotification", "..\..\Source\Plugin.LocalNotification\Plugin.LocalNotification.csproj", "{EE7B30C7-5307-4B01-A194-5ED815F2DF85}" 9 | EndProject 10 | Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LocalNotification.UnitTests", "..\..\UnitTests\LocalNotification.UnitTests\LocalNotification.UnitTests.csproj", "{A939D821-32AE-EF0C-8ADB-7C5917E17072}" 11 | EndProject 12 | Global 13 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 14 | Debug|Any CPU = Debug|Any CPU 15 | Release|Any CPU = Release|Any CPU 16 | EndGlobalSection 17 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 18 | {0178E998-AF38-446B-B49E-2E9ECFC411DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 19 | {0178E998-AF38-446B-B49E-2E9ECFC411DB}.Debug|Any CPU.Build.0 = Debug|Any CPU 20 | {0178E998-AF38-446B-B49E-2E9ECFC411DB}.Debug|Any CPU.Deploy.0 = Debug|Any CPU 21 | {0178E998-AF38-446B-B49E-2E9ECFC411DB}.Release|Any CPU.ActiveCfg = Release|Any CPU 22 | {0178E998-AF38-446B-B49E-2E9ECFC411DB}.Release|Any CPU.Build.0 = Release|Any CPU 23 | {0178E998-AF38-446B-B49E-2E9ECFC411DB}.Release|Any CPU.Deploy.0 = Release|Any CPU 24 | {EE7B30C7-5307-4B01-A194-5ED815F2DF85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 25 | {EE7B30C7-5307-4B01-A194-5ED815F2DF85}.Debug|Any CPU.Build.0 = Debug|Any CPU 26 | {EE7B30C7-5307-4B01-A194-5ED815F2DF85}.Release|Any CPU.ActiveCfg = Release|Any CPU 27 | {EE7B30C7-5307-4B01-A194-5ED815F2DF85}.Release|Any CPU.Build.0 = Release|Any CPU 28 | {A939D821-32AE-EF0C-8ADB-7C5917E17072}.Debug|Any CPU.ActiveCfg = Debug|Any CPU 29 | {A939D821-32AE-EF0C-8ADB-7C5917E17072}.Debug|Any CPU.Build.0 = Debug|Any CPU 30 | {A939D821-32AE-EF0C-8ADB-7C5917E17072}.Release|Any CPU.ActiveCfg = Release|Any CPU 31 | {A939D821-32AE-EF0C-8ADB-7C5917E17072}.Release|Any CPU.Build.0 = Release|Any CPU 32 | EndGlobalSection 33 | GlobalSection(SolutionProperties) = preSolution 34 | HideSolutionNode = FALSE 35 | EndGlobalSection 36 | GlobalSection(ExtensibilityGlobals) = postSolution 37 | SolutionGuid = {61F7FB11-1E47-470C-91E2-47F8143E1572} 38 | EndGlobalSection 39 | EndGlobal 40 | -------------------------------------------------------------------------------- /Sample/Direct Maui/LocalNotification.Sample/App.xaml: -------------------------------------------------------------------------------- 1 |  2 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Sample/Direct Maui/LocalNotification.Sample/App.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace LocalNotification.Sample; 2 | 3 | public partial class App : Application 4 | { 5 | private readonly MainPage mainPage; 6 | 7 | public App(MainPage mainPage) 8 | { 9 | InitializeComponent(); 10 | this.mainPage = mainPage; 11 | } 12 | 13 | protected override Window CreateWindow(IActivationState? activationState) 14 | { 15 | return new Window(new NavigationPage(mainPage)); 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /Sample/Direct Maui/LocalNotification.Sample/AppShell.xaml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /Sample/Direct Maui/LocalNotification.Sample/AppShell.xaml.cs: -------------------------------------------------------------------------------- 1 | namespace LocalNotification.Sample; 2 | 3 | public partial class AppShell : Shell 4 | { 5 | public AppShell() 6 | { 7 | InitializeComponent(); 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /Sample/Direct Maui/LocalNotification.Sample/LocalNotification.Sample.csproj: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | net9.0-android;net9.0-ios 5 | 6 | 7 | 8 | Exe 9 | LocalNotification.Sample 10 | true 11 | true 12 | enable 13 | enable 14 | 15 | XC0103 16 | true 17 | 18 | en 19 | 20 | 21 | LocalNotification.Sample 22 | 23 | 24 | com.companyname.localnotification.sample 25 | 26 | 27 | 12.0 28 | 12 29 | 30 | 15.0 31 | 21.0 32 | 10.0.17763.0 33 | 34 | 10.0.17763.0 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | -------------------------------------------------------------------------------- /Sample/Direct Maui/LocalNotification.Sample/MainPage.xaml: -------------------------------------------------------------------------------- 1 |  2 | 5 | 6 | 7 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 21 | 22 | 25 | 26 | 29 | 30 | 33 |