今天在接完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..."); 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
导致的。因为改了这里之后就没有闪退了