某些设备无法接收FCM通知

我遇到了问题,因为我正在测试我的应用程序的某些设备没有收到通知,也没有引发exception。

通知来自FCM,我正在使用自定义服务来显示它们。

MyFirebaseMessaginService.java

static int count = 0; @Override public void onMessageReceived(final RemoteMessage remoteMessage) { Log.i("remoteMessage",remoteMessage.toString()); switch(remoteMessage.getData().get("tipo")){ case "normal": notificacionNormal(remoteMessage); break; case "imagen": notificacionImagen(remoteMessage); break; case "imagen+url": notificacionImagenUrl(remoteMessage); break; } count++; //Log.d("prueba",remoteMessage.getData().get("imagen")); } private void notificacionImagenUrl(RemoteMessage remoteMessage) { Intent i = new Intent(Intent.ACTION_VIEW); i.setData(Uri.parse(remoteMessage.getData().get("url"))); PendingIntent pendingIntent = PendingIntent.getActivity(this, 100, i, PendingIntent.FLAG_ONE_SHOT); NotificationManager notificationManager = (NotificationManager) this.getSystemService(Context.NOTIFICATION_SERVICE); Notification notif = new Notification.Builder(this) .setContentIntent(pendingIntent) .setContentTitle(remoteMessage.getNotification().getTitle()) .setContentText(remoteMessage.getNotification().getBody()) .setSmallIcon(R.mipmap.ic_launcher) .setLargeIcon(BitmapFactory.decodeResource(getResources(), R.mipmap.ic_launcher)) .setStyle(new Notification.BigPictureStyle().bigPicture(getImagae(remoteMessage.getData().get("imagen")))) .build(); notif.flags |= Notification.FLAG_AUTO_CANCEL; notificationManager.notify(count, notif); } 

目前它只发生在一个带有android 6.0.1的root设备中希望你可以帮助我:)

编辑:我发送的通知HTTP请求:

 "to": "/topics/general", "notification" : { "title": "title", "body": "body", }, "data": { "tipo": "normal", } 

其中一个可能的原因可能是您正在测试的某些设备没有Google Play服务或其更新版本。 在您的活动中,请尝试检查Google Play服务。 您可以使用此处回答的function:

 protected boolean checkPlayServices() { final int resultCode = GooglePlayServicesUtil.isGooglePlayServicesAvailable(activity()); if (resultCode != ConnectionResult.SUCCESS) { if (GooglePlayServicesUtil.isUserRecoverableError(resultCode)) { Dialog dialog = GooglePlayServicesUtil.getErrorDialog(resultCode, activity(), PLAY_SERVICES_RESOLUTION_REQUEST); if (dialog != null) { dialog.show(); dialog.setOnDismissListener(new OnDismissListener() { public void onDismiss(DialogInterface dialog) { if (ConnectionResult.SERVICE_INVALID == resultCode) activity().finish(); } }); return false; } } new CSAlertDialog(this).show("Google Play Services Error", "This device is not supported for required Goole Play Services", "OK", new Call() { public void onCall(Object value) { activity().finish(); } }); return false; } return true; } 

它有时会发生在低端设备上。 一种解决方案是清除Google Play服务应用的应用数据和缓存。 这对我有用。

我不知道这是否有效,但你的原始JSON主体是错误的。 您忘记了{}外部作为JSON对象。 下面应该是您要发送的消息。

 { "to": "/topics/general", "notification" : { "title": "title", "body": "body", }, "data": { "tipo": "normal", } }