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

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

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

install_referrer

Pub

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

支持的平台

  • Android: ✅
  • iOS: ✅

如果你想要支持新的平台,请随时打开一个PR。

安装

  1. install_referrer: ^1.2.1 添加到你的 pubspec.yaml 文件中。
  2. 导入 import 'package:install_referrer/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
    },
);

示例代码

以下是一个完整的示例代码,展示了如何使用 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

1 回复

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

注意事项

  1. 权限处理:虽然install_referrer插件通常不需要额外的运行时权限,但确保你的应用具有必要的网络权限,因为某些情况下引荐信息可能需要从网络获取。
  2. 异步处理:获取安装引荐信息是一个异步过程,确保你在UI更新时使用setState来刷新状态。
  3. 测试:在真实环境中测试你的应用,确保引荐信息正确获取。你可以通过不同的安装渠道(如Google Play Store的不同广告系列)来测试。

通过上述步骤,你应该能够在Flutter应用中成功集成并使用install_referrer插件来追踪应用的安装来源。

回到顶部