Flutter安装来源追踪插件flutter_install_referrer的使用
Flutter安装来源追踪插件flutter_install_referrer的使用
flutter_install_referrer
是一个Flutter插件,允许你检测你的应用程序是如何被安装的。
该插件最初由 daad.mobi 开发,你可以在这里找到上游仓库 g123k/flutter_plugin_install_referrer。然而,该项目已经停止维护并且两年没有更新。这个新的包 fork 并重写了项目,将旧的 Java/Objective-C 代码迁移到现代的 Kotlin 和 Swift,并且增加了对 Swift Package Manager 的支持。
支持的平台
- Android: ✅
- iOS: ✅
欢迎提交 PR 来添加对新平台的支持或建议更改。
安装
- 在
pubspec.yaml
文件中添加flutter_install_referrer: ^2.0.1
。 - 导入
import 'package:flutter_install_referrer/flutter_install_referrer.dart';
- 通过调用
Future
InstallReferrer.referrer
获取值。
可能的值
Android
Store | Value |
---|---|
Google Play | InstallationAppReferrer.androidGooglePlay |
Amazon App Store | InstallationAppReferrer.androidAmazonAppStore |
Huawei App Gallery | InstallationAppReferrer.androidHuaweiAppGallery |
Oppo App Market | InstallationAppReferrer.androidOppoAppMarket |
Samsung App Shop | InstallationAppReferrer.androidSamsungAppShop |
Vivo App Store | InstallationAppReferrer.androidVivoAppStore |
Xiaomi App Store | InstallationAppReferrer.androidXiaomiAppStore |
Others | InstallationAppReferrer.androidManually |
如果应用是从第三方应用(如 GMail、Google Drive、Chrome 等)安装的,它将被视为 手动安装 (InstallationAppReferrer.androidManually
)。
如果应用是从设备上未预安装的应用商店(如 FDroid、Amazon App Shop 等)安装的,也将被视为 手动安装 (InstallationAppReferrer.androidManually
)。
如果 Android 应用处于调试模式,它将被标记为 InstallationAppReferrer.androidDebug
。
iOS
Store | Value |
---|---|
App Store | InstallationAppReferrer.iosAppStore |
Test Flight | InstallationAppReferrer.iosTestFlight |
如果 iOS 应用处于调试模式(例如:从模拟器),它将被标记为 InstallationAppReferrer.iosDebug
。
包名
你还可以通过调用 InstallReferrer.app
获取包名(Android)或应用 ID(iOS)。
Widgets
如果你想在 Widget 中直接接收结果,有两种选择:InstallReferrerDetectorListener
和 InstallReferrerDetectorBuilder
。
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: YourWidget(),
onReferrerAvailable: (InstallationApp? app) {
// TODO
},
);
示例代码
import 'package:flutter/material.dart';
import 'package:flutter_install_referrer/flutter_install_referrer.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
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_print
print(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
插件来检测应用的安装来源,并在界面上显示相关信息。希望这对你的项目有所帮助!
更多关于Flutter安装来源追踪插件flutter_install_referrer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安装来源追踪插件flutter_install_referrer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,以下是如何在Flutter项目中安装和使用flutter_install_referrer
插件的详细步骤,包括相关代码案例。
1. 添加依赖
首先,在你的Flutter项目的pubspec.yaml
文件中添加flutter_install_referrer
依赖。
dependencies:
flutter:
sdk: flutter
flutter_install_referrer: ^2.0.0 # 请确保使用最新版本
2. 安装依赖
在终端中运行以下命令来安装依赖:
flutter pub get
3. 配置Android平台
3.1 在android/app/src/main/AndroidManifest.xml
中添加权限
确保你的AndroidManifest.xml
文件中有以下权限:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.INTERNET"/>
<application
... >
...
</application>
</manifest>
3.2 配置build.gradle
确保在你的android/app/build.gradle
文件中应用了Google Play服务的依赖:
dependencies {
implementation 'com.google.android.gms:play-services-installreferrer:17.0.0' // 请确保使用最新版本
...
}
4. 使用插件
在你的Dart代码中,你可以使用flutter_install_referrer
插件来获取安装来源信息。
4.1 导入插件
在你的Dart文件中导入插件:
import 'package:flutter_install_referrer/flutter_install_referrer.dart';
4.2 获取安装来源信息
以下是一个简单的示例,展示了如何获取安装来源信息:
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? referrer;
String? installReferrer;
int? installBeginTimestamp;
int? firstInstallTimestamp;
bool isReferralInstalled = false;
@override
void initState() {
super.initState();
_getInstallReferrer();
}
Future<void> _getInstallReferrer() async {
try {
InstallReferrerInfo referrerInfo = await FlutterInstallReferrer.installReferrerInfo;
setState(() {
referrer = referrerInfo.referrer;
installReferrer = referrerInfo.installReferrer;
installBeginTimestamp = referrerInfo.installBeginTimestamp;
firstInstallTimestamp = referrerInfo.firstInstallTimestamp;
isReferralInstalled = referrerInfo.isReferralInstalled;
});
} catch (e) {
print("Error fetching install referrer info: $e");
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Install Referrer Info'),
),
body: Padding(
padding: const EdgeInsets.all(16.0),
child: Column(
crossAxisAlignment: CrossAxisAlignment.start,
children: <Widget>[
Text('Referrer: $referrer'),
Text('Install Referrer: $installReferrer'),
Text('Install Begin Timestamp: ${installBeginTimestamp?.toString()}'),
Text('First Install Timestamp: ${firstInstallTimestamp?.toString()}'),
Text('Is Referral Installed: $isReferralInstalled'),
],
),
),
),
);
}
}
注意事项
- 隐私政策:请确保你的应用有适当的隐私政策,并告知用户你正在收集安装来源信息。
- 测试:在测试环境中,你可能需要使用模拟的安装来源来测试这个功能。
- Google Play限制:请注意,Google Play对安装来源信息的访问有一些限制,特别是在Android 12及更高版本上。
以上代码应该能帮助你在Flutter项目中安装和使用flutter_install_referrer
插件来获取安装来源信息。