在应用程序的发布版本中,三星设备中未生成 FCM 令牌
FCM token not generating in Samsung devices in release version of app
我正在使用 FCM 在我的应用程序中发送通知。我的应用程序的第一个版本处于测试阶段,三星设备出现错误,因为 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()
}
}
}
添加到上面。当我在三星真实设备的调试版本以及仿真器中测试时,令牌已正确生成。事实上,我在一台三星设备上直接从 Android Studio 安装了该应用程序。它在这里工作得很好。后来我尝试从 Play 商店在此设备中安装该应用程序。但是 PlayStore 出现了问题,之后就没有下载了。我不得不将 PlayStore 恢复为出厂设置。 Post PlayStore 开始正常运行。但是没有生成令牌。
非常感谢任何帮助。
Proguard 的问题。虽然没有直接的方法来处理这个问题,但我可以找到解决方法。在 proguard-rules.pro 文件中,我添加了以下行:
-保持classcom.google.firebase.** { *; }
这是为了确保 Firebase classes 不会被 Firebase 删除。到目前为止,即使在三星设备上也能正常工作
我正在使用 FCM 在我的应用程序中发送通知。我的应用程序的第一个版本处于测试阶段,三星设备出现错误,因为 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()
}
}
}
添加到上面。当我在三星真实设备的调试版本以及仿真器中测试时,令牌已正确生成。事实上,我在一台三星设备上直接从 Android Studio 安装了该应用程序。它在这里工作得很好。后来我尝试从 Play 商店在此设备中安装该应用程序。但是 PlayStore 出现了问题,之后就没有下载了。我不得不将 PlayStore 恢复为出厂设置。 Post PlayStore 开始正常运行。但是没有生成令牌。
非常感谢任何帮助。
Proguard 的问题。虽然没有直接的方法来处理这个问题,但我可以找到解决方法。在 proguard-rules.pro 文件中,我添加了以下行:
-保持classcom.google.firebase.** { *; }
这是为了确保 Firebase classes 不会被 Firebase 删除。到目前为止,即使在三星设备上也能正常工作