Browse Source

fix(live): 调整直播退出流程和RTC token续期逻辑

- 修改直播退出时overlay隐藏与页面返回的顺序
- 新增RTC token即将过期时的自动续期处理
- 引入agora_token_generator库以支持token生成
- 在onTokenPrivilegeWillExpire回调中实现token更新机制
ios
Jolie 3 months ago
parent
commit
48e51dbece
2 changed files with 13 additions and 5 deletions
  1. 11
      lib/rtc/rtc_manager.dart
  2. 7
      lib/widget/live/live_room_user_header.dart

11
lib/rtc/rtc_manager.dart

@ -1,6 +1,7 @@
import 'dart:convert'; import 'dart:convert';
import 'package:agora_rtc_engine/agora_rtc_engine.dart'; import 'package:agora_rtc_engine/agora_rtc_engine.dart';
import 'package:agora_token_generator/agora_token_generator.dart';
import 'package:dating_touchme_app/rtc/rtm_manager.dart'; import 'package:dating_touchme_app/rtc/rtm_manager.dart';
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import 'package:get/get.dart'; import 'package:get/get.dart';
@ -260,6 +261,16 @@ class RTCManager {
onConnectionLost!(connection); onConnectionLost!(connection);
} }
}, },
onTokenPrivilegeWillExpire: (RtcConnection connection, String token) {
String rtcToken = RtcTokenBuilder.buildTokenWithUid(
appId: '4c2ea9dcb4c5440593a418df0fdd512d',
appCertificate: '16f34b45181a4fae8acdb1a28762fcfa',
channelName: _currentChannelId ?? '',
uid: _currentUid ?? 0,
tokenExpireSeconds: 3600, // 2 hours
);
_engine?.renewToken(rtcToken);
},
onError: (ErrorCodeType err, String msg) { onError: (ErrorCodeType err, String msg) {
print('RTC Engine 错误:$err,消息:$msg'); print('RTC Engine 错误:$err,消息:$msg');
if (onError != null) { if (onError != null) {

7
lib/widget/live/live_room_user_header.dart

@ -138,14 +138,11 @@ class LiveRoomUserHeader extends StatelessWidget {
if (hasGuests) SizedBox(height: 15.w), if (hasGuests) SizedBox(height: 15.w),
GestureDetector( GestureDetector(
onTap: () async { onTap: () async {
//
SmartDialog.dismiss(); SmartDialog.dismiss();
// overlay
overlayController.hide();
//
Get.back(); Get.back();
//
overlayController.hide();
await roomController.leaveChannel(); await roomController.leaveChannel();
// overlay
}, },
child: Row( child: Row(
mainAxisAlignment: MainAxisAlignment.center, mainAxisAlignment: MainAxisAlignment.center,

Loading…
Cancel
Save