我已经在 Flutter 中使用 Google Analytics,如何从本机 iOS/Android 代码向其发送事件?

Asa*_*ssi 8 android google-analytics ios flutter firebase-analytics

我使用 firebase 进行 flutter,其中所有依赖项都位于 pubspec.yaml 我想向 Firebase Analytics 发送一个事件,以进行本机端的一些活动 - 主屏幕小部件、收到的通知等。

是否可以?FirebaseAnalytics 类在 Android 上无法识别,如果我将其添加到 gradle,它可能会与 flutter 发生冲突。

Huy*_*yen 0

使用PlatformChannel是针对这种情况的解决方案,请参阅platform-channels。示例代码(原始代码来自此处

  • 安卓端:
package com.example.shared;

import android.content.Intent;
import android.os.Bundle;

import androidx.annotation.NonNull;

import io.flutter.plugin.common.MethodChannel;
import io.flutter.embedding.android.FlutterActivity;
import io.flutter.embedding.engine.FlutterEngine;
import io.flutter.plugins.GeneratedPluginRegistrant;

public class MainActivity extends FlutterActivity {

  private static final String CHANNEL = "app.channel.shared.data";
  private String sharedText;

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    
    sharedText = "Home screen displayed";
  }

  @Override
  public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
      GeneratedPluginRegistrant.registerWith(flutterEngine);

      new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
              .setMethodCallHandler(
                      (call, result) -> {
                          if (call.method.contentEquals("onScreenView")) {
                              result.success(sharedText);
                              sharedText = null;
                          }
                      }
              );
  }

}

Run Code Online (Sandbox Code Playgroud)
  • 颤振侧:
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';

void main() {
  runApp(const SampleApp());
}

class SampleApp extends StatelessWidget {
  const SampleApp({super.key});

  // This widget is the root of your application.
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Sample Shared App Handler',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: const SampleAppPage(),
    );
  }
}

class SampleAppPage extends StatefulWidget {
  const SampleAppPage({super.key});

  @override
  State<SampleAppPage> createState() => _SampleAppPageState();
}

class _SampleAppPageState extends State<SampleAppPage> {
  static const platform = MethodChannel('app.channel.shared.data');
  String dataShared = 'No data';

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(body: Center(child: Text(dataShared)));
  }

  Future<void> getSharedText() async {
    var sharedData = await platform.invokeMethod('onNotificationClicked');
    if (sharedData != null) {
      setState(() {
        dataShared = sharedData;

        // Send data to Firebase Analytics here
      });
    }
  }
}
Run Code Online (Sandbox Code Playgroud)