【问题标题】:Flutter FCM topic messages from multiple firebase projects来自多个 Firebase 项目的 Flutter FCM 主题消息
【发布时间】:2020-09-07 13:04:15
【问题描述】:

Flutter 中是否有办法接收来自多个 firebase 项目的主题通知,我一直在寻找一种方法但没有运气,Flutter 插件似乎甚至没有通过 sender id 方法生成的令牌,我也在寻找一种使用rest api实现它但不知道从哪里开始的方法。欢迎任何方向。

【问题讨论】:

    标签: flutter firebase-cloud-messaging


    【解决方案1】:

    Firebase Cloud Functions 应该可以帮助您。 Cloud Functions 允许您在服务器端执行数据库、身份验证、云消息传递和其他功能。您可以在 fiebase 控制台上创建 Web 应用程序并使用 https 调用函数。这是我发现非常有用的教程的链接:

    https://www.youtube.com/playlist?list=PL4cUxeGkcC9i_aLkr62adUTJi53y7OjOf

    【讨论】:

    • 这是我发现的第一个想法,但是,Firebase Cloud Functions 即将受到限制,我认为它将很快成为付费服务不确定,令人困惑的是您必须初始化第二个应用程序使用 senderId 我认为您会在任何消息旁边收到 senderId,然后单独的女巫消息来自女巫项目。
    • 就所需的付费服务而言,它仍然有一个最低免费部分。自从切换到 blaze 计划后,我的开发成本仍然为零。消息发送可以按主题进行,设备订阅主题,然后无论从哪里发送,您都可以在消息的数据部分发送一个唯一的发件人ID。数据部分只是您可以过滤的地图列表。
    • 我会试试这个然后回来
    • 所以实际上firebase消息插件中不支持多应用,也没有instanceFor(FirebaseApp app),文档here
    • 您可以在函数中初始化一个辅助应用程序并将其发送到那里。我会看看我是否可以创建一个示例并编辑我的答案。
    【解决方案2】:

    确实,firebase 对 Flutter 的依赖并不支持这个功能,但是你可以创建 methodChannel 来调用来自 Flutter 的原生代码

    首先,在任意位置添加 MethodChannel

    static const platform = const MethodChannel('flutter.native/helper'); //<-- This string argument is custom, but must the same in java code
    Future<void> responseFromNativeCode() async {
      String response = "";
      try {
        String senderID = '52723600452'; // <----- this is the identifier of another project
        final String result = await platform.invokeMethod(
          'onNewToken', <String, dynamic>{'senderId': senderID});
        response = result;
        print(response); // <----- this is the token, with this, you can receive notifications from another firebase project
      } on PlatformException catch (e) {
        response = "Failed to Invoke: '${e.message}'.";
        print(response);
      }
    }
    

    此解决方案仅适用于 android,但是,您也需要实现 ios... swift

    现在...您需要在android中实现methodChannel并添加firebase实现...这是一个示例

    public class MainActivity extends FlutterActivity {
      private String CHANNEL = "flutter.native/helper";//This string must be same in flutter declaration
      private String token = "";
    
      @Override
      public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        super.configureFlutterEngine(flutterEngine);
    
        new MethodChannel(flutterEngine.getDartExecutor().getBinaryMessenger(), CHANNEL)
                    .setMethodCallHandler((call, result) -> {
                        if(call.method.equals("onNewToken")){//This string must be same too in flutter declaration
                            String senderId = call.argument("senderId");
                            TokenOtherProject a = new TokenOtherProject();
                            AsyncTask b = a.execute(senderId);
                            try {
                                b.get();//This is like await in flutter
                                result.success(token);//with this, you send the token to flutter project... and handler in page or idk
                            } catch (ExecutionException e) {
                                e.printStackTrace();
                            } catch (InterruptedException e) {
                                e.printStackTrace();
                            }
                        }
                    });
    }
    
    private class TokenOtherProject extends AsyncTask<String, Void, Void> {
        @Override
        protected Void doInBackground(String... params) {
            try {
                token = FirebaseInstanceId.getInstance().getToken(params[0],
                        FirebaseMessaging.INSTANCE_ID_SCOPE);
            } catch (IOException e) {
                e.printStackTrace();
            }
            new Handler(Looper.getMainLooper()).post(new Runnable(){
                @Override
                public void run() {
                    Log.d("*TokenNuevo: " , token + " ");
                }
            });
            return null;
        }
    }}
    

    您可以获得有关如何与本地人交流的更多信息... flutter fcm 包必须有这个功能但没有:/

    不管怎样……祝你好运

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多