Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >flutter中如何实现deeplink

flutter中如何实现deeplink

作者头像
用户1974410
发布于 2022-09-20 08:44:02
发布于 2022-09-20 08:44:02
2.5K00
代码可运行
举报
文章被收录于专栏:flutter开发精选flutter开发精选
运行总次数:0
代码可运行

1.哪些场景会用到deeplink?

  • h5唤醒APP(比如活动页,通过短信下发链接等等)
  • 其他APP跳转打开自己的APP

2.flutter中如何使用

2.1 安卓配置

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
安卓支持两种app links 和deep links
app links需要是scheme需要指定https,并且要增加hosts文件assetlinks.json,还需要服务端配合。
deep links可以自定义scheme,也不要服务端的验证
为了支持deeplink, 需要在android/app/src/main/AndroidManifest.xml中加入如下代码:
```
<manifest ...>

<application ...> <activity ...>

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  <!-- 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="[YOUR_SCHEME]"
      android:host="[YOUR_HOST]" />
  </intent-filter>

  <!-- App Links -->
  <intent-filter android:autoVerify="true">
    <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 https://YOUR_HOST -->
    <data
      android:scheme="https"
      android:host="[YOUR_HOST]" />
  </intent-filter>
</activity>

```

2.2 IOS配置

ios也支持两种,"Universal Links" 和 "Custom URL schemes",两个功能和android类似。

Universal Link需要在ios/Runner/Runner.entitlements添加一个com.apple.developer.associated-domains环境,

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
  <!-- ... other keys -->
  <key>com.apple.developer.associated-domains</key>
  <array>
    <string>applinks:[YOUR_HOST]</string>
  </array>
  <!-- ... other keys -->
</dict>
</plist>

这样就可以通过https://YOUR_HOST的形式启动App

Custom URL schemes 在ios/Runner/Info.plist添加如下信息即可;

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?xml ...>
<!-- ... other tags -->
<plist>
<dict>
  <!-- ... other tags -->
  <key>CFBundleURLTypes</key>
  <array>
    <dict>
      <key>CFBundleTypeRole</key>
      <string>Editor</string>
      <key>CFBundleURLName</key>
      <string>[ANY_URL_NAME]</string>
      <key>CFBundleURLSchemes</key>
      <array>
        <string>[YOUR_SCHEME]</string>
      </array>
    </dict>
  </array>
  <!-- ... other tags -->
</dict>
</plist>

2.3 在flutter中的使用

上面我们配置好了android和ios,在浏览器火或其他App可以通过我们定义的deeplink打开我们的app了,但是我们如何在flutter中使用呢?

下面,我们需要引入一个插件,帮助我们获取进入的链接。首先,安装我们的uni_links插件。

uni_links有两个方法供我们使用。一个是获取初始链接,另一个是监听。

初始链接

初始链接方法只能调用一次就好。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    // Uri parsing may fail, so we use a try/catch FormatException.
    try {
      final initialUri = await getInitialUri();
      // Use the uri and warn the user, if it is not correct,
      // but keep in mind it could be `null`.
    } on FormatException {
      // Handle exception by warning the user their action did not succeed
      // return?
    }
    // ... other exception handling like PlatformException

