appwin_core

appwin_core is the foundation of the Appwin SDKs for Flutter. It carries what every Appwin product shares: the device identity, the authenticated session and the network client. You configure it once, and the products you installed use it.

Appwin is an engagement platform for mobile app studios. It puts an in-app support messenger, a community feed and push notifications inside your app, all rendered natively, and gives your team one dashboard to run them.

Features

  • ✅ One configure for every Appwin product in your app, whatever the number
  • ✅ Anonymous by default - a device is known without asking anyone to sign up
  • ✅ identify attaches your own user id when someone signs in
  • ✅ One identity across products - sign in once, recognised in Support and Community
  • ✅ logout clears the person without losing the device
  • ✅ Native under the hood - Swift on iOS, Kotlin on Android

Installation

flutter pub add appwin_core

Most apps never run that command. Every Appwin product declares appwin_core as a dependency and re-exports it, so installing appwin_support or appwin_community already gives you AppwinCore under the same import. Add it directly only if you want the identity API with no product at all.

Requirements

Platform Minimum
iOS 16.0
Android 7.0 (API 24)

Nothing to add to your Podfile or to your Gradle repositories: the plugin declares the native SDKs it needs, from CocoaPods and Maven Central.

Getting started

Configure once, at launch:

void main() async {
  WidgetsFlutterBinding.ensureInitialized();
  await AppwinCore.instance.configure(appId: 'your-app-id');
  runApp(const MyApp());
}

When someone signs in to your app:

await AppwinCore.instance.identify(
  user.id,
  attributes: AppwinUserAttributes(email: user.email, name: user.displayName),
);

One call: the id is kept on the device and the session reopens under it. What you learn later goes through updateUser:

await AppwinCore.instance.updateUser(AppwinUserAttributes(plan: 'premium'));

On sign-out:

await AppwinCore.instance.logout();

One configure, then one initialize() per product

configure prepares the foundation and checks nothing. Each product you install has its own initialize(), which asks the server whether that product may open for this app, and answers rather than throwing:

final support = await AppwinSupport.instance.initialize();
debugPrint('Appwin Support: $support');   // ready / unavailable(plan) / ...

if (support.isReady) {
  // Show your help button.
}

Gate your own entry point on that result: the SDK cannot hide your tab or your button, it does not own your navigation. The three products share one round trip and the verdict is cached on disk, so being offline falls back to the last known answer instead of closing a product you pay for.

Documentation

License

Proprietary. Use is reserved to studios holding a current Appwin contract.

Libraries

appwin_core
Foundation of the Appwin SDKs for Flutter.
appwin_core_method_channel
Default implementation of AppwinCorePlatform, over a method channel.
appwin_core_platform_interface
Platform contract behind AppwinCore.
appwin_init_result
The verdict a product's initialize() returns.
appwin_product
The Appwin products a verdict can be asked about.
appwin_user_attributes