Aqe*_*med 8 firebase google-cloud-logging flutter
我想在 Flutter 移动应用中使用 Cloud Logging。另外,我会将 Cloud Logging 与 Firebase 链接起来。
有什么方法可以帮助我在 Flutter 中使用 Cloud Logging?
我的解决方案如下所示:创建一个只能访问日志记录的服务帐户。我创建了一个名为 的服务帐户logger,并添加了“日志编写者”权限。它只包含写日志的能力:
添加服务帐户密钥,如logger.json资产文件夹中所示。
然后将以下内容添加到 pubspec.yaml 中:
...
dependencies:
flutter:
sdk: flutter
...
googleapis: ^9.2.0
googleapis_auth: ^1.3.1
...
flutter:
...
assets:
- logger.json
...
Run Code Online (Sandbox Code Playgroud)
然后是一个最小的工作示例:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:googleapis/logging/v2.dart';
import 'package:googleapis_auth/auth_io.dart';
late final LoggingApi logger;
Future<void> logEvent(String descr) async {
final Map<String, String> params = {'message': descr};
final logEntry = LogEntry(
logName: 'projects/<project-id>/logs/test-log',
jsonPayload: params,
resource: MonitoredResource(type: 'global'),
labels: {'isWeb': '0'});
final req = WriteLogEntriesRequest(entries: [logEntry]);
logger.entries.write(req);
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
final f = await rootBundle.loadString('assets/logger.json');
AutoRefreshingAuthClient httpClient = await clientViaServiceAccount(
ServiceAccountCredentials.fromJson(String.fromCharCodes(f.codeUnits)), [
LoggingApi.loggingWriteScope,
]);
logger = LoggingApi(httpClient);
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) => const MaterialApp(home: MyHomePage());
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int _counter = 0;
void _incrementCounter() {
logEvent('test log no. $_counter');
setState(() => _counter++);
}
@override
Widget build(BuildContext context) => Scaffold(
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
const Text('You have pushed the button this many times:'),
Text(
'$_counter',
style: Theme.of(context).textTheme.headline4,
),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: _incrementCounter,
tooltip: 'Increment',
child: const Icon(Icons.add),
),
);
}
Run Code Online (Sandbox Code Playgroud)
一般来说,将服务帐户添加为资产被认为是不安全的。但由于这只能写入日志条目,所以我想这并不重要。您可以考虑对其进行编码,或使用正确的权限规则将其添加到存储中。
| 归档时间: |
|
| 查看次数: |
1902 次 |
| 最近记录: |