You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter单设备限单账号创建(两日解禁循环)方案及设备ID获取咨询

方案可行性分析

你的方案完全可行,核心逻辑通过设备标识绑定账号创建记录,结合时间校验实现循环封禁限制,具体落地时可以参考以下流程:

  • 用户发起账号创建请求时,先获取设备标识,调用Firebase查询该标识的历史记录
  • 若存在记录:计算当前时间与创建时间的差值,小于48小时则拦截请求;超过48小时则允许创建,同时更新记录中的时间(或删除旧记录后新增)
  • 若不存在记录:直接允许创建账号,并将设备标识和当前时间存入Firebase

需要注意的细节:

  • 必须通过Firebase云函数(Cloud Functions)处理校验和写入操作,禁止客户端直接修改设备记录,避免用户篡改数据绕过限制
  • 部分设备标识可能因系统重置、刷机、卸载应用等操作改变,可提前告知用户这类场景下限制可能失效,或结合广告ID(需注意用户可重置)做补充校验
获取设备固定标识的方法

Flutter中可以使用device_info_plus包获取各平台的设备标识,具体步骤如下:

  1. 添加依赖到pubspec.yaml:
dependencies:
  device_info_plus: ^9.0.2
  1. 编写工具函数获取标识:
import 'package:device_info_plus/device_info_plus.dart';
import 'dart:io';

Future<String?> getUniqueDeviceId() async {
  final DeviceInfoPlugin deviceInfo = DeviceInfoPlugin();
  String? deviceId;

  if (Platform.isAndroid) {
    final AndroidDeviceInfo androidInfo = await deviceInfo.androidInfo;
    // AndroidId:稳定性较高,刷机/恢复出厂设置后会变更
    deviceId = androidInfo.id;
  } else if (Platform.isIOS) {
    final IosDeviceInfo iosInfo = await deviceInfo.iosInfo;
    // identifierForVendor:同一开发者应用下的唯一标识,卸载所有该开发者应用后会重置
    deviceId = iosInfo.identifierForVendor;
  }
  // 其他平台(如Web、Windows)可按需补充对应标识逻辑
  return deviceId;
}

平台标识说明:

  • Android:优先使用AndroidId,无需额外权限,稳定性较好;IMEI、MAC地址等敏感标识在Android 10+已被限制获取,不建议使用
  • iOS:identifierForVendor是合规且相对稳定的选择,若需要跨开发者应用的标识,可考虑advertisingIdentifier,但需请求权限且用户可重置

内容的提问来源于stack exchange,提问作者x98lol

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 18:18:27