【问题标题】:Receive messages from multiple senders (Firebase projects) in Android app using FCM使用 FCM 在 Android 应用中接收来自多个发件人(Firebase 项目)的消息
【发布时间】:2018-11-14 18:28:56
【问题描述】:

我正在尝试使用this post 中的指针接收来自多个 Firebase 项目(发件人)的消息。我已经使用适当的选项初始化了 FirebaseApp,并在每个发件人/项目上调用了 getToken()。但这不起作用。我收到的唯一 FCM 消息来自其 google-services.json 已包含在项目中的项目。如果我在这里遗漏了什么,请告诉我。谢谢。

            FirebaseApp.initializeApp(context);

            FirebaseOptions options1 = new FirebaseOptions.Builder()
                    .setApiKey("apiKey1")
                    .setApplicationId("appId1")
                    .setGcmSenderId("senderId1")
                    .setStorageBucket("bucket1")
                    .setDatabaseUrl("database1")
                    .build();
            FirebaseApp.initializeApp(context, options1, "project1");

            FirebaseOptions options2 = new FirebaseOptions.Builder()
                    .setApiKey("apikey2")
                    .setApplicationId("appId2")
                    .setGcmSenderId("sender2")
                    .setStorageBucket("bucket2")
                    .setDatabaseUrl("database2")
                    .build();
            FirebaseApp.initializeApp(context, options2, "project2");

            new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... params) {

                    try {
                        String token1 = FirebaseInstanceId.getInstance(FirebaseApp.getInstance("project1")).getToken("sender1", FirebaseMessaging.INSTANCE_ID_SCOPE);
                        String token2 = FirebaseInstanceId.getInstance(FirebaseApp.getInstance("project2")).getToken("sender2", FirebaseMessaging.INSTANCE_ID_SCOPE);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void result) {

                }
            }.execute();

           FirebaseMessaging fcm = FirebaseMessaging.getInstance();                

【问题讨论】:

  • 您找到任何解决方案了吗?请更新。我也遇到了类似的问题。
  • 我有一个使用 FCM 接收命令的 android 库。当我在另一个也使用 FCM 的应用程序中导入我的库时会出现问题。所以我的 FCM 服务(库)没有收到任何 FCM 通知,但应用程序的 FCM 服务收到了所有通知。所以我的问题是,如何将 FCM 服务连接到特定的 firebase 项目?帮帮我!
  • @AbhinavSuthar 我们已经使用构建变体解决了这个问题。我们有两个独立的构建变体,具有不同的包名称,并在不同的工作流程中收集了令牌。这是解决我的问题的一种更简洁的方法,但是是的,我还没有找到原始问题陈述的解决方案。

标签: android firebase firebase-cloud-messaging


【解决方案1】:

对我有用的方式与您所做的有点相似,但略有不同:我保留了从工厂方法 FirebaseApp.initializeApp 返回的 FirebaseApp 的引用,然后将变量传递给 @ 987654323@。另外,我不认为第一次调用初始化应用程序FirebaseApp.initializeApp(context) 很有用,因为在所有情况下您都不需要它。

我的代码版本是:

            //FirebaseApp.initializeApp(context);

            FirebaseOptions options1 = new FirebaseOptions.Builder()
                    .setApiKey("apiKey1")
                    .setApplicationId("appId1")
                    .setGcmSenderId("senderId1")
                    .setStorageBucket("bucket1")
                    .setDatabaseUrl("database1")
                    .build();
            FirebaseApp app1 = FirebaseApp.initializeApp(context, options1, "project1");

            FirebaseOptions options2 = new FirebaseOptions.Builder()
                    .setApiKey("apikey2")
                    .setApplicationId("appId2")
                    .setGcmSenderId("sender2")
                    .setStorageBucket("bucket2")
                    .setDatabaseUrl("database2")
                    .build();
            FirebaseApp app2 = FirebaseApp.initializeApp(context, options2, "project2");

            new AsyncTask<Void, Void, Void>() {
                @Override
                protected Void doInBackground(Void... params) {

                    try {
                        String token1 = FirebaseInstanceId.getInstance(app1).getToken("sender1", FirebaseMessaging.INSTANCE_ID_SCOPE);
                        String token2 = FirebaseInstanceId.getInstance(app2).getToken("sender2", FirebaseMessaging.INSTANCE_ID_SCOPE);
                    } catch (IOException e) {
                        e.printStackTrace();
                    }
                    return null;
                }

                @Override
                protected void onPostExecute(Void result) {

                }
            }.execute();

           FirebaseMessaging fcm = FirebaseMessaging.getInstance();   

我不知道这是否有意义,但我希望它无论如何都能帮助到你。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-03
    • 1970-01-01
    • 2017-12-17
    • 2017-06-26
    相关资源
    最近更新 更多