Manual Hosting
Manual hosting gives you full control when you can’t inherit from Shiny’s base classes — for example, when your app already has custom Application, AppDelegate, or Activity classes that you can’t change.
You call Host.Lifecycle methods directly from your existing platform code to hook Shiny into the native lifecycle.
-
Install the NuGet package
-
Build the host at app startup
Create and run the Shiny host as early as possible in your app’s lifecycle.
using Foundation;using UIKit;using Shiny.Hosting;namespace YourNamespace;public class AppDelegate : UIApplicationDelegate{public override bool FinishedLaunching(UIApplication application,NSDictionary launchOptions){var host = HostBuilder.Create();// Register your Shiny modules and services herehost.Build().Run();return base.FinishedLaunching(application, launchOptions);}}using System;using Android.App;using Android.Runtime;using Shiny.Hosting;namespace YourNamespace;[Application]public class MainApplication : Application{public MainApplication(IntPtr javaReference,JniHandleOwnership transfer): base(javaReference, transfer) {}public override void OnCreate(){base.OnCreate();var host = HostBuilder.Create();// Register your Shiny modules and services herehost.Build().Run();}} -
Wire up lifecycle callbacks
Forward platform events to
Host.Lifecyclefrom your existing classes.Add these to your
AppDelegate:// Required for HTTP Transferspublic override void HandleEventsForBackgroundUrl(UIApplication application,string sessionIdentifier,Action completionHandler){Host.Lifecycle.OnHandleEventsForBackgroundUrl(sessionIdentifier, completionHandler);}// Required for Push Notificationspublic override void RegisteredForRemoteNotifications(UIApplication application, NSData deviceToken){Host.Lifecycle.OnRegisteredForRemoteNotifications(deviceToken);}public override void FailedToRegisterForRemoteNotifications(UIApplication application, NSError error){Host.Lifecycle.OnFailedToRegisterForRemoteNotifications(error);}public override void DidReceiveRemoteNotification(UIApplication application,NSDictionary userInfo,Action<UIBackgroundFetchResult> completionHandler){Host.Lifecycle.OnDidReceiveRemoteNotification(userInfo, completionHandler);}// Required for deep links / universal linkspublic override bool ContinueUserActivity(UIApplication application,NSUserActivity userActivity,UIApplicationRestorationHandler completionHandler){Host.Lifecycle.OnContinueUserActivity(userActivity, completionHandler);return true;}Add these to your main Activity:
using Android.App;using Android.Content;using Android.Content.PM;using Android.Runtime;using AndroidX.AppCompat.App;using Shiny.Hosting;namespace YourNamespace;[IntentFilter(new[] {// Include if using Local NotificationsShiny.ShinyNotificationIntents.NotificationClickAction,// Include if using Push NotificationsShiny.ShinyPushIntents.NotificationClickAction})]public class MainActivity : AppCompatActivity{protected override void OnCreate(Bundle? savedInstanceState){base.OnCreate(savedInstanceState);Host.Lifecycle.OnActivityOnCreate(this, savedInstanceState);}protected override void OnNewIntent(Intent? intent){base.OnNewIntent(intent);Host.Lifecycle.OnNewIntent(this, intent);}protected override void OnActivityResult(int requestCode,[GeneratedEnum] Result resultCode,Intent? data){base.OnActivityResult(requestCode, resultCode, data);Host.Lifecycle.OnActivityResult(this, requestCode, resultCode, data);}// Required by all Shiny modulespublic override void OnRequestPermissionsResult(int requestCode,string[] permissions,[GeneratedEnum] Permission[] grantResults){base.OnRequestPermissionsResult(requestCode, permissions, grantResults);Host.Lifecycle.OnRequestPermissionsResult(this, requestCode, permissions, grantResults);}}
Lifecycle Methods Reference
Section titled “Lifecycle Methods Reference”| Method | Platform | Used By |
|---|---|---|
OnActivityOnCreate | Android | All modules |
OnNewIntent | Android | Notifications, Push |
OnActivityResult | Android | Various |
OnRequestPermissionsResult | Android | All modules |
OnHandleEventsForBackgroundUrl | iOS | HTTP Transfers |
OnRegisteredForRemoteNotifications | iOS | Push |
OnFailedToRegisterForRemoteNotifications | iOS | Push |
OnDidReceiveRemoteNotification | iOS | Push |
OnContinueUserActivity | iOS | Deep links |