【Flutter】Flutter 如何获取安装来源信息
文章目录
- 一、 前言
- 二、 安装来源信息的基本概念
- 1. 什么是安装来源信息
- 2. 为什么我们需要获取安装来源信息
- 三、 如何在 Flutter 中获取安装来源信息
- 1. 准备工作
- 2. 安装必要的依赖库
- 3. 编写代码获取安装来源信息
- 四、 完整示例代码
- 五、总结
一、 前言
在这篇文章中,我们将探讨一个在实际业务中常见但在学习 Flutter 时可能被忽视的问题:如何获取安装来源信息。如果你是一名移动应用开发者,或者你正在学习 Flutter,那么这篇文章应该能给你带来一些帮助。
如果你想深入学习 Flutter,掌握更多的技巧和最佳实践,我有一个好消息要告诉你:我们有一个全面的 Flutter专栏->Flutter Developer 101 入门小册 等待着你。在那里,你将获得完整的、系统的 Flutter 学习资料,包括详细的代码示例和深入的概念解析。更重要的是,我们的专栏正在不断更新和完善,而价格也会随着内容的丰富而逐渐上调。所以,现在加入,你将以最优惠的价格获得所有的内容。现在,让我们开始今天的学习吧!
二、 安装来源信息的基本概念
1. 什么是安装来源信息
安装来源信息,顾名思义,就是告诉我们用户是从哪里获取并安装我们的应用的。这可能是一个网页链接,一个广告,或者一个应用市场。
2. 为什么我们需要获取安装来源信息
获取安装来源信息可以帮助我们了解哪些推广渠道更有效,哪些更适合我们的目标用户,从而可以更有针对性地进行推广活动,提高用户获取的效率和效果。
三、 如何在 Flutter 中获取安装来源信息
1. 准备工作
在我们开始编写代码之前,我们需要确保我们的 Flutter 环境已经安装并配置好。
2. 安装必要的依赖库
在 Flutter 中,我们可以使用 install_referrer
这个库来帮助我们获取安装来源信息。在 pubspec.yaml
文件中添加以下代码来安装这个库:
dependencies:install_referrer: ^1.0.0
然后在终端中运行 flutter pub get
来安装这个库。
3. 编写代码获取安装来源信息
在我们的代码中,我们可以调用 InstallReferrer
类的 getInstallReferrer
方法来获取安装来源信息。例如:
import 'package:install_referrer/install_referrer.dart';void getInstallReferrer() async {try {InstallReferrerDetails details = await InstallReferrer.instance.getInstallReferrer();print('安装来源信息: ${details.installReferrer}');} catch (e) {print('获取安装来源信息失败: $e');}
}
这段代码中,我们首先导入 install_referrer
库,然后定义一个异步函数 getInstallReferrer
。在这个函数中,我们调用 InstallReferrer.instance.getInstallReferrer()
来获取安装来源信息,并将其打印出来。如果在获取安装来源信息时出现错误,我们将错误信息打印出来。
四、 完整示例代码
import 'package:flutter/material.dart';
import 'package:install_referrer/install_referrer.dart';void main() {runApp(MyApp());
}class MyApp extends StatelessWidget {```dart
import 'package:flutter/material.dart';
import 'package:install_referrer/install_referrer.dart';void main() {runApp(const MyApp());
}class MyApp extends StatelessWidget {const MyApp({Key? key,}) : super(key: key);Widget build(BuildContext context) {return MaterialApp(home: Scaffold(appBar: AppBar(title: const Text('Installation Referrer plugin example app'),),body: Center(child: Column(mainAxisAlignment: MainAxisAlignment.spaceAround,children: [FutureBuilder(future: InstallReferrer.app,builder: (BuildContext context,AsyncSnapshot<InstallationApp> result) {if (!result.hasData) {return const CircularProgressIndicator.adaptive();} else if (result.hasError) {return const Text('Unable to detect your referrer');} else {return Text('Package name:\n${result.data!.packageName ?? 'Unknown'}\n''Referrer:\n${referrerToReadableString(result.data!.referrer)}',textAlign: TextAlign.center,);}},),InstallReferrerDetectorBuilder(builder: (BuildContext context, InstallationApp? app) {if (app == null) {return const CircularProgressIndicator.adaptive();} else {return Text('Package name:\n${app.packageName ?? 'Unknown'}\n''Referrer:\n${referrerToReadableString(app.referrer)}',textAlign: TextAlign.center,);}},),InstallReferrerDetectorListener(child: const Text('Listener'),onReferrerAvailable: (InstallationApp? app) {// ignore: avoid_printprint(app?.referrer);},),],),),),);}String referrerToReadableString(InstallationAppReferrer referrer) {switch (referrer) {case InstallationAppReferrer.iosAppStore:return "Apple - App Store";case InstallationAppReferrer.iosTestFlight:return "Apple - Test Flight";case InstallationAppReferrer.iosDebug:return "Apple - Debug";case InstallationAppReferrer.androidGooglePlay:return "Android - Google Play";case InstallationAppReferrer.androidAmazonAppStore:return "Android - Amazon App Store";case InstallationAppReferrer.androidHuaweiAppGallery:return "Android - Huawei App Gallery";case InstallationAppReferrer.androidOppoAppMarket:return "Android - Oppo App Market";case InstallationAppReferrer.androidSamsungAppShop:return "Android - Samsung App Shop";case InstallationAppReferrer.androidVivoAppStore:return "Android - Vivo App Store";case InstallationAppReferrer.androidXiaomiAppStore:return "Android - Xiaomi App Store";case InstallationAppReferrer.androidManually:return "Android - Manual installation";case InstallationAppReferrer.androidDebug:return "Android - Debug";}}
}
在上面的示例代码中,我们在一个简单的 Flutter 应用中使用了 install_referrer
库来获取并显示安装来源信息。我们首先定义了一个 FutureBuilder
,它使用 InstallReferrer.app
作为 Future
,并在 builder
函数中处理 Future
的结果。如果 Future
还没有完成,我们显示一个进度指示器。
然后,我们又定义了一个 InstallReferrerDetectorBuilder
,它也使用 InstallReferrer.app
作为 Future
,并在 builder
函数中处理 Future
的结果。同样,如果 Future
还没有完成,我们显示一个进度指示器。如果 Future
完成并返回了数据,我们将包名和来源信息显示在文本中。
最后,我们定义了一个 InstallReferrerDetectorListener
,它监听来源信息的变化,并在来源信息变化时打印新的来源信息。
五、总结
在这篇文章中,我们探讨了如何在 Flutter 中获取安装来源信息。首先,我们介绍了什么是安装来源信息,以及我们为什么需要获取它。然后,我们介绍了如何在 Flutter 中使用 install_referrer
库来获取安装来源信息,包括安装和使用这个库的步骤。最后,我们给出了一个完整的示例代码,展示了如何在一个简单的 Flutter 应用中获取并显示安装来源信息。
如果你对 Flutter 感兴趣,想要更深入地学习,那么我要推荐你一个很棒的资源:我们的 Flutter专栏->Flutter Developer 101 入门小册。在那里,你将获得完整的、系统的 Flutter 学习资料,包括详细的代码示例和深入的概念解析。比如,你知道如何使用 Flutter 构建一个完整的应用吗?在我们的专栏中,你将找到答案。更重要的是,我们的专栏正在不断更新和完善,而价格也会随着内容的丰富而逐渐上调。所以,现在加入,你将以最优惠的价格获得所有的内容。让我们一起在 Flutter 的世界中继续探索吧!如果你想了解更多,可以先阅读我们的 一站式解决你的需求,Flutter Developer 101 入门小册 专栏指引。
相关文章:
【Flutter】Flutter 如何获取安装来源信息
文章目录 一、 前言二、 安装来源信息的基本概念1. 什么是安装来源信息2. 为什么我们需要获取安装来源信息 三、 如何在 Flutter 中获取安装来源信息1. 准备工作2. 安装必要的依赖库3. 编写代码获取安装来源信息 四、 完整示例代码五、总结 一、 前言 在这篇文章中,…...
Stimulsoft Reports用户手册:Report Designer介绍
Stimulsoft Reports.Net是一个基于.NET框架的报表生成器,能够帮助你创建结构、功能丰富的报表。StimulReport.Net 的报表设计器不仅界面友好,而且使用便捷,能够让你轻松创建所有报表;该报表设计器在报表设计过程中以及报表运行的过…...
跨模态检索论文阅读:Dissecting Deep Metric Learning Losses for Image-Text Retrieval(GOAL)
Dissecting Deep Metric Learning Losses for Image-Text Retrieval 剖析图像文本检索中的深度度量学习损失 2022.10 视觉语义嵌入(VSE)是图像-文本检索中的一种流行的应用方法,它通过学习图像和语言模式之间的联合嵌入空间来保留语义的相似性…...
贪心算法part5 | ● 435. 无重叠区间 ● 763.划分字母区间 ● 56. 合并区间
文章目录 435. 无重叠区间思路思路代码困难 763.划分字母区间思路官方题解代码困难 56. 合并区间思路思路代码 今日收获 435. 无重叠区间 思路 重叠问题都需要先排好序,再贪心 思路代码 func eraseOverlapIntervals(intervals [][]int) int {sort.Slice(interva…...
IMX6ULL裸机篇之SPI实验-ICM20608代码实现
一. SPI 实验 SPI实验:学习如何使用 I.MX6U 的 SPI 接口来驱动 ICM-20608,读取 ICM-20608 的六轴数据。 本文学习 SPI通信实验中,涉及从设备的 SPI代码编写。 之前学习了 SPI 主控芯片代码的编写,如下所示: IMX6ULL…...
51单片机读取DS18B20温度传感器
1.首先我们知道DS18B20是单总线协议,只有一根数据线。所以Data数据线即使发送端又是接收端,同时DS18B20内部接了弱上拉电阻(如图一所示),数据线默认为高电平。有了这些概念,我们就能进行下一步。 图一&…...
set/map学习
我们要开始学习map和set的使用,虽然使用更加复杂,但是STL整体的设计,本身就具有很强的前瞻性和延续性,比如说迭代器等,我们顺着文档来看。这也是除了vector之外最重要的容器,当然还有unordered_map 和 unor…...
JavaScript Web APIs学习总结
以后声明变量我们有限使用哪一个? const 有了变量先给const,如果发现它后面是要被修改的,再改为let 为什么const声明的对象可以修改里面的属性? 因为对象是引用类型,里面存储的是地址,只要地址不变&…...
萤石摄像头RTSP流获取(黑屏解决)
前言 在获取萤石摄像头RTSP视频流时,视频流获取不成功,黑屏并且一直显示缓冲中。下面对获取过程中查阅的资料和解决方案做一下汇总。 打开RTSP 在萤石云视频APP中打开RTSP,【我的】-【工具】-【局域网设备预览】-【开始扫描】-【选择摄像头…...
ThreadLocal引发的内存泄漏分析
预备知识(引用) Object o new Object(); 这个o,我们可以称之为对象引用,而new Object()我们可以称之为在内存中产生了一个对象实例。 当写下 onull时,只是表示o不再指向堆中object的对象实例,不代表这个…...
银行数据治理:数据质量管理实践
现代商业银行日常经营活动中积累了大量数据,这些数据除了支持银行前台业务流程运转之外,越来越多地被用于决策支持领域,风险控制、产品定价、绩效考核等管理决策过程也都需要大量高质量数据支持。银行日常经营决策过程的背后,实质…...
2.7V至25V宽输入电压15A 峰值电流
HT7179是一款高功率异步升压转换器,集成 20mΩ功率开关管,为便携式系统提供高效的 小尺寸解决方案。 HT7179具有2.7V至25V宽输入电压范围,可为 采用单节或两节锂电池,或12V铅酸电池的应 用提供支持。该器件具备15A开关电流能力&a…...
Vue 父子组件应用指南:从基础到实战
文章目录 一、创建父组件二、创建子组件三、在父组件中使用子组件四、父子组件之间的通信1. 数据传递2. 事件传递 Vue.js 是一种流行的 JavaScript 框架,用于构建用户界面。其中,父子组件的概念是 Vue 开发中非常重要的一部分。本文将介绍如何使用 Vue 创…...
todotodo
todotodo...
创建autotool项目
GNU Autotools是linux系统一套自动化编译工具,生成的项目可移植,通过configure && make即可生成目标程序。GNU Autotools组件有:autoscan, aclocal, autoconf, automake,autoheader等。 不用管这些工具的原理,只要知道他们…...
计算机概念
计算机的体系结构 计算机俗称“电脑”computer(kəmˈpjuːtə(r))哈哈,本质上就是一台在各个领域被广泛使用的设备,主要由硬件和软件两大部分组成。 常见的硬件:CPU、内存、硬盘、显卡、主板、键盘、显示器、鼠标、... CPU - 中央处理…...
【数学建模系列】TOPSIS法的算法步骤及实战应用——MATLAB实现
文章目录 TOPSIS简介方法和原理数学定义数学语言描述现实案例 正负理想解定义实例 量纲 TOPSIS法的算法步骤1.用向量规范化的方法求得规范决策矩阵2.构成加权规范阵C(c~ij~)~m*n~3.确定正负理想解的距离4.计算各方案到正理想解与负理想解的距离5.计算各方案的综合评价指数6.排列…...
网络安全(黑客)工具
1.Nmap 它是网络管理员 必用的软件之一,以及用以评估网络系统安全。正如大多数被用于网络安全的工具,nmap 也是不少黑客及骇客(又称脚本小子 )爱用的工具 。系统管理员可以利用nmap来探测工作环境中未经批准使用的服务器ÿ…...
探究前后端数据交互方式
前端和后端在 Web 开发中扮演着不同的角色,两者需要进行数据的传递和交互。本篇文章将主要讨论前后端数据交互方式的不同类型和应用场景。 一、什么是前后端数据交互? 在 Web 开发中,前端负责用户界面的设计和交互,后端负责数据…...
Yolov5轻量化:CVPR2023|RIFormer:无需TokenMixer也能达成SOTA性能的极简ViT架构
1.RIFormer介绍 论文:https://arxiv.org/pdf/2304.05659.pdf 本文基于重参数机制提出了RepIdentityFormer方案以研究无Token Mixer的架构体系。紧接着,作者改进了学习架构以打破无Token Mixer架构的局限性并总结了优化策略。搭配上所提优化策略后,本文构建了一种极致简单且…...
Spring-Retry实现及原理
前言 重试,其实我们其实很多时候都需要的,为了保证容错性,可用性,一致性等。一般用来应对外部系统的一些不可预料的返回、异常等,特别是网络延迟,中断等情况。还有在现在流行的微服务治理框架中࿰…...
Java中的锁
为什么会有这些锁呢? 因为一种类型的锁很难应对线程操作同步资源的情况。 乐观锁和悲观锁 自旋锁和适应性自旋锁 无锁、偏向锁、轻量级锁和重量级锁 公平锁和非公平锁 可重入锁和非可重入锁 乐观锁和悲观锁 悲观锁认为当它操作数据的时候,必然用一…...
学习系列:5种常见的单例模式变体及其实现方式
单例模式是一种创建型设计模式,它保证一个类只有一个实例,并提供了一个全局访问点。在实际应用中,我们可能会遇到一些特殊情况,需要对单例模式进行一些变体,以满足不同的需求。下面介绍几种常见的单例模式变体。 1. 懒…...
三菱FX5U系列PLC之间进行简易PLC间链接功能的具体方法
三菱FX5U系列PLC之间进行简易PLC间链接功能的具体方法 功能介绍: 在最多8台FX5U或者FX3U PLC之间通过RS-485通信方式连接,进行软元件相互链接的功能。 接线注意事项: 根据链接模式和所使用的从站数量的不同,链接软元件的占用点数也有所变化。根据链接软元件的起始编号,对占…...
基于DBACAN的道路轨迹点聚类
目录 前言道路栅格化轨迹聚类参考资料 前言 很多针对道路轨迹的挖掘项目前期都需要对道路进行一段一段的分割成路段,然后对每一个路段来单独进行考察,如设定路段限速标识,超速概率等,如何对道路进行划分,其实是一个很…...
【项目】接入飞书平台
前言 项目有和飞书打通的需求,因为是第一次打通,摸索过程还是花了些时间的,现在相关笔记分享给大家。 步骤 1、熟悉开发文档 熟悉飞书的开发文档:开发文档 ,找到你需要的接口,拿我为例,我需…...
c++11 标准模板(STL)(std::ios_base)(三)
定义于头文件 <ios> class ios_base; 类 ios_base 是作为所有 I/O 流类的基类工作的多用途类。它维护数种数据: 1) 状态信息:流状态标志; 2) 控制信息:控制输入和输出序列格式化和感染的本地环境的标志; 3)…...
在线协同办公小程序开发搭建开发环境
目录 介绍 开发环境说明 虚拟机 原因 VirtualBox虚拟机 VMware虚拟机v15 安装MySQL数据库 安装步骤 导入EMOS系统数据库 安装MongoDB数据库 启动Navicat,选择创建MongoDB连接 创建用户 搭建Redis数据库 配置Maven 安装IDEA插件 Lombok插件 …...
【编译、链接、装载六】汇编——目标文件
【编译和链接六】汇编——目标文件 一、目标文件_存储格式1、生成目标文件2、目标文件存储格式3、file查看文件格式 二、查看目标文件的内部结构——objdump三、代码段四、 数据段和只读数据段五、 ELF文件结构描述1、头文件2、段表2.1、重定位表2.2、字符串表2.3、查看重定位表…...
王道计算机考研408计算机组成原理汇总(下)
提示:真正的英雄是明白世界的残酷,也遭受了社会带给他的苦难,他依然能用心的说“我热爱这个世界,我愿竭尽所能去为我的世界而好好战斗 文章目录 前言4.1.1 指令格式4.1.2 扩展操作码指令格式4.2.1 指令寻址4.2.2 数据寻址4.2.3 偏移寻址4.2.4 堆栈寻址汇总前言4.3.1 高级语…...
python html 界面开发/草根seo视频大全网站
一、字符转换函数1、ASCII()返回字符表达式最左端字符的ASCII 码值。在ASCII()函数中,纯数字的字符串可不用‘’括起来,但含其它字符的字符串必须用‘’括起来使用,否则会出错。2、CHAR()将ASCII 码转换为字符。如果没…...
日本建设网站/搜狗指数官网
public class LayoutAnimationController extends Object java.lang.Object ↳ android.view.animation.LayoutAnimationController 可以看出LayoutAnimationController类直接继承Object类,用于在组件上添加一些动画效果,这些组件包括常用的ListVie…...
外国做的中国动画视频网站/培训总结
多余的话不说,直接看代码: 1) 在 common/config/main.php 写入配置代码 1 // 配置翻译信息2 i18n > [3 translations > [4 app* > [ //app表示整个文件可以替换掉5 class &g…...
做品牌网站哪个好用/深圳百度seo培训
1、Windows平台 在windows命令行窗口下执行: C:/>netstat -ano 我们可以知道某一端口被那个进程(对应PID)占用; 然后我们可以打开任务管理器;查看某一PID对应的进程名; 如果PID没有显示,菜单…...
做网站手机版/郑州搜索引擎优化
猴子数据分析 图解SQL面试题11 【题目】下面是学生的成绩表(表名score,列名:学号、成绩),使用SQL查找所有至少连续出现3次的成绩。 例如,“成绩”这一列里84是连续出现3次的成绩。 【解题思路】1.条件1&…...
网站360自然排名要怎么做/新闻稿发布
在iOS app 中经常会嵌套html 代码,js运行alert时会出现这个问题,见图: 提示框的title为所在目录文件夹名字: 解决方案: 用 iOS native 的uiwebview 的扩展方法来监听 js的alert 然后自定义 alert 的title #import &…...