For FB Messenger , I did here to improve management in AppDelegate. Most of the ideas were taken directly from the FB iOS documentation and transferred to Swift.
Why did I feel that I should write an additional answer? I have some experience with Swift, but I felt like I spent enough time trying to get the right set of code to do what I wanted with FB Messenger. Hope the source code is useful to someone, just to fix a lot of bits and parts and save some time.
NOTE. This does not include all the AppDelegate life cycle methods that you will need / need, but hopefully it starts
@UIApplicationMain class AppDelegate: UIResponder, UIApplicationDelegate, FBSDKMessengerURLHandlerDelegate { var window: UIWindow? var messengerUrlHandler: FBSDKMessengerURLHandler? var cancelContext : FBSDKMessengerURLHandlerCancelContext? var composerContext : FBSDKMessengerURLHandlerOpenFromComposerContext? var replyContext: FBSDKMessengerURLHandlerReplyContext? // Facebook Messenger enum MessengerShareMode : Int { case MessengerShareModeCancel case MessengerShareModeSend case MessengerShareModeComposer case MessengerShareModeReply } // shareMode holds state indicating which flow the user is in. // Return the corresponding FBSDKMessengerContext based on that state. var shareMode : MessengerShareMode? /* * Initialize the FB messenger handler and set self as the delegate. */ func application(application: UIApplication, willFinishLaunchingWithOptions launchOptions: [NSObject : AnyObject]?) -> Bool { YARAppearance.setAppearance() let rootController = TabBarController() self.window = UIWindow(frame: UIScreen.mainScreen().bounds) self.window!.rootViewController = rootController self.window!.makeKeyAndVisible() // Facebook messenger handling self.messengerUrlHandler = FBSDKMessengerURLHandler() if (self.messengerUrlHandler != nil) { self.messengerUrlHandler!.delegate = self } return true } /* * Handle the cancel context flow. */ func messengerURLHandler(messengerURLHandler: FBSDKMessengerURLHandler!, didHandleCancelWithContext context: FBSDKMessengerURLHandlerCancelContext!) { self.cancelContext = context self.shareMode = .MessengerShareModeCancel } /* * When people enter your app through the composer in Messenger, * this delegate function will be called. */ func messengerURLHandler(messengerURLHandler: FBSDKMessengerURLHandler!, didHandleOpenFromComposerWithContext context: FBSDKMessengerURLHandlerOpenFromComposerContext!) { self.composerContext = context self.shareMode = .MessengerShareModeComposer } /* * When people enter your app through the "Reply" button on content * this delegate function will be called. */ func messengerURLHandler(messengerURLHandler: FBSDKMessengerURLHandler!, didHandleReplyWithContext context: FBSDKMessengerURLHandlerReplyContext!) { self.replyContext = context self.shareMode = .MessengerShareModeReply } /* * Handle URL calls from external applications, particularly Messenger */ func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool { let wasHandled:Bool = self.messengerUrlHandler!.openURL(url, sourceApplication: sourceApplication) return wasHandled } /* * A way to access the context objects elsewhere */ func getContextForShareMode() -> FBSDKMessengerContext? { // shareMode holds state indicating which flow the user is in. // Return the corresponding FBSDKMessengerContext based on that state. if (shareMode == .MessengerShareModeSend) { // Force a send flow by returning a broadcast context. return FBSDKMessengerBroadcastContext() } else if (shareMode == .MessengerShareModeComposer) { // Force the composer flow by returning the composer context. return self.composerContext! } else if (shareMode == .MessengerShareModeReply) { // Force the reply flow by returning the reply context. return self.replyContext! } return nil } }
source share