Firebase Cloud Messaging:FirebaseInstanceId 后台同步失败 - SERVICE_NOT_AVAILABLE

37

我曾在Android中使用Firebase Cloud Messaging(FCM) API进行推送通知。当我实现时完美运作,但现在无法找到Google Play服务。

错误信息如下:

FirebaseInstanceId: 后台同步失败:SERVICE_NOT_AVAILABLE

请帮忙解决。我在gradle文件中使用了以下依赖项。

dependencies {
    compile files('libs/ksoap2-android-assembly-3.4.0-jar.jar')
    compile 'com.android.support:appcompat-v7:23.0.0'
    compile files('libs/gson-2.2.4.jar')
    compile files('libs/activation.jar')
    compile files('libs/mail.jar')
    compile files('libs/additionnal.jar')
    compile 'com.android.support:multidex:1.0.1'
    compile 'com.facebook.android:facebook-android-sdk:4.14.0'
    compile 'com.google.firebase:firebase-messaging:9.0.2'

    compile('com.google.android.gms:play-services:9.0.2') {
        exclude group: "play-services-wallet"
        exclude module: "play-services-wallet"
        exclude group: "play-services-ads"
        exclude module: "play-services-ads"
    }

}

感谢您抽出时间阅读此内容。


你的代码在哪里?你是否正确地在 Firebase 服务器上配置了项目? - Talha
是的,我将我的项目从Google控制台导入到Firebase控制台,并生成了JSON文件并添加到我的项目中。 - Chirag Parmar
在哪一行代码出错了?请发布您的Java代码和Logcat。 - Talha
在后台服务中,FCM库出现故障,因此我只能得到这个错误。FirebaseInstanceId:后台同步失败:SERVICE_NOT_AVAILABLE。 - Chirag Parmar
网络连接正常吗? - Talha
1
你能否将你的AndroidManifest添加到问题中?此外,你使用com.google.android.gms:play-services可能会导致问题,因为你将同时使用firebase-messaging和play-services-gcm。 FCM和GCM不应在同一项目中使用。 - Arthur Thompson
13个回答

22
  1. 验证互联网连接
  2. 检查Android SDK工具(工具 -> Android -> SDK管理器 -> SDK工具选项卡)是否有最新版本的“Google Play服务”,如果没有,请安装该软件包。然后,如果您正在使用模拟器,请停止模拟器并重新启动它。这样就可以解决问题了。

15

您可以进行以下检查:

  1. 不使用代理和开放的互联网连接来检查您的互联网连接。
  2. 将您的 google-service.json 替换为新的文件,您可以在Firebase控制台中获取。
  3. 请检查您的设备是否有 Google Play 服务,并且它是否正常工作,因为 Firebase 在没有 Google Play 服务的情况下无法工作。

请参阅 - FirebaseInstanceId 服务未注册


7

经过长时间的努力,我找到了答案。如果Google Play服务没有运行,则会打印“FirebaseInstanceId背景同步失败 - SERVICE_NOT_AVAILABLE”日志。因此,您可以检查您的Google Play服务是否正常运行。

希望这些信息对您有所帮助!


5

我必须禁用我的VPN - 希望这能帮助到某些人!


5

我刚遇到这个问题。在我的情况下,只有当我停止模拟器、关闭它并重新打开时才有效。我没有进行任何其他更改。


5

该服务需要在Manifest.xml中进行绑定。

    <!-- Firebase InstanceId Service -->
    <service
        android:name="eu.acme.service.FireBaseInstanceIdService"
        android:exported="false" >
        <intent-filter>
            <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/>
        </intent-filter>
    </service>

那么,您就可以访问一个单一的公开方法(其他名称已经被混淆 = 不可靠):
package eu.acme.service;

import com.google.firebase.iid.FirebaseInstanceId;
import com.google.firebase.iid.FirebaseInstanceIdService;

public class FireBaseInstanceIdService extends FirebaseInstanceIdService {

    @Override
    @android.support.annotation.WorkerThread
    public void onTokenRefresh() {

        /* obtain the current InstanceId token: */
        String token = FirebaseInstanceId.getInstance().getToken();
    }
}

在涉及到没有活跃网络的情况下,为了避免触发异常,人们只能通过不激活任何AuthState监听器来解决这个问题,详见此处。似乎无法捕获库中抛出的异常,但由于它仅仅是在抱怨没有网络连接,因此可以忽略。

com.google.android.gms.iidcom.google.firebase.iid 是相同的。


有哪些可能会导致这种情况?我不确定到底是什么导致了这个问题。我的网络是正常的,但仍然会抛出异常。我需要不停地重启设备直到它能够正常工作。 - Felipe Castilhos
https://dev59.com/71UK5IYBdhLWcg3w4jQv - Martin Zeitler

2

将您的手机连接到不同服务提供商的不同wifi连接中。这听起来很奇怪,但你可以试试!


2
在我的情况下-我重新启动了电脑,然后它就正常工作了。
我不是专家,所以我可能通过我的方法涵盖了提到的其中一些技巧。

2
最简单的解决方案是删除.Droid目录下的bin和obj文件夹。
这样每次都可以开始一个干净的工作环境。

1

我也遇到了同样的问题,只需在构建下选择“清理项目”选项即可解决。希望能帮助到这里的任何人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接