```dart
#### 监听链接变化
import 'dart:async';
import 'dart:io';

import 'package:uni_links/uni_links.dart';

// ...

  StreamSubscription _sub;

  Future<void> initUniLinks() async {
    // ... check initialLink

    // Attach a listener to the stream
    _sub = linkStream.listen((String? link) {
      // Parse the link and warn the user, if it is not correct
    }, onError: (err) {
      // Handle exception by warning the user their action did not succeed
    });

    // NOTE: Don't forget to call _sub.cancel() in dispose()
  }

// ...

3.如何在flutter内部实现不同页面的跳转

上面我们学习了如何在flutter中加入deeplink,那我们应该如何去优雅的使用它呢?

我们可以引入bloc或者getX做一个状态管理,在页面中监听状态改变,从而实现路由的管理。说一个deeplink的设计思路,

scheme://host/[:tab]/[subpage][?p=a]

tab对应我们app里的不同tab页面,我们根据tab来切换app的对应tab

subpage就是我们要跳转的具体页面

后面可以加入具体的参数

这样我们在解析uri的时候就知道切换哪个tab,跳哪个页面了。

关注我的微信公众号,获取更多资料

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-11-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 flutter开发精选 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
安卓应用安全指南 4.7 使用可浏览的意图
Android 应用可以设计为从浏览器启动,并对应网页链接。 这个功能被称为“可浏览的意图”。 通过在清单文件中指定 URI 模式,应用将响应具有其 URI 模式的链接转移(用户点击等),并且应用以链接作为参数启动。
ApacheCN_飞龙
2022/12/01
5620
Android DeepLink介绍与使用
前段时间公司让调研一下DeepLink,说以后会用到,之前看了很久,并做了个demo,现整理一下,方便以后查阅,如果有幸帮助到其他人就更好了。
Jingbin
2018/12/05
4.9K0
Android DeepLink介绍与使用
笔记(23)App Links链接一键跳转目标APP
一键跳转功能介绍:通过 URL Scheme 、Deep Link(Android 6.0深度链接) 、Universal Links(IOS9.0通用链接) 实现在不同浏览器中拉起目标APP特定页面 Android 和 iOS其实是鼓励各个应用之间进行交互和集成,提高用户体验,为了就解决基础调用方式的复杂性。2015年,Android 和iOS依次推出了方便开发者得App Links技术,谷歌叫做App Links(Android 6.0),苹果叫做Universal Links(iOS9.0),基本想法就是把打开应用的地址,统一为使用HTTP(S)方式,系统通过拦截和解析HOST地址,与系统注册的HOST进行匹配,如果发现就可以直接打开APP。
木溪bo
2023/12/09
1.6K0
笔记(23)App Links链接一键跳转目标APP
Android Deeplink配置
大家好,又见面了,我是你们的朋友全栈君。 Deeplink启动应用配置注意事项 1. Deeplink格式说明   Deeplink是目前使用广告跟踪非常热门的一种方式,Deeplink的链接类
全栈程序员站长
2022/07/02
1.5K0
第132期:flutter的导航和路由
Flutter提供了一个完整的用于在屏幕之间导航和处理深层链接的系统。没有复杂深度链接的小型应用程序可以使用Navigator,而具有特定深度链接和导航要求的应用程序也应该使用Router来正确处理Android和iOS应用上的深度链接,并在应用程序在web上运行时与地址栏保持同步。
terrence386
2023/02/25
2.1K0
第132期:flutter的导航和路由
Deeplink实践原理分析
目录介绍 01.先看一个场景 02.什么是DeepLink 03.什么是Deferred DeepLink 04.什么是AppLink 05.DeepLink和AppLink核心技术 06.DeepLink实践方案 07.AppLink实践方案 08.部分问题思考总结 09.DeepLink原理分析 10.AppLink原理分析 01.先看一个场景 假设一个场景: 小明告诉小杨,一鹿有车APP上有一个很有创意的抽奖活动,小新想要参与这个活动 如果小杨已经安装了APP,他需要找到且打开APP,然后找到相应的活
杨充
2019/12/09
3K0
Android deeplink漏洞
Deep link是一种处理特定类型链接并直接发送到应用程序(例如特定活动)的机制。Android 允许开发者创建两种类型的链接:
tea9
2023/08/24
8920
DeepLink的实现原理「建议收藏」
DeepLink,深度链接技术,主要应用场景是通过Web页面直接调用Android原生app,并且把需要的参数通过Uri的形式,直接传递给app,节省用户的注册成本。简单的介绍DeepLink概念之后,我们看一个实际的例子:
全栈程序员站长
2022/09/10
1.8K0
DeepLink的实现原理「建议收藏」
从零开始的Flutter之旅: MethodChannel
在flutter_github有这么一个场景:通过authorization认证方式进行登录。而authorization的具体登录形式是,通过跳转一个网页链接进行github授权登录,成功之后会携带对应的code到指定客户端中,然后客户端可以通过这个code来进行oauth授权登录,成功之后客户端可以拿到该账户的token,所以之后的github操作都可以通过该token来进行请求。由于token是有时效性,同时也可以手动解除授权,所以相对于在客户端进行账户密码登录来说更加安全。
Rouse
2020/07/13
1.2K0
android deeplink流程,Android Deeplink探究[通俗易懂]
移动端深度链接,简称deeplink。这是一种通过uri链接到app特定位置的一种跳转技术,不单是简单地通过网页、app等打开目标app,还能达到利用传递标识跳转至不同页面的效果。参考Create Deep Links to App Content
全栈程序员站长
2022/09/07
2K0
Android二维码功能实现,在程序内嵌入ZXing项目
最近二维码真是越来越火了,随便电视上、网络上、商场里,到处都是二维码。而内嵌二维码扫描功能的软件也越来越多,QQ、微信、UC浏览器等等应用都可以对着二维码扫一扫,感觉我们自己的应用里不加上二维码扫描功
用户1158055
2018/01/05
1K0
Android二维码功能实现,在程序内嵌入ZXing项目
【Android】Android基础--显式Intent和隐式Intent
当我们用一个显式 Intent 去启动组件时,Android 会根据 Intent 对象所提供的 component name 直接找到要启动的组件,当我们用一个隐式的 Intent 去启动组件时,Android 系统就无法直接知道要启动的组件名称了。
人不走空
2024/07/13
3910
用H5页面打开APP
  业务场景,一个分享出去的h5界面通过页面内某个事件的触发,启动目标app并执行相关逻辑处理或做其他页面跳转(如:跳应用市场下载应用等)。下面是我在企业开发过程中,实操的记录,对于有这块需求的朋友,可以来参考下。   Android实现通过浏览器点击链接打开本地应用(APP)并拿到浏览器传递的数据。
饮水思源为名
2018/09/06
3K0
调用新浪微博显示用户信息
最近需要在开发的安卓项目中添加新浪微博一件关注的功能, 本来是一个很简单的功能, 就是调用新浪微博客户端显示用户信息的 Activity , 然后用户就点击关注按钮就可以了。 本来是很简单的功能, 可以网上找到的几乎都是 JS 的代码, 或者是要注册新浪微博 SDK 的代码, 这么简单的功能应该不用注册什么 SDK 的, 也不想参合什么 JS , 只要研究一下新浪微博客户端的 Activity 就可以了。
beginor
2020/08/10
6730
调用新浪微博显示用户信息
Android-应用被作为第三方浏览器打开
微信里的文章页面,可以选择“在浏览器打开”。现在很多应用都内嵌了WebView,那是否可以使自己的应用作为第三方浏览器打开此文章呢? 如图:
Jingbin
2018/12/27
1.8K0
Android-应用被作为第三方浏览器打开
H5 打开 App 并跳转指定页(Android/iOS)最 low 实现
个人工作主要偏向于 Android,所以此篇内容主要以 Android 为例,毕竟鸡老大也曾经说过,不对没涉及的领域做太多评价。
贺biubiu
2020/06/29
9.2K0
android之注册registerReceiver
广播作为四大组件之一,使用方式也是多种多样的,既可以自己在manifest中注册,也可以在java代码中动态注册,既可以接收由系统发出的广播,也可以接受自己定义并发送的广播。
李小白是一只喵
2021/01/29
2.2K0
从程序外部(浏览器)吊起app
就Android平台而言,URI主要分三个部分:scheme, authority and path。其中authority又分为host和port。格式如下:
程思扬
2022/01/10
6340
Activity跳转之scheme跳转法
Activity的跳转可以说是非常简单的了、从一个页面跳转至另一个页面,我们最常用的也就是下面这种:
乱码三千
2021/07/29
1.9K0
Activity跳转之scheme跳转法
如何在Android中优雅的分发深度链接
DeepLinkDispatch提供了一种声明式的, 基于注解的API, 用于定义应用深度链接.本文是TonnyL创作的文章,希望可以支持下原作者的博客。如果你想学习,找不到好的途径,学习提高技术的方法,提高面试技术等都可以公众号后台咨询,关注本留言。
开发者技术前线
2020/11/23
2.2K0
如何在Android中优雅的分发深度链接
相关推荐
安卓应用安全指南 4.7 使用可浏览的意图
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验