Plugin.Maui.AppRating 1.0.0

There is a newer version of this package available.
See the version list below for details.
dotnet add package Plugin.Maui.AppRating --version 1.0.0                
NuGet\Install-Package Plugin.Maui.AppRating -Version 1.0.0                
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
<PackageReference Include="Plugin.Maui.AppRating" Version="1.0.0" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Plugin.Maui.AppRating --version 1.0.0                
#r "nuget: Plugin.Maui.AppRating, 1.0.0"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Plugin.Maui.AppRating as a Cake Addin
#addin nuget:?package=Plugin.Maui.AppRating&version=1.0.0

// Install Plugin.Maui.AppRating as a Cake Tool
#tool nuget:?package=Plugin.Maui.AppRating&version=1.0.0                

Plugin.Maui.AppRating

NuGet

Plugin.Maui.AppRating gives developers a fast and easy way to ask users to rate the app on the stores.

Platforms supported

Platform Version
.Net MAUI Android API 21+
.Net MAUI iOS iOS 11.0+

Installation

Plugin.Maui.AppRating is available via NuGet, grab the latest package and install it in your solution:

Install-Package Plugin.Maui.AppRating

In your MauiProgram class add the following using statement:

using Plugin.Maui.AppRating;

Finally, add the default instance of the plugin as a singleton to inject it in your code late:

builder.Services.AddSingleton<IAppRating>(AppRating.Default);

API Usage

Call the injected interface in any page or viewmodel to gain access to the APIs.

There are two main methods in the plugin: PerformInAppRateAsync and PerformRatingOnStoreAsync.

Android

/// <summary>
/// Perform rating without leaving the app.
/// </summary>
Task PerformInAppRateAsync();

This method will open an in-app review dialogue, using the packageName declared on the AndroidManifest file.

/// <summary>
/// Perform rating on the current OS store app or open the store page on browser.
/// </summary>
Task PerformRatingOnStoreAsync();

This method will open the Google Play app on the store page of your current application. Otherwise, it will try to open the store page on the browser.

If neither the store page nor the browser store page works, it will display an alert announcing the error.

packageName must be provided as a named argument to open the store page on the store app or browser.

Example
await _appRating.PerformRatingOnStoreAsync(packageName: "com.instagram.android");

iOS

/// <summary>
/// Perform rating without leaving the app.
/// </summary>
Task PerformInAppRateAsync();

For iOS: if the device current OS version is 10.3 or newer, this method will raise an in-app review popup of your current application, otherwise, it will display an alert announcing that it's not supported.

/// <summary>
/// Perform rating on the current OS store app or open the store page on browser.
/// </summary>
Task PerformRatingOnStoreAsync();

This method will open the App Store app on the store page of your current application. Otherwise, it will try to open the store page on the browser.

If the method fails. it will display an alert announcing the error.

applicationId property is the StoreId of your application and it must be provided as a named argument to open the store page on the store app or browser.

Example
await _appRating.PerformRatingOnStoreAsync(applicationId: "id389801252");

Usage

⚠️ Warning - You should be careful about how and when you ask users to rate your app, there may be penalties from stores. As for advice, I recommend using a counter on the app start and storage that count, then when the counter reaches a specific number, display a dialogue asking the users if they want to rate the app, if they decline the offer, reset the counter to ask them later, also leave the option to do it themselves.

public partial class MainPage : ContentPage
{
    private readonly IAppRating _appRating;

    // We are using the Instagram application as an example here
    private const string androidPackageName = "com.instagram.android";
    private const string iOSApplicationId = "id389801252";

    public MainPage(IAppRating appRating)
    {
        InitializeComponent();

        _appRating = appRating;

        if (!Preferences.Get("application_rated", false))
            Task.Run(() => CheckAppCountAndRate());
    }

    private async Task CheckAppCountAndRate()
    {
        if (Preferences.Get("application_counter",0) >= 5)
        {
            if (!await DisplayAlert("Rate this App!", "Are you enjoying the so far? Would you like to leave a review in the store?", "Yes", "No"))
            {
                Preferences.Set("application_counter", 0);

                return;
            }

            await RateApplicationInApp();
        }
    }

    private Task RateApplicationInApp()
    {
        Dispatcher.Dispatch(async () =>
        {
            await _appRating.PerformInAppRateAsync();
        });

        Preferences.Set("application_rated", true);

        return Task.CompletedTask;
    }

    private Task RateApplicationOnStore()
    {
        Dispatcher.Dispatch(async () =>
        {
            await _appRating.PerformRatingOnStoreAsync(packageName: androidPackageName, applicationId: iOSApplicationId);
        });

        Preferences.Set("application_rated", true);

        return Task.CompletedTask;
    }

    private void InAppRating_Clicked(object sender, EventArgs e)
    {
        Task.Run(RateApplicationInApp);
    }

    private void AppRateOnStore_Clicked(object sender, EventArgs e)
    {
        if (!Preferences.Get("application_rated", false))
            Task.Run(RateApplicationOnStore);
    }
}

Sample

Take a look at the AppRatingSample for fully detailed implementation of this plugin.

Contributions

Please, feel free to open an Issue if you found any bugs or submit a PR.

License

Plugin.Maui.AppRating is licensed under MIT.

Product Compatible and additional computed target framework versions.
.NET net7.0-android33.0 is compatible.  net7.0-ios16.1 is compatible.  net8.0-android was computed.  net8.0-ios was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

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 5,250 5/19/2024
1.1.0 5,671 5/7/2023
1.0.0 482 4/17/2023