如何解决Flutter 深度链接
根据 Flutter 的官方deep linking page,我们不需要任何插件或原生 Android/iOS 代码来处理深层链接。
但它并没有真正告诉我们如何从该链接获取数据。我是从编码的角度说话。当然,他们在那里写道:
但这并没有告诉我哪里我应该写什么代码来实际获得完整的链接。我已经查找了示例/教程,但找不到任何不使用插件来处理深层链接的内容。
现在,我所做的只是在 <intent-filter>
文件中添加 AndroidManifest.xml
标签,点击链接后,我的应用程序开始显示。但我不知道如何从该链接中提取数据。
有人可以指导我吗?提前致谢。
解决方法
您需要特定于平台的代码来处理深度链接。如果你按照文档中提到的链接,你会找到完整的例子。
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()
}
颤动代码:
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}'.";
}
}
}
点击此链接了解更多详情。
,或者,如果您不想通过特定于平台的代码传递,您可以使用 firebase 动态链接。这将允许您轻松收听来自两个平台的链接,并且您还可以获得以下优势:如果用户未安装该应用,您的链接将显示商品详情页面。
我在这里写了一个完整的例子:https://gbaccetta.medium.com/flutter-deep-linking-with-firebase-dynamic-links-and-bloc-architecture-660f0517fbc2
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。