Fetching FCM registration token failed导致手机闪退 | 南锋

南锋

南奔万里空,脱死锋镝余

Fetching FCM registration token failed导致手机闪退

今天在接完firebase FCM通知后,发现手机会出现闪退的情况,而且都是在刚启动应用的前一两分钟。查看日志,发现是因为FCM通知导致的。

表现

日志报错如下:

1
2
Fetching FCM registartion token failed
java.io.IOException: java.util.concurrent.ExecutionException: java.io.IOException: SERVICE_NOT_AVAILABLE.

错误日志如下图所示:
日志截图

报错原因及解决方法

原因一、手机不支持谷歌服务

可以在获取FCMtoken前加入一个判断,判断是否支持谷歌服务,代码如下:

1
2
3
4
5
public static boolean checkIsSupportGoogle(Context context) {
GoogleApiAvailability googleApiAvailability = GoogleApiAvailability.getInstance();
int resultCode = googleApiAvailability.isGooglePlayServicesAvailable(context);
return resultCode == ConnectionResult.SUCCESS;
}

然后引入库

1
2
// 谷歌服务支持
implementation 'com.google.android.gms:play-services-base:18.5.0'

原因二、手机没有开梯子

我这里就是第二种情况,手机没有开梯子

闪退的原因

闪退的原因就出现在下面代码部分

1
2
3
4
5
6
7
8
9
10
11
12
13
14
public static void initFCM() {
Log.d(TAG, "Initializing Firebase Cloud Messaging...");
// 获取 FCM 令牌
FirebaseMessaging.getInstance().getToken()
.addOnCompleteListener(task -> {
if (!task.isSuccessful()) {
Log.w(TAG, "Fetching FCM registration token failed", task.getException());
}
// 获取令牌
String token = task.getResult();
Log.d(TAG, "FCM Token: " + token);
myFCMtoken = token;
});
}

猜测是因为使用了未初始化myFCMtoken导致的。因为改了这里之后就没有闪退了

+