如何从android服务FirebaseMessagingService获取firestore文档?

问题描述

我的 Android 应用中有一个 FirebaseMessagingService 派生服务,它接收 Firebase 消息(通过 onMessageReceived),然后使用接收到的消息中提供的 ID 获取 Firestore 文档。

问题是有时无法从firestore中检索到文档;我收到错误消息“无法获取文档,因为客户端离线”。

我尝试自动重试以每 10 秒获取一次文档最多 5 分钟,但没有成功。我注意到代码在发生时似乎无法访问互联网(但是接收消息需要互联网,对吧!?)。奇怪的是,在这 5 分钟内,收到了其他消息并成功检索了他们的文档...

我认为这无关紧要,但问题发生在我的 WIFI 和 LTE 上,所以这不是互联网提供商的问题。

有人知道如何解决这个问题吗?我已经在这个问题上挣扎了几个星期......

代码如下:

class ReceptionService : FirebaseMessagingService() {

    override fun onMessageReceived(itemmessage: RemoteMessage) {

        itemmessage.data.isNotEmpty().let {
            val notifContent = GZIPInputStream(Base64.decodeBase64(itemmessage.data["content"]!!.toByteArray())
                    .inputStream()).bufferedReader(UTF_8).use { it.readText() }
            when {
                // Convert Message into NotifParam
                val gsonContent = GsonBuilder().setDateFormat("yyyy-MM-dd'T'HH:mm:ss")
                        .registerTypeAdapter(Calendar::class.java,DotNetDateDeserializer()).create()
                val resultDataType = object : Typetoken<NotifParam>() {}.type

                val documentId = gsonContent.fromJson(notifContent,resultDataType).DocumentId

                doAsync {
                    FirebaseFirestore.getInstance().collection("Item").document(documentId).get(Source.SERVER)
                        .addOnFailureListener { e ->
                            Notification.notifyAlert(applicationContext,"Error: can't get document")
                        }
                    .addOnSuccessListener { documentSnapshot -> ... }
                }
            }
        }
    }
}

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)