Docs

.NET MAUI quickstart

WordsAreFlowing.Sdk.Maui adds the native store prompt to the .NET head: Google Play In-App Review on Android (API 24 and up) and StoreKit on iOS (15 and up). Everything on the .NET page — triggers, decisions, notes — works the same way here.

1. Install

dotnet add package WordsAreFlowing.Sdk.Maui

The packages are on nuget.org. This package brings in WordsAreFlowing.Sdk and WordsAreFlowing.Sdk.Core.

2. Register

In MauiProgram.cs, call AddWordsAreFlowingMaui. Its options are a WordsAreFlowingMauiOptions, which has every option of the .NET head plus one.

using WordsAreFlowing.Sdk.Maui;

builder.Services.AddWordsAreFlowingMaui(o =>
{
    o.ApiKey = "waf_live_…";
    o.AppVersion = AppInfo.VersionString;
#if DEBUG
    o.UseFakeReviewManager = true;   // Android debug builds only — never ship it
#endif
});

What it sets up for you:

Storage and the prompter are singletons, so a native lifecycle hook and a Blazor component share the same counters. As with the .NET head, a registration you make before this call wins.

3. The ask and the triggers

In a Blazor Hybrid app, use the FeedbackAsk component and TrackAsync exactly as on the .NET page. The package has no XAML control; a XAML-only app listens to DecisionMade and draws its own ask, then calls SubmitFeedbackAsync or DismissAskAsync.

var decision = await loop.TrackAsync("trip_finished");
// StorePromptFired: the platform was asked. Whether a sheet appeared, it does not say.

Android: Google Play In-App Review

The prompt comes from Google's com.google.android.play:review library. Play decides whether a dialog actually appears and never reports it, so StorePromptFired means "Play was asked", not "the user saw it".

The real review manager only succeeds for an app that has been installed from a Play track. A debug build that is on no track cannot succeed, so UseFakeReviewManager switches to Play's own FakeReviewManager, which reports success and shows nothing. Use it to exercise the path in debug builds. Never ship it set to true: your release users would never see a prompt. To see the real dialog, install from an internal testing track.

iOS: StoreKit

The SDK calls AppStore.RequestReview on iOS 16 and later, and SKStoreReviewController.RequestReview on iOS 15. Apple shows the sheet at most three times in 365 days, always shows it in development builds, and never shows it in TestFlight — a TestFlight build cannot prove the dialog. StoreKit does not report whether the sheet appeared either.

Caps

By default the SDK asks for the store prompt at most twice in any rolling 365 days on Android and three times on iOS. A rule's maxPerYear (1 to 3) replaces that default for its trigger, the MaxStorePromptsPerYear option can only lower the cap, and nothing ever goes above three. See the rules reference.