【第十九天 - Flutter Firebase Dynamic Links】

前言

今日想要介绍 Deep Link,这边我只有接收 deeplink 的连结实作,并没有使用动态的 link。因为我没有上架 google store。

Start

这篇要讲述,如何让一个连接跳到你的页面,如果没有注册的话则会跳到 apple store or Google Store。

设定 YAML 档案

dependencies:
  firebase_dynamic_links: ^2.0.9

Android Manifest.xml

<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="https"
    android:host="YOUR_SUBDOMAIN.page.link" />
</intent-filter>

IOS Capabilities 设定

在应用程序 Xcode 项目的Capabilities选项卡中,启用Associated Domains并将以下内容添加到Associated Domains列表中

applinks:YOUR_URL_PREFIX

IOS Info.list

<key>FirebaseDynamicLinksCustomDomains</key>
<array>
  <string>https://example.com/promos</string>
  <string>https://example.com/links/share</string>
</array>

开始

Firebase 设定
https://ithelp.ithome.com.tw/upload/images/20210910/20134548KzY30D8guM.png

https://ithelp.ithome.com.tw/upload/images/20210910/20134548xBxpDLiGx9.png
https://ithelp.ithome.com.tw/upload/images/20210910/20134548l2TeZlrOYb.pnghttps://ithelp.ithome.com.tw/upload/images/20210910/20134548iKvRd9qjtt.pnghttps://ithelp.ithome.com.tw/upload/images/20210910/20134548Mns0gcLh4w.pnghttps://ithelp.ithome.com.tw/upload/images/20210910/20134548cQnpebHdQU.png

Deep link 接收

当 App 没有在运行的话需要这个。

  @override
  void initState() {
    super.initState();
    initDynamicLinks();
  }
  
  void initDynamicLinks() async {
    /// 当 app 处於活动状态
    FirebaseDynamicLinks.instance.onLink(
        onSuccess: (PendingDynamicLinkData? dynamicLink) async {
          final Uri? deepLink = dynamicLink?.link;

          if (deepLink != null) {
            Navigator.pushNamed(context, deepLink.path);
          }
        },
        onError: (OnLinkErrorException e) async {
          Navigator.pushNamed(context, '/error');
        }
    );
    /// 当 app 处於非活动状态
    final PendingDynamicLinkData? data = await FirebaseDynamicLinks.instance.getInitialLink();
    final Uri? deepLink = data?.link;

    if (deepLink != null) {
      Navigator.pushNamed(context, deepLink.path);
    }
  }

创造一个 deepLink 并缩网址。

程序码撷取撷取来自 => https://pub.dev/packages/firebase_dynamic_links
这边是建立动态 deepLink。

这边的 Sample Code 我没有实作他,因为我没有上架 google,所以没有 google store 的 page url。
所以我在 AndroidParameters、IosParameters 都有加上 fall 的网址。

Future<void> _createDynamicLink() async {
  final DynamicLinkParameters parameters = DynamicLinkParameters(
    uriPrefix: 'https://2021it30.page.link/',
    link: Uri.parse('https://example.com/'),
    androidParameters: AndroidParameters(
        packageName: 'com.example.android',
        minimumVersion: 125,
        fallbackUrl: Uri.parse('https://www.google.com/')),
    iosParameters: IosParameters(
        bundleId: 'com.example.ios',
        minimumVersion: '1.0.1',
        appStoreId: '123456789',
        fallbackUrl: Uri.parse('https://www.google.com/')),
    googleAnalyticsParameters: GoogleAnalyticsParameters(
      campaign: 'example-promo',
      medium: 'social',
      source: 'orkut',
    ),
    itunesConnectAnalyticsParameters: ItunesConnectAnalyticsParameters(
      providerToken: '123456',
      campaignToken: 'example-promo',
    ),
    socialMetaTagParameters: SocialMetaTagParameters(
      title: 'Example of a Dynamic Link',
      description: 'This link works whether app is installed or not!',
    ),
  );

  final ShortDynamicLink shortDynamicLink = await parameters.buildShortLink();
  final Uri shortUrl = shortDynamicLink.shortUrl;
}

<<:  [Day 18] 今晚我想来点tinyML加Arm不加香菜

>>:  [Day24] 实作 - 动画篇1

[Day2] Arduino IDE介绍 & 安装

前言 今天开始将踏入实作的部分,会带大家从环境开始配置,整个系列主要使用的编辑工具为Arduino ...

Firebase Firestore

还记得便利贴专案做到哪了吗?专案目前用的架构模式是 MVVM :Jetpack Compose 所做...

方法的输入处理,其实不简单!

输入处理,功能实现,输出处理,异常处理。 铁人赛第三天, 今天在进入对於方法的『 输入处理 』前:...

Day-23 快速面试之考题大公开!(2)

今天来补充一下”快速面试”还要再补充的地方,现在回想还是怕… 有一家厂商满特别的,一开始面试直接问...

[Day 10] 模型达到商业指标的挑战 — Test set performance 的殒落

Achieving low average tested error isn't good eno...