簡體   English   中英

Flutter firebase 動態鏈接不聽

[英]Flutter firebase dynamic link not listening

我正在嘗試在 flutter 應用程序中實現 Firebase 動態鏈接。 當我單擊鏈接時,它會打開應用程序但不會調用監聽函數。

我按照 FlutterFire 一步一步重新配置,所以我認為問題不在配置上,但可能是我使用插件的方式,因為沒有關於插件最新版本的文檔。

Firebase 在我使用其他服務時已在我的應用程序中正確初始化。

我在 android 模擬器上做測試

我正在嘗試使用以下代碼收聽來自有狀態小部件的動態鏈接

我首先導航到包含此小部件的頁面,然后我將應用置於后台,單擊鏈接,應用在同一個位置打開,但沒有任何反應。

 @override void initState() { super.initState(); initLink(); } void initLink() { FirebaseDynamicLinks.instance.onLink.listen((dynamicLinkData) { print('dynamic link'); print(dynamicLinkData.toString()); // Navigator.pushNamed(context, dynamicLinkData.link.path); }).onError((error) { // Handle errors }); }

這里有一個未解決的問題https://github.com/FirebaseExtended/flutterfire/issues/8261其他一些人也有同樣的問題,包括我自己。

現在看來,至少讓事情重新開始工作的臨時解決方案是由 odlund 發布的。 如果您進行這些更改,監聽器應該再次工作,直到我們有更多的官方修復: https://github.com/FirebaseExtended/flutterfire/commit/8bb4bee7e678241e75ab37a2bcfa0831426b91fa

請更新firebase_dynamic_links到 4.1.1。 似乎是 4.1.0 或更早版本的問題,其中FirebaseDynamicLinks.instance.onLink.listen不起作用

您無需檢查該應用程序是在后台運行還是已恢復運行。

這非常有效!

class _MainAppState extends State<MainApp> {  

Future<void> initDynamicLinks() async {
    print("Initial DynamicLinks");
    FirebaseDynamicLinks dynamicLinks = FirebaseDynamicLinks.instance;

    // Incoming Links Listener
    dynamicLinks.onLink.listen((dynamicLinkData) {
      final Uri uri = dynamicLinkData.link;
      final queryParams = uri.queryParameters;
      if (queryParams.isNotEmpty) {
        print("Incoming Link :" + uri.toString());
        //  your code here
      } else {
        print("No Current Links");
        // your code here
      }
    });

    // Search for Firebase Dynamic Links
    PendingDynamicLinkData? data = await dynamicLinks
        .getDynamicLink(Uri.parse("https://yousite.page.link/refcode"));
    final Uri uri = data!.link;
    if (uri != null) {
      print("Found The Searched Link: " + uri.toString());
      // your code here
    } else {
      print("Search Link Not Found");
      // your code here
    }

  }

  Future<void> initFirebase() async {
    print("Initial Firebase");
    WidgetsFlutterBinding.ensureInitialized();
    await Firebase.initializeApp();
    // await Future.delayed(Duration(seconds: 3));
    initDynamicLinks();
  }

  @override
  initState() {
    print("INITSTATE to INITIALIZE FIREBASE");
    super.initState();
    initFirebase();
  }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM