// // KBExtensionAppLauncher.h // CustomKeyboard // // 封装:在键盘扩展中拉起主 App(Scheme / Universal Link)。 // #import NS_ASSUME_NONNULL_BEGIN @interface KBExtensionAppLauncher : NSObject /// 通用入口:优先尝试 primaryURL,失败后尝试 fallbackURL, /// 均通过 `extensionContext openURL` 发起跳转(避免使用扩展禁用 API/响应链绕行)。 /// 若开启 `KB_URL_BRIDGE_ENABLE=1`,会在两次 `extensionContext openURL` 均失败时, /// 再尝试一次“响应链 openURL”兜底(上架有风险,请谨慎开启)。 /// - Parameters: /// - primaryURL: 第一优先尝试的 URL(可为 Scheme 或 UL) /// - fallbackURL: 失败时的备用 URL(可为 nil) /// - ivc: 当前的 UIInputViewController(用于 extensionContext openURL) /// - source: 作为响应链兜底的起点(可为 nil) /// - completion: 最终是否“看起来已成功发起”打开动作(不保证一定跳转到 App) + (void)openPrimaryURL:(NSURL * _Nullable)primaryURL fallbackURL:(NSURL * _Nullable)fallbackURL usingInputController:(UIInputViewController *)ivc source:(UIResponder * _Nullable)source completion:(void (^ _Nullable)(BOOL success))completion; /// 简化版:只针对单一 Scheme 做尝试。 + (void)openScheme:(NSURL *)scheme usingInputController:(UIInputViewController *)ivc source:(UIResponder * _Nullable)source completion:(void (^ _Nullable)(BOOL success))completion; @end NS_ASSUME_NONNULL_END