Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/230.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android FCM返回错误:第一条消息后未注册_Android_Push Notification_Firebase Cloud Messaging - Fatal编程技术网

Android FCM返回错误:第一条消息后未注册

Android FCM返回错误:第一条消息后未注册,android,push-notification,firebase-cloud-messaging,Android,Push Notification,Firebase Cloud Messaging,我按照firebase.google.com上的说明在我的项目中添加FCM一切正常,我在日志中收到消息“FirebaseApp初始化成功”和新令牌。但它不起作用。。。只有我发送给令牌的第一个推送通知才获得成功。第二次推送和静止获取错误“NotRegistered” 文件说 如果未注册,则应从服务器数据库中删除注册ID,因为应用程序已从设备中卸载,或者客户端应用程序未配置为接收消息 但应用程序没有被删除,客户端应用程序被配置为接收消息,因为第一条消息到达客户端我挣扎了几个小时,但发现了问题。这真的

我按照firebase.google.com上的说明在我的项目中添加FCM
一切正常,我在日志中收到消息“FirebaseApp初始化成功”和新令牌。但它不起作用。。。只有我发送给令牌的第一个推送通知才获得成功。第二次推送和静止获取错误“NotRegistered”
文件说

如果未注册,则应从服务器数据库中删除注册ID,因为应用程序已从设备中卸载,或者客户端应用程序未配置为接收消息


但应用程序没有被删除,客户端应用程序被配置为接收消息,因为第一条消息到达客户端

我挣扎了几个小时,但发现了问题。这真的很难找到,也很难解释。我会尝试:

我的项目有一个依赖项,其中包含另一个依赖项:
My project>Dependency>Sub Dependency

子依赖项包含一个带有
标记的
AndroidManifest.xml
文件。诸如此类:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.my_sub_library">

    <application android:allowBackup="true">

    </application>

</manifest>

由于此应用程序标记,我的依赖项需要执行以下操作:

<manifest package="br.com.ilhasoft.support.databinding"
    xmlns:tools="http://schemas.android.com/tools">
    <application tools:node="replace"/>
</manifest>

我的解决方案是通过删除应用程序标记来更新子依赖项,并通过删除替换操作来更新依赖项

不知何故,firebase忽略了我的
FirebaseMessagingService
,并撤销了我的FCM注册令牌


我建议您检查您的依赖项,看看哪一个有应用程序标记,并更新/替换它。这对我有用

检查是否正在调用
onTokenRefresh()
方法。这意味着令牌已更新,您必须使用新令牌。您是否正在使用firebase控制台发送通知?或者您正在使用自己的服务器实现。在我的情况下,onTokenRefresh仅在程序第一次启动时或清除所有应用程序数据后调用一次。我正在使用自己的服务器实现Nikita,请在发送第一个通知后尝试打印令牌。只是为了确保令牌没有改变。使用
FirebaseInstanceID.getToken()
并在发送通知后验证令牌是否相同。如果它为空是因为令牌由于某种原因被删除。我有同样的问题。。。FirebaseInstanceId.getInstance().getToken()返回与服务器上相同的令牌。当我用curl在我的机器上测试时,结果是“未注册”的,对此有什么见解吗?我也有同样的问题。这不是npm包中的“子依赖项”吗?如果是,您是如何更新的?