使用FCM在Android应用中接收来自多个发件人(Firebase项目)的消息

时间:2018-11-14 18:28:57

标签: android firebase firebase-cloud-messaging

我正在尝试使用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();                

1 个答案:

答案 0 :(得分:0)

对我有用的方法与您所做的有点类似,但有一点区别:我一直引用从工厂方法FirebaseApp返回的FirebaseApp.initializeApp,然后传递FirebaseInstanceId.getInstance()的变量。另外,我认为首次调用初始化应用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();   

我不知道这是否有意义,但我希望它仍然能够为您提供帮助。