import 'dart:async'; import 'package:flutter/foundation.dart'; import 'package:play_install_referrer/play_install_referrer.dart'; /// 安装来源 referrer 服务(用于 ch/crest 渠道参数) class ReferrerService { ReferrerService._(); static String? _cachedReferrer; static final Completer _completer = Completer(); /// 获取 referrer,Android 使用 Google Play Install Referrer,iOS 返回空 static Future getReferrer() async { if (_cachedReferrer != null) return _cachedReferrer; if (_completer.isCompleted) return _completer.future; if (defaultTargetPlatform != TargetPlatform.android) { _cachedReferrer = ''; if (!_completer.isCompleted) _completer.complete(''); return ''; } try { final details = await PlayInstallReferrer.installReferrer; _cachedReferrer = details.installReferrer ?? ''; } catch (_) { _cachedReferrer = ''; } if (!_completer.isCompleted) _completer.complete(_cachedReferrer); return _cachedReferrer; } /// 初始化并缓存 referrer(建议在 app 启动时调用) static Future init() async { await getReferrer(); } }