在Google API(日历)上进行身份验证的方法

时间:2020-06-18 19:12:38

标签: flutter oauth-2.0 google-api google-calendar-api

我尝试使用

从Google Calendar API检索事件
import 'package:googleapis_auth/auth_io.dart';
import 'package:http/http.dart' as http;
import 'package:googleapis/calendar/v3.dart' as calendarapi;

...

class _MyHomePageState extends State<MyHomePage> {

  final accountCredentials = new ServiceAccountCredentials.fromJson(
    {
    "private_key_id": "562ab...",
    "private_key": "-----BEGIN PRIVATE KEY--............----END PRIVATE KEY-----\n",
    "client_email": "xxx@xxx.iam.gserviceaccount.com",
    "client_id": "1073.......",
    "type": "service_account",
    "project_id": "myapi"
   }
  );

  final scopes = [calendarapi.CalendarApi.CalendarScope];
  final client = new http.Client();
 

  void getCalendarEvents() { 
      clientViaServiceAccount(accountCredentials, scopes).then((client) {
        var calendar = new calendarapi.CalendarApi(client);
        var calEvents = calendar.events.list("primary");
        calEvents.then((calendarapi.Events events) {
          events.items.forEach((calendarapi.Event event) {print(event.summary);});
        });
          client.close();
      });
  }
}

...

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

clientViaServiceAccount行引发异常

FormatException(FormatException:输入意外结束)

凭据应该很好,因为我已经在其他客户端中使用了它们。在提琴手中,没有外向流量,因此即使在发送请求之前看起来也有错误。代码有什么问题?

编辑

这是错误的堆栈

══╡颤振测试框架引起的异常CA following以下 运行测试时引发了FormatException:输入意外结束

引发异常时,这是堆栈: #0 _ChunkedJsonParser.fail(dart:convert-patch / convert_patch.dart:1392:5) #1 _ChunkedJsonParser.close(dart:convert-patch / convert_patch.dart:510:7) #2 _JsonStringDecoderSink.close(dart:convert-patch / convert_patch.dart:1487:13) #3 _ConverterStreamEventSink.close(dart:convert / chunked_conversion.dart:80:18) #15 _StringAdapterSink.close(dart:convert / string_conversion.dart:249:11) #16 _Utf8ConversionSink.close(dart:convert / string_conversion.dart:300:20) #17 _ConverterStreamEventSink.close(dart:convert / chunked_conversion.dart:80:18) #46 AutomatedTestWidgetsFlutterBinding.pump。 (包:flutter_test / src / binding.dart:855:25) #49 TestAsyncUtils.guard(软件包:flutter_test / src / test_async_utils.dart:69:41) #50 AutomatedTestWidgetsFlutterBinding.pump(包:flutter_test / src / binding.dart:840:27) #51 WidgetTester.pumpWidget。 (软件包:flutter_test / src / widget_tester.dart:318:22) #54 TestAsyncUtils.guard(package:flutter_test / src / test_async_utils.dart:69:41) #55 WidgetTester.pumpWidget(软件包:flutter_test / src / widget_tester.dart:315:27) #56主要。 (文件:/// C:/projekte/flutter_garden/flutter_garden/test/widget_test.dart:9:18) #58主要。 (文件:/// C:/projekte/flutter_garden/flutter_garden/test/widget_test.dart:7:43) #59 testWidgets ..(package:flutter_test / src / widget_tester.dart:119:25) #61 testWidgets ..(package:flutter_test / src / widget_tester.dart:117:9) #62 TestWidgetsFlutterBinding._runTestBody(package:flutter_test / src / binding.dart:648:19) #76 AutomatedTestWidgetsFlutterBinding.runTest。 (包:flutter_test / src / binding.dart:1032:17) #78 AutomatedTestWidgetsFlutterBinding.runTest。 (package:flutter_test / src / binding.dart:1020:35)(从74个帧中删除了 _FakeAsync类,dart:async软件包,dart:async-patch软件包和 软件包stack_trace)

1 个答案:

答案 0 :(得分:1)

通过仿真器而不是通过单元测试运行代码可以解决问题。

相关问题