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

如何在Flutter的TDLib Telegram库中持久化会话/保存用户认证状态

TDLib Dart 用户会话持久化实现方案

TDLib 原生自带会话持久化能力,你使用的 Dart 封装库是对原生 TDLib 接口的桥接,无需自行实现会话信息的加密存储逻辑,按以下步骤配置即可实现免重复登录:

配置步骤

  • 初始化 TDLib 客户端时,在 TdlibParameters 参数中正确配置 databaseDirectory 和 filesDirectory 两个参数,指定TDLib存储会话数据、本地缓存的本地路径,只要路径不会被应用常规清理逻辑删除,会话就会永久保留
  • 初始化时不要开启 useTestDc 后每次启动重置数据库目录,否则会清空原有会话信息
  • 登录流程仅在 TDLib 抛出 updateAuthorizationState 更新、且状态为 authorizationStateWaitPhoneNumber 时触发,其余状态下如果返回 authorizationStateReady 直接进入应用主界面即可,不需要重复调用登录接口

示例代码

import 'package:tdlib/tdlib.dart';
import 'package:path_provider/path_provider.dart';

Future<void> initTdlibClient() async {
  // 获取应用合法本地存储目录
  final appDocDir = await getApplicationDocumentsDirectory();
  final tdLibStorageDir = '${appDocDir.path}/tdlib_data';

  final tdParams = TdlibParameters(
    apiId: 你申请的Telegram API_ID,
    apiHash: "你申请的Telegram API_HASH",
    databaseDirectory: tdLibStorageDir,
    filesDirectory: '$tdLibStorageDir/files',
    useFileDatabase: true,
    useChatInfoDatabase: true,
    useMessageDatabase: true,
    useSecretChats: true,
    enableStorageOptimizer: true,
    systemLanguageCode: "zh",
    deviceModel: "你的设备型号",
    systemVersion: "设备系统版本",
    applicationVersion: "你的应用版本号",
  );

  await TdClient.instance.send(SetTdlibParameters(parameters: tdParams));
}

常见问题排查

  • 热重载后需要重新登录的问题,90% 以上是两种原因:一是每次热重载都重新初始化TDLib客户端且没有复用原有存储目录,二是授权状态监听逻辑异常,每次启动都强制走手机号输入流程
  • iOS端需要确认你指定的存储目录在应用沙盒内,拥有读写权限,否则TDLib无法写入会话数据会导致登录状态丢失
  • 不需要自行保存手机号、验证码等敏感信息,TDLib会自动将授权会话加密存储到你指定的目录下,下次启动直接读取即可完成自动登录

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 09:36:01