Flutter安装来源追踪插件flutter_install_referrer的使用

发布于 1周前 作者 eggper 来自 Flutter

Flutter安装来源追踪插件flutter_install_referrer的使用

Pub

flutter_install_referrer 是一个Flutter插件,允许你检测你的应用程序是如何被安装的。

该插件最初由 daad.mobi 开发,你可以在这里找到上游仓库 g123k/flutter_plugin_install_referrer。然而,该项目已经停止维护并且两年没有更新。这个新的包 fork 并重写了项目,将旧的 Java/Objective-C 代码迁移到现代的 Kotlin 和 Swift,并且增加了对 Swift Package Manager 的支持。

支持的平台

  • Android: ✅
  • iOS: ✅

欢迎提交 PR 来添加对新平台的支持或建议更改。

安装

  1. pubspec.yaml 文件中添加 flutter_install_referrer: ^2.0.1
  2. 导入 import 'package:flutter_install_referrer/flutter_install_referrer.dart';
  3. 通过调用 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 中直接接收结果,有两种选择:InstallReferrerDetectorListenerInstallReferrerDetectorBuilder

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

1 回复

更多关于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'),
            ],
          ),
        ),
      ),
    );
  }
}

注意事项

  1. 隐私政策:请确保你的应用有适当的隐私政策,并告知用户你正在收集安装来源信息。
  2. 测试:在测试环境中,你可能需要使用模拟的安装来源来测试这个功能。
  3. Google Play限制:请注意,Google Play对安装来源信息的访问有一些限制,特别是在Android 12及更高版本上。

以上代码应该能帮助你在Flutter项目中安装和使用flutter_install_referrer插件来获取安装来源信息。

回到顶部