【Universallink】問題記錄

背景:
Flutter項(xiàng)目中使用了好幾個(gè)三方插件來接收并透?jìng)飨到y(tǒng)的universallink數(shù)據(jù)到Flutter層,期間遇到了各種問題,這里主要針對(duì)知識(shí)盲點(diǎn)和遇到的問題做記錄處理


知識(shí)&問題

知識(shí)1:
app退入后臺(tái)或者在前臺(tái),下面方法發(fā)生調(diào)用

- (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void (^)(NSArray * _Nullable))restorationHandler{  
    //其他第三方回調(diào):
    return [super application:application continueUserActivity:userActivity restorationHandler:restorationHandler];
}

注意:

  • 必須調(diào)用super方法,否則很多子插件內(nèi)的 continueUserActivity 方法不會(huì)被調(diào)用

知識(shí)2:
app殺死,universallink發(fā)生調(diào)用,app啟動(dòng),此時(shí)continueUserActivity 不會(huì)調(diào)用,需要從下面方法中獲取跳轉(zhuǎn)地址數(shù)據(jù)

- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
  NSURL *url = (NSURL *)launchOptions[UIApplicationLaunchOptionsURLKey];
  
  return  [super application:application didFinishLaunchingWithOptions:launchOptions];;
}

注意:

  • 上面appDelegate文件中,必須調(diào)用super方法,否則子插件方法不會(huì)被調(diào)用
  • 如果有多個(gè)子插件,某個(gè)子插件直接返回了 YES or NO 會(huì)導(dǎo)致其他插件的方法無法被調(diào)用,也就無法拿到跳轉(zhuǎn)鏈接的數(shù)據(jù),具體處理方法,見下面Flutter 插件內(nèi)生命周期還原

Flutter子插件事件還原

子插件中如果實(shí)現(xiàn)了app的生命周期事件,使用完畢需要還原一下,否則其他子插件無法正常使用生命周期函數(shù)

public class FlSharedLinkPlugin: NSObject, FlutterPlugin {
...
 private var lifeCycleDelegate: FlutterPluginAppLifeCycleDelegate
...

init(_ channel: FlutterMethodChannel) {
        self.channel = channel
        // 初始化Flutter的app生命周期管理
        lifeCycleDelegate = FlutterPluginAppLifeCycleDelegate.init()
        super.init()
    }

}

// 生命周期函數(shù)
public func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [AnyHashable: Any] = [:]) -> 
      ...
       // 還原
        return lifeCycleDelegate.application(application, didFinishLaunchingWithOptions: launchOptions)
    }

Flutter AppDelegate 文件中的生命周期本質(zhì)上是 FlutterAppDelegate 自定義的生命周期函數(shù),所以使用Flutter的方式在插件里還原

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

推薦閱讀更多精彩內(nèi)容