В выпущенной версии приложения токен FCM не генерируется на устройствах Samsung - PullRequest
1 голос
/ 22 января 2020

Я использую FCM для отправки уведомлений в моем приложении. Первая версия моего приложения находится на стадии тестирования, и в устройствах Samsung возникает ошибка, поскольку токен FCM не генерируется на этих устройствах. Вот мой код, который генерирует токен:

FirebaseInstanceId.getInstance().instanceId.addOnCompleteListener(OnCompleteListener { task ->
                    if (!task.isSuccessful) {
                        return@OnCompleteListener
                    }

                    // Get new Instance ID token
                    val token = task.result?.token

                    val ref = FirebaseDatabase.getInstance().getReference("/users/$uid")
                    ref.child("Message Token").setValue(token)

                })

Я также проверил свою версию SplashActivity для Google Play. Вот код:

private fun checkPlayServices() {
    val apiAvailability = GoogleApiAvailability.getInstance()
    val resultCode = apiAvailability.isGooglePlayServicesAvailable(this)
    if (resultCode != ConnectionResult.SUCCESS)
    {
        if (apiAvailability.isUserResolvableError(resultCode))
        {
            val dialog: Dialog = apiAvailability.getErrorDialog(this, resultCode, PLAY_SERVICES_RESOLUTION_REQUEST)
            dialog.setCancelable(false)
            dialog.setCanceledOnTouchOutside(false)
            dialog.show()
        }
        else
        {
            Log.d("Demo App", "This device is not supported.")
            val dialogApp = AlertDialog.Builder(this@SplashActivity)
            dialogApp.setTitle("Error")
            dialogApp.setMessage("Some features in the app may not work in your device. Download latest version of play services?")
            dialogApp.setCancelable(false)
            dialogApp.setPositiveButton("OK"
            ) { _, _ ->
                GoogleApiAvailability.getInstance().makeGooglePlayServicesAvailable(this).addOnSuccessListener { Toast.makeText(this@SplashActivity,"Google Play Services Updated. Please Logout and Re-Login", Toast.LENGTH_LONG).show() }
                    .addOnFailureListener { Toast.makeText(this@SplashActivity,"Could not update Google Play Services", Toast.LENGTH_LONG).show() }
            }.setNegativeButton("No"){_, _ ->
            }
            dialogApp.show()
        }

    }
}

Чтобы добавить к вышесказанному. Когда я тестировал в реальных устройствах Samsung в отладочной версии, а также в эмуляторах, токен был сгенерирован правильно. На самом деле есть одно устройство Samsung, на которое я установил приложение прямо из Android Studio. Здесь все работало нормально. Позже я попытался установить приложение на это устройство из Play Store. Но в PlayStore возникла проблема, и после этого загрузка не происходила. Мне пришлось восстановить PlayStore до заводских настроек. Отправьте это, PlayStore начал вести себя нормально. Но токен не был сгенерирован.

Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 23 января 2020

Проблема в Proguard. Хотя нет прямого способа справиться с этим, я мог бы найти обходной путь. В файле proguard-rules.pro я добавил следующую строку:

-keep class com.google.firebase. ** {*; }

Это делается для того, чтобы классы Firebase не удалялись Firebase. На данный момент все работает правильно даже на устройствах Samsung

...