在创建agora视频通话应用程序时,我遇到了如下错误

握手异常(握手异常:客户端中的握手错误(操作系统错误:CERTIFICATE\u VERIFY\u失败:证书已过期(Handshake.cc:393)))

这是它抛出错误的地方

Response _response = await get(Uri.parse(link));

我的代码是

import 'dart:convert';
import 'package:agora_uikit/agora_uikit.dart';
import 'package:flutter/material.dart';
import 'package:http/http.dart'; 
class VedioCall extends StatefulWidget {
  String channelName = "test";
  VedioCall({required this.channelName});
  @override
  State<VedioCall> createState() => _VedioCallState();
}

class _VedioCallState extends State<VedioCall> {
 late final AgoraClient _client;
  bool _loading = true;
  String tempToken = "";

  @override
  void initState() {
    getToken();
    super.initState();
  }

  Future<void> getToken() async {
    String link =
        "https://Agora-Node-TokenServer.vinaym4.repl.co/access_token?channelName=${widget.channelName}";

    Response _response = await get(Uri.parse(link));
    Map data = jsonDecode(_response.body);
    setState(() {
      tempToken = data["token"];
    });
    _client = AgoraClient(
        agoraConnectionData: AgoraConnectionData(
          appId: "5a4c1108a1af4a76924c9461d120dc47",
          tempToken: tempToken,
          channelName: widget.channelName,
        ),
        enabledPermission: [Permission.camera, Permission.microphone]);
    Future.delayed(Duration(seconds: 1)).then(
      (value) => setState(() => _loading = false),
    );
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SafeArea(
        child: _loading
            ? Center(
                child: CircularProgressIndicator(),
              )
            : Stack(
                children: [
                  AgoraVideoViewer(
                    client: _client,
                  ),
                  AgoraVideoButtons(client: _client)
                ],
              ),
      ),
    );
    ;
  }
} 

推荐答案

证书今天刚换过.看起来Android没有正确读取初始日期作为包含日期.我想如果你明天试试,它会奏效的.

解决方案1

同时,你可以try 在另一个平台上进行测试,比如Windows个正在运行的平台.

解决方案2

或者,您可以使用以下内容覆盖证书验证:

class MyHttpOverrides extends HttpOverrides {
  @override
  HttpClient createHttpClient(SecurityContext? context) {
    return super.createHttpClient(context)
      ..badCertificateCallback =
          (X509Certificate cert, String host, int port) => true;
  }
}

main方法中设置HttpOverrides.global,如下所示:

void main() {
  HttpOverrides.global = MyHttpOverrides();
  runApp(const MyApp());
}

注意:这是一个安全风险,因 for each 无效证书都将被接受.因此,在生产中请删除此代码.


Screenshot

Flutter相关问答推荐

Flutter flutter_Local_notices点击通知时,打开特定页面

在Flutter中创建具有固定行的压缩水平列表

Flutter:如何从Bottom Navigator中删除此内容

带有可滚动页面(不包括分页区)的Flutter 页面视图

video_player在Android上返回401 Unauthorized with Bunny CDN

如何知道当前屏幕是否处于抖动状态?

将Riverpods NotifierProvider与State类一起使用

在Ffltter中,我已经使用了Ffltter_BLOC Cupit和Pusher,但当获得新数据时,UI没有更新

StateNotifer正在riverpod中提供初始状态值(bool)

无法在 Flutter 项目中安装最新版本的 image_picker

切换 Firebase 项目后 Flutter FirebaseAuthException 'configuration-not-found'

Container 的 Flutter 背景图片不会出现

你如何在 Flutter 中组合两个数组?

如何在 cupertino switch flutter 中添加文本

如何根据字符串值动态构建和显示小部件?

如何使用列Flutter 中文本占用的空间来控制svg宽度

Flutter如何从左到右连续 Select 多个列表项而不跳过任何

Flutter 活跃的互联网连接

一个或多个插件需要更高的 Android SDK 版本

Flutter_riverpod 安装时出现问题