我在我的项目中使用
FCM
它可以在 Sony xperia、Galaxy S6、Motorola 等设备上正常工作。但在 Galaxy S3 上我收到
java.io.IOException: SERVICE_NOT_AVAILABLE
错误
Galaxy S3 的时间是自动的,Google Play 已更新
互联网连接很强,我无需代理即可连接到开放互联网
此错误是当设备无法注册到 Firebase 时导致的。确保调用此代码时互联网正常工作。并将代码放在 try-catch 中以阻止应用程序崩溃。
编辑: 在注册设备或获取令牌之前添加互联网连接检查。 或者 将 Fetch token 代码包装在 try-catch 块中以防止应用程序崩溃。
示例:
添加互联网连接检查代码:
private boolean isNetworkConnected() {
ConnectivityManager cm = (ConnectivityManager)
getSystemService(Context.CONNECTIVITY_SERVICE);
return cm.getActiveNetworkInfo() != null &&
cm.getActiveNetworkInfo().isConnected();
}
互联网检查并继续。
if (isNetworkConnected())
refreshToken(this);
确保您已包含
任务.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 类型的错误。
检查以下内容:
1- 互联网连接
2- 电话日期/时间正确
就我而言,问题出在
Google Mobile Services
应用程序中。清除数据后问题就消失了。
在另一台设备上启动后,我发现了问题的关键,但问题没有重现。
如果有人仍然遇到错误,请尝试在 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])
尝试从 void main() 中删除此代码并将其放在其他地方,例如:- 用户成功登录后或首页的 init 函数内:-
await Firebase.initializeApp(); await _firebaseMessaging.requestPermission(); final fCMToken = await _firebaseMessaging.getToken();