глубокая привязка flutter (uni_links) не работает на реальном устройстве

#android #flutter #dart #visual-studio-code #deep-linking

#Android #flutter #dart #visual-studio-code #глубокая привязка

Вопрос:

Я пытаюсь добавить глубокие ссылки в свое приложение, я использую uni_links https://pub.dev/packages/uni_links

Я следовал инструкциям на странице, и в эмуляторе Android все работает нормально — я открываю приложение по глубокой ссылке, снимок содержит данные, и возвращается urlResponse. но на реальном устройстве, когда я открываю приложение по глубокой ссылке, снимок не содержит никаких данных, и возвращается домашняя страница.

вот мой код:

 class MyApp extends StatelessWidget {
      @override
      Widget build(BuildContext context) {
        return MaterialApp(
          debugShowCheckedModeBanner: false,
          theme: ThemeData(
            primaryColor: Colors.white,
            visualDensity: VisualDensity.adaptivePlatformDensity,
          ),
          home: StreamBuilder(
            stream: getLinksStream(),
            builder: (context, snapshot) {
              if (snapshot.hasData) {
                // our app started by configured links
                Uri uri = Uri.parse(snapshot.data);
                List<MapEntry<String, List<String>>> list =
                    uri.queryParametersAll.entries.toList();
                return urlResponse(uri, list);
              } else {
                // our app started regularly
                return HomePage();
              }
            },
          ),
        );
      }
 

и мой AndroidManifest.xml:

   <!-- Deep Links -->
    <intent-filter>
      <action android:name="android.intent.action.VIEW" />
      <category android:name="android.intent.category.DEFAULT" />
      <category android:name="android.intent.category.BROWSABLE" />
      <!-- Accepts URIs that begin with YOUR_SCHEME://YOUR_HOST -->
      <data
        android:scheme="http"
        android:host="example.com"
        android:pathPrefix="/myApp"/>
    </intent-filter>
 

Кто-нибудь может помочь мне понять, почему это работает на эмуляторе, но не на реальном устройстве?

Ответ №1:

Я использовал uni_links в StatefulWidget с getLinksStream() таким образом:

 import 'dart:async';
import 'package:flutter/material.dart';
import 'package:uni_links/uni_links.dart';

class MyApp extends StatefulWidget {
  @override
  _MyAppState createState() => _MyAppState();
}

class _MyAppState extends State<MyApp> {
  
  StreamSubscription _linkSubscription;

  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      
      //... 
      
    );
  }

  @override
  void initState() {
    super.initState();
    initDeepLink();
  }

  @override
  void dispose() {
    if (_linkSubscription != null) _linkSubscription.cancel();
    super.dispose();
  }

  Future<void> initDeepLink() async {
    _linkSubscription = getLinksStream().listen((url) {
      if (!mounted) return;
      setState(() {
          //Here you have url data
           Uri uri = Uri.parse(url);
                List<MapEntry<String, List<String>>> list =
                    uri.queryParametersAll.entries.toList();
      });
    }, onError: (Object err) {
      print("$err");
    });
  }