Облачные сообщения Firebase не работают для варианта сборки на Android - PullRequest
0 голосов
/ 27 мая 2018

У меня есть 2 проекта в Firebase: nl.companyname и nl.companyname.acc :

enter image description here

Это мой build.gradle:

flavorDimensions "type"
productFlavors {
    acceptance {
        dimension="type"
        applicationIdSuffix ".acc"
        versionNameSuffix "-acc"
    }
    production {
        dimension="type"
        applicationIdSuffix ""
        versionNameSuffix ""
    }
}

Загрузочный файл google-services.json находится в каталоге: app / google-services.json

AndroidStudio входит в учетную запись Google и синхронизируется:

enter image description here

Сообщение отображается как успешно отправленное: enter image description here

Описание проблемы:

  • При отправке сообщения на nl.companyname , оно работает.

  • При отправке сообщения и нацеливании на Token ID устройства оно работает.

  • Но nl.companyname.acc не работает.

Выполнены шаги:

  • Я удалил приложение .acc в Firebase и заново добавил его (и загрузил новый файл json).

enter image description here

Любая помощь очень ценится.

Ответы [ 3 ]

0 голосов
/ 07 июня 2018

Вы уверены, что ваши google-services.json такие?

{
  "project_info": {
    ...
  },
  "client": [
    {
      "client_info": {
        ...
        "android_client_info": {
          "package_name": "nl.companyname"
        }
      },
      ...
    },
    {
      "client_info": {
        ...
        "android_client_info": {
          "package_name": "nl.companyname.acc"
        }
      },
      ...
    }
  ],
  ...
}

На вашем app/gralde.build попробуйте что-то подобное

buildTypes {
    acceptance {
        applicationIdSuffix '.acc'
        ...
    }
    release {
        ...
    }
}
0 голосов
/ 08 июня 2018

Удалить google-services.json из build.gradle

Создать класс приложения

public class MyApplication extends Application {

    @Override
    public void onCreate() {
        super.onCreate();

        FirebaseOptions options = new FirebaseOptions.Builder()
                .setApplicationId("0")
                .build();
        FirebaseApp.initializeApp(this, options);
    }

}

Зарегистрировать этот класс в манифесте

 <application
        android:name=".extra.MyApplication"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:theme="@style/AppTheme">

В своей основной деятельности вынужно вызвать ниже метод, который генерирует токен FCM, (который похож на FirebaseInstanceIdService)

new GetFCMToken().execute();

 private class GetFCMToken extends AsyncTask<String,Integer,String>{

        @Override
        protected String doInBackground(String... params) {
            //you can update this id based on your flavour
        String senderId = "1223";//put your FireBase project Sender Id


            String sToken = "";
            try {
                // Check for current token

                // Resets Instance ID and revokes all tokens.
                FirebaseInstanceId.getInstance().deleteInstanceId();

                // Clear current saved token
                // Check for success of empty token


                // Now manually call onTokenRefresh()
                Log.d("TAG", "Getting new token");
                sToken = FirebaseInstanceId.getInstance().getToken(senderId, "FCM");
                Log.d("TAG", "s" + sToken);

            } catch (IOException e) {
                e.printStackTrace();
                Log.e("e", "e", e);
            }
            return sToken;
        }

        @Override
        protected void onPostExecute(String fcmToken) {
            super.onPostExecute(fcmToken);
            //Use this token to send notification
            Log.e("FCM_TOKEN",fcmToken);
           //Send Token server


        }

    }

Вы можете найти SenderId из пожарной базы, потому что -> Настройка проекта -> Облачные сообщения.И убедитесь, что вы добавили имя вашего пакета в Fcm Console.

FirebaseMessegingReceiver.class работает как есть.

Основное преимущество этого кода в том, что

  1. Нет необходимости добавлять google-services.json
  2. Несколько проектов Firebase работают с одним кодом.
  3. Нет необходимости добавлять FirebaseInstanceIdService в Manifest.
0 голосов
/ 01 июня 2018

В Документе Firebase он поддерживает несколько проектов на основе разновидностей.

Вы можете иметь несколько google-services.json файлов для разных вариантов сборки) поместив файлы google-services.json в специальные каталоги, названные для каждого варианта в корневом каталоге модуля приложения.Например, если у вас есть варианты сборки " development " и " release ", ваша конфигурация может быть организована следующим образом:

app/
    google-services.json
    src/development/google-services.json
    src/release/google-services.json
    ...

Вы можетенайти полную инструкцию на здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...