颤动深层链接(uni_links)在真实设备上不起作用

时间:2021-02-09 14:54:18

标签: android flutter dart visual-studio-code deep-linking

我正在尝试向我的应用添加深层链接,我正在使用 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 个答案:

答案 0 :(得分:0)

我在 StatefulWidget 中使用 uni_links 和 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");
    });
  }