Android:FCM java.io.IOException:某些设备上出现 SERVICE_NOT_AVAILABLE 错误

问题描述 投票:0回答:6

我在我的项目中使用

FCM

它可以在 Sony xperia、Galaxy S6、Motorola 等设备上正常工作。但在 Galaxy S3 上我收到

java.io.IOException: SERVICE_NOT_AVAILABLE
错误

Galaxy S3 的时间是自动的,Google Play 已更新

互联网连接很强,我无需代理即可连接到开放互联网

android firebase-cloud-messaging
6个回答
23
投票

此错误是当设备无法注册到 Firebase 时导致的。确保调用此代码时互联网正常工作。并将代码放在 try-catch 中以阻止应用程序崩溃。

编辑: 在注册设备或获取令牌之前添加互联网连接检查。 或者 将 Fetch token 代码包装在 try-catch 块中以防止应用程序崩溃。

示例:

  1. 添加互联网连接检查代码:

     private boolean isNetworkConnected() {
       ConnectivityManager cm = (ConnectivityManager) 
       getSystemService(Context.CONNECTIVITY_SERVICE);
    
       return cm.getActiveNetworkInfo() != null && 
       cm.getActiveNetworkInfo().isConnected();
    }
    
  2. 互联网检查并继续。

    if (isNetworkConnected())
       refreshToken(this);
    

8
投票

确保您已包含

任务.isSuccessful()

在重写的 onComplete 方法中检查您的代码,如下所示 -

FirebaseMessaging.getInstance().getToken().addOnCompleteListener(new OnCompleteListener() {

        @Override
        public void onComplete(@NonNull Task<String> task) {
            if(task.isSuccessful()) {
                fcmToken = task.getResult();
            }
        }
    });

如果没有,每当注册 fcm 令牌时发生网络错误或其他问题时,您可能会收到 FIS_Authentication_Failed 或 SERVICE_NOT_AVAILABLE 类型的错误。


7
投票

检查以下内容:

1- 互联网连接

2- 电话日期/时间正确


3
投票

就我而言,问题出在

Google Mobile Services
应用程序中。清除数据后问题就消失了。

在另一台设备上启动后,我发现了问题的关键,但问题没有重现。


1
投票

如果有人仍然遇到错误,请尝试在 useEffect 中添加 getToken 和其他 firebase 消息传递调用,并添加

messaging
作为其依赖项。

有时,应用程序会在消息传递库初始化之前尝试调用这些方法,因此请尝试将代码包装在 useEffect 中,并将消息传递作为依赖项。

import messaging from '@react-native-firebase/messaging';

React.useEffect(() => {
  // Get the token
  const token = await messaging().getToken();
  // other messaging operations
}, [messaging])

0
投票

尝试从 void main() 中删除此代码并将其放在其他地方,例如:- 用户成功登录后或首页的 init 函数内:-

await Firebase.initializeApp(); await _firebaseMessaging.requestPermission(); final fCMToken = await _firebaseMessaging.getToken();

© www.soinside.com 2019 - 2024. All rights reserved.