Flutter安装来源追踪插件install_referrer的使用
Flutter安装来源追踪插件install_referrer的使用
install_referrer
这是一个Flutter插件,允许你检测应用程序是如何被安装的。
支持的平台
- Android: ✅
- iOS: ✅
如果你想要支持新的平台,请随时打开一个PR。
安装
- 将
install_referrer: ^1.2.1
添加到你的pubspec.yaml
文件中。 - 导入
import 'package:install_referrer/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
},
);
示例代码
以下是一个完整的示例代码,展示了如何使用 install_referrer
插件来显示应用的安装来源信息:
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);
@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";
}
}
}
这个示例代码展示了如何使用 install_referrer
插件来获取和显示应用的安装来源信息。你可以根据需要进行修改和扩展。
更多关于Flutter安装来源追踪插件install_referrer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter安装来源追踪插件install_referrer的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter应用中,使用install_referrer
插件可以帮助你追踪应用的安装来源。这个插件允许你获取安装引荐信息,这对于分析用户获取渠道非常有用。下面是一个如何在Flutter项目中使用install_referrer
插件的示例代码。
步骤一:添加依赖
首先,你需要在pubspec.yaml
文件中添加install_referrer
插件的依赖:
dependencies:
flutter:
sdk: flutter
install_referrer: ^2.0.0 # 请确保使用最新版本
然后运行flutter pub get
来获取依赖。
步骤二:配置Android
对于Android平台,你需要在AndroidManifest.xml
中添加必要的权限和接收器(Receiver):
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.yourapp">
<uses-permission android:name="android.permission.INTERNET"/>
<application
...>
<!-- Install Referrer Receiver -->
<receiver android:name="com.android.installreferrer.api.InstallReferrerReceiver"
android:exported="true"
android:permission="android.permission.INSTALL_PACKAGES">
<intent-filter>
<action android:name="com.android.vending.INSTALL_REFERRER" />
</intent-filter>
</receiver>
<service
android:name="com.android.installreferrer.api.InstallReferrerService"
android:exported="false"
android:permission="android.permission.BIND_INSTALL_REFERRER_SERVICE">
</service>
...
</application>
</manifest>
步骤三:实现插件调用
接下来,在你的Dart代码中实现插件的调用。以下是一个简单的示例,展示如何获取安装引荐信息:
import 'package:flutter/material.dart';
import 'package:install_referrer/install_referrer.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
String? referrerInfo;
@override
void initState() {
super.initState();
_checkInstallReferrer();
}
Future<void> _checkInstallReferrer() async {
try {
final InstallReferrer installReferrer = InstallReferrer();
String? referrer = await installReferrer.referrer;
setState(() {
referrerInfo = referrer ?? 'No referrer information found.';
});
} catch (e) {
setState(() {
referrerInfo = 'Error retrieving referrer: ${e.toString()}';
});
}
}
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Install Referrer Example'),
),
body: Center(
child: Text(referrerInfo ?? 'Loading referrer information...'),
),
),
);
}
}
注意事项
- 权限处理:虽然
install_referrer
插件通常不需要额外的运行时权限,但确保你的应用具有必要的网络权限,因为某些情况下引荐信息可能需要从网络获取。 - 异步处理:获取安装引荐信息是一个异步过程,确保你在UI更新时使用
setState
来刷新状态。 - 测试:在真实环境中测试你的应用,确保引荐信息正确获取。你可以通过不同的安装渠道(如Google Play Store的不同广告系列)来测试。
通过上述步骤,你应该能够在Flutter应用中成功集成并使用install_referrer
插件来追踪应用的安装来源。