首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >颤振深联

颤振深联
EN

Stack Overflow用户
提问于 2021-06-22 09:57:32
回答 5查看 2.7K关注 0票数 8

根据颤振的官方深度链接页,我们不需要任何插件或原生的安卓/iOS代码来处理深度链接。

但它并没有真正告诉我们如何从那个链接中获取数据。我是从编码的角度讲的。当然,他们在书中写道:

但这并没有告诉我应该在哪里编写,什么样的代码才能真正获得完整的链接。我已经寻找了例子/教程,但我找不到任何不使用插件来处理深度链接的东西。

现在,我所做的就是在<intent-filter>文件中添加AndroidManifest.xml标签,点击链接,我的应用程序就开始出现了。但我不知道如何从那个链接中提取数据。

有谁能指引我到这里来吗?提前谢谢。

EN

回答 5

Stack Overflow用户

发布于 2021-06-22 11:21:03

您需要特定于平台的代码来处理深度链接。如果您遵循文档中提到的链接,您将找到完整的示例。

代码语言:javascript
运行
复制
private val CHANNEL = "poc.deeplink.flutter.dev/channel"
private var startString: String? = null
override fun configureFlutterEngine(@NonNull flutterEngine:FlutterEngine) {
GeneratedPluginRegistrant.registerWith(flutterEngine)

MethodChannel(flutterEngine.dartExecutor, CHANNEL).setMethodCallHandler { call, result ->
    if (call.method == "initialLink") {
        if (startString != null) {
            result.success(startString)
        }
    }
 }
}


override fun onCreate(savedInstanceState: Bundle?) {
  super.onCreate(savedInstanceState)

   val intent = getIntent()
   startString = intent.data?.toString()
}

颤振守则:

代码语言:javascript
运行
复制
class DeepLinkBloc extends Bloc {

 //Event Channel creation
static const stream = const 
EventChannel('poc.deeplink.flutter.dev/events');

//Method channel creation
static const platform = const 
MethodChannel('poc.deeplink.flutter.dev/channel');

 StreamController<String> _stateController = StreamController();

 Stream<String> get state => _stateController.stream;

 Sink<String> get stateSink => _stateController.sink;


//Adding the listener into contructor
DeepLinkBloc() {
  //Checking application start by deep link
  startUri().then(_onRedirected);
  //Checking broadcast stream, if deep link was clicked in opened appication

  stream.receiveBroadcastStream().listen((d) => _onRedirected(d));
}


_onRedirected(String uri) {
  // Here can be any uri analysis, checking tokens etc, if it’s necessary
  // Throw deep link URI into the BloC's stream
  stateSink.add(uri);
}


  @override
  void dispose() {
    _stateController.close();
  }


  Future<String> startUri() async {
    try {
      return platform.invokeMethod('initialLink');
    } on PlatformException catch (e) {
      return "Failed to Invoke: '${e.message}'.";
    }
  }
}

请按照此链接了解更多细节。

https://medium.com/flutter-community/deep-links-and-flutter-applications-how-to-handle-them-properly-8c9865af9283

票数 2
EN

Stack Overflow用户

发布于 2021-12-24 02:55:08

如果您已经完成了您发布的指南中的步骤,那么最好的方法是在您的onGenerateRoute和/或onGenerateInitialRoutes处理程序中创建一个MaterialApp处理程序,以便这些处理程序根据所描述的行为处理由框架传递或推送的路由。您甚至可以在MaterialApp的路由属性上创建一个来自深度链接的预期命名路由,尽管我认为动态生成路由更合适,这是因为深度链接的动态特性,特别是当您在应用程序中处理“身份验证所需的内容”时。

票数 1
EN

Stack Overflow用户

发布于 2021-08-06 17:21:27

或者,如果您不想通过平台特定的代码传递,您可以使用firebase动态链接。这样就可以轻松地收听来自两个平台的链接,而且如果用户没有安装应用程序,那么您的链接还可以打开商店列表页面。

我在这里写了一个完整的例子:https://gbaccetta.medium.com/flutter-deep-linking-with-firebase-dynamic-links-and-bloc-architecture-660f0517fbc2

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68081448

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档