123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367 |
- // Copyright 2013 The Flutter Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
-
- #ifndef FLUTTER_FLUTTERPLUGIN_H_
- #define FLUTTER_FLUTTERPLUGIN_H_
-
- #import <UIKit/UIKit.h>
- #import <UserNotifications/UNUserNotificationCenter.h>
-
- #include "FlutterBinaryMessenger.h"
- #include "FlutterChannels.h"
- #include "FlutterCodecs.h"
- #include "FlutterPlatformViews.h"
- #include "FlutterTexture.h"
-
- NS_ASSUME_NONNULL_BEGIN
- @protocol FlutterPluginRegistrar;
- @protocol FlutterPluginRegistry;
-
- /**
- * A plugin registration callback.
- *
- * Used for registering plugins with additional instances of
- * `FlutterPluginRegistry`.
- *
- * @param registry The registry to register plugins with.
- */
- typedef void (*FlutterPluginRegistrantCallback)(NSObject<FlutterPluginRegistry>* registry);
-
- /**
- * Implemented by the iOS part of a Flutter plugin.
- *
- * Defines a set of optional callback methods and a method to set up the plugin
- * and register it to be called by other application components.
- */
- @protocol FlutterPlugin <NSObject>
- @required
- /**
- * Registers this plugin using the context information and callback registration
- * methods exposed by the given registrar.
- *
- * The registrar is obtained from a `FlutterPluginRegistry` which keeps track of
- * the identity of registered plugins and provides basic support for cross-plugin
- * coordination.
- *
- * The caller of this method, a plugin registrant, is usually autogenerated by
- * Flutter tooling based on declared plugin dependencies. The generated registrant
- * asks the registry for a registrar for each plugin, and calls this method to
- * allow the plugin to initialize itself and register callbacks with application
- * objects available through the registrar protocol.
- *
- * @param registrar A helper providing application context and methods for
- * registering callbacks.
- */
- + (void)registerWithRegistrar:(NSObject<FlutterPluginRegistrar>*)registrar;
- @optional
- /**
- * Set a callback for registering plugins to an additional `FlutterPluginRegistry`,
- * including headless `FlutterEngine` instances.
- *
- * This method is typically called from within an application's `AppDelegate` at
- * startup to allow for plugins which create additional `FlutterEngine` instances
- * to register the application's plugins.
- *
- * @param callback A callback for registering some set of plugins with a
- * `FlutterPluginRegistry`.
- */
- + (void)setPluginRegistrantCallback:(FlutterPluginRegistrantCallback)callback;
- @optional
- /**
- * Called if this plugin has been registered to receive `FlutterMethodCall`s.
- *
- * @param call The method call command object.
- * @param result A callback for submitting the result of the call.
- */
- - (void)handleMethodCall:(FlutterMethodCall*)call result:(FlutterResult)result;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `NO` if this plugin vetoes application launch.
- */
- - (BOOL)application:(UIApplication*)application
- didFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `NO` if this plugin vetoes application launch.
- */
- - (BOOL)application:(UIApplication*)application
- willFinishLaunchingWithOptions:(NSDictionary*)launchOptions;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- */
- - (void)applicationDidBecomeActive:(UIApplication*)application;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- */
- - (void)applicationWillResignActive:(UIApplication*)application;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- */
- - (void)applicationDidEnterBackground:(UIApplication*)application;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- */
- - (void)applicationWillEnterForeground:(UIApplication*)application;
-
- /**
- Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- */
- - (void)applicationWillTerminate:(UIApplication*)application;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- */
- #pragma GCC diagnostic push
- #pragma GCC diagnostic ignored "-Wdeprecated-declarations"
- - (void)application:(UIApplication*)application
- didRegisterUserNotificationSettings:(UIUserNotificationSettings*)notificationSettings;
- #pragma GCC diagnostic pop
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- */
- - (void)application:(UIApplication*)application
- didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application
- didReceiveRemoteNotification:(NSDictionary*)userInfo
- fetchCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;
-
- /**
- * Calls all plugins registered for `UIApplicationDelegate` callbacks.
- */
- - (void)application:(UIApplication*)application
- didReceiveLocalNotification:(UILocalNotification*)notification;
-
- /**
- * Calls all plugins registered for `UNUserNotificationCenterDelegate` callbacks.
- */
- - (void)userNotificationCenter:(UNUserNotificationCenter*)center
- willPresentNotification:(UNNotification*)notification
- withCompletionHandler:
- (void (^)(UNNotificationPresentationOptions options))completionHandler
- API_AVAILABLE(ios(10));
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application
- openURL:(NSURL*)url
- options:(NSDictionary<UIApplicationOpenURLOptionsKey, id>*)options;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application handleOpenURL:(NSURL*)url;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application
- openURL:(NSURL*)url
- sourceApplication:(NSString*)sourceApplication
- annotation:(id)annotation;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application
- performActionForShortcutItem:(UIApplicationShortcutItem*)shortcutItem
- completionHandler:(void (^)(BOOL succeeded))completionHandler
- API_AVAILABLE(ios(9.0));
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application
- handleEventsForBackgroundURLSession:(nonnull NSString*)identifier
- completionHandler:(nonnull void (^)(void))completionHandler;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application
- performFetchWithCompletionHandler:(void (^)(UIBackgroundFetchResult result))completionHandler;
-
- /**
- * Called if this plugin has been registered for `UIApplicationDelegate` callbacks.
- *
- * @return `YES` if this plugin handles the request.
- */
- - (BOOL)application:(UIApplication*)application
- continueUserActivity:(NSUserActivity*)userActivity
- restorationHandler:(void (^)(NSArray*))restorationHandler;
- @end
-
- /**
- *Registration context for a single `FlutterPlugin`, providing a one stop shop
- *for the plugin to access contextual information and register callbacks for
- *various application events.
- *
- *Registrars are obtained from a `FlutterPluginRegistry` which keeps track of
- *the identity of registered plugins and provides basic support for cross-plugin
- *coordination.
- */
- @protocol FlutterPluginRegistrar <NSObject>
- /**
- * Returns a `FlutterBinaryMessenger` for creating Dart/iOS communication
- * channels to be used by the plugin.
- *
- * @return The messenger.
- */
- - (NSObject<FlutterBinaryMessenger>*)messenger;
-
- /**
- * Returns a `FlutterTextureRegistry` for registering textures
- * provided by the plugin.
- *
- * @return The texture registry.
- */
- - (NSObject<FlutterTextureRegistry>*)textures;
-
- /**
- * Registers a `FlutterPlatformViewFactory` for creation of platform views.
- *
- * Plugins expose `UIView` for embedding in Flutter apps by registering a view factory.
- *
- * @param factory The view factory that will be registered.
- * @param factoryId A unique identifier for the factory, the Dart code of the Flutter app can use
- * this identifier to request creation of a `UIView` by the registered factory.
- */
- - (void)registerViewFactory:(NSObject<FlutterPlatformViewFactory>*)factory
- withId:(NSString*)factoryId;
-
- /**
- * Publishes a value for external use of the plugin.
- *
- * Plugins may publish a single value, such as an instance of the
- * plugin's main class, for situations where external control or
- * interaction is needed.
- *
- * The published value will be available from the `FlutterPluginRegistry`.
- * Repeated calls overwrite any previous publication.
- *
- * @param value The value to be published.
- */
- - (void)publish:(NSObject*)value;
-
- /**
- * Registers the plugin as a receiver of incoming method calls from the Dart side
- * on the specified `FlutterMethodChannel`.
- *
- * @param delegate The receiving object, such as the plugin's main class.
- * @param channel The channel
- */
- - (void)addMethodCallDelegate:(NSObject<FlutterPlugin>*)delegate
- channel:(FlutterMethodChannel*)channel;
-
- /**
- * Registers the plugin as a receiver of `UIApplicationDelegate` calls.
- *
- * @param delegate The receiving object, such as the plugin's main class.
- */
- - (void)addApplicationDelegate:(NSObject<FlutterPlugin>*)delegate;
-
- /**
- * Returns the file name for the given asset.
- * The returned file name can be used to access the asset in the application's main bundle.
- *
- * @param asset The name of the asset. The name can be hierarchical.
- * @return the file name to be used for lookup in the main bundle.
- */
- - (NSString*)lookupKeyForAsset:(NSString*)asset;
-
- /**
- * Returns the file name for the given asset which originates from the specified package.
- * The returned file name can be used to access the asset in the application's main bundle.
- *
- *
- * @param asset The name of the asset. The name can be hierarchical.
- * @param package The name of the package from which the asset originates.
- * @return the file name to be used for lookup in the main bundle.
- */
- - (NSString*)lookupKeyForAsset:(NSString*)asset fromPackage:(NSString*)package;
- @end
-
- /**
- * A registry of Flutter iOS plugins.
- *
- * Plugins are identified by unique string keys, typically the name of the
- * plugin's main class. The registry tracks plugins by this key, mapping it to
- * a value published by the plugin during registration, if any. This provides a
- * very basic means of cross-plugin coordination with loose coupling between
- * unrelated plugins.
- *
- * Plugins typically need contextual information and the ability to register
- * callbacks for various application events. To keep the API of the registry
- * focused, these facilities are not provided directly by the registry, but by
- * a `FlutterPluginRegistrar`, created by the registry in exchange for the unique
- * key of the plugin.
- *
- * There is no implied connection between the registry and the registrar.
- * Specifically, callbacks registered by the plugin via the registrar may be
- * relayed directly to the underlying iOS application objects.
- */
- @protocol FlutterPluginRegistry <NSObject>
- /**
- * Returns a registrar for registering a plugin.
- *
- * @param pluginKey The unique key identifying the plugin.
- */
- - (NSObject<FlutterPluginRegistrar>*)registrarForPlugin:(NSString*)pluginKey;
- /**
- * Returns whether the specified plugin has been registered.
- *
- * @param pluginKey The unique key identifying the plugin.
- * @return `YES` if `registrarForPlugin` has been called with `pluginKey`.
- */
- - (BOOL)hasPlugin:(NSString*)pluginKey;
-
- /**
- * Returns a value published by the specified plugin.
- *
- * @param pluginKey The unique key identifying the plugin.
- * @return An object published by the plugin, if any. Will be `NSNull` if
- * nothing has been published. Will be `nil` if the plugin has not been
- * registered.
- */
- - (NSObject*)valuePublishedByPlugin:(NSString*)pluginKey;
- @end
-
- /**
- * Implement this in the `UIAppDelegate` of your app to enable Flutter plugins to register
- * themselves to the application life cycle events.
- */
- @protocol FlutterAppLifeCycleProvider
- - (void)addApplicationLifeCycleDelegate:(NSObject<FlutterPlugin>*)delegate;
- @end
-
- NS_ASSUME_NONNULL_END;
-
- #endif // FLUTTER_FLUTTERPLUGIN_H_
|