设备未收到Firebase云消息通知

我在FireBase云消息传递中遇到问题,在该消息中,我从设备获取令牌,然后通过Google Firebase通知控制台发送通知testing,但通知从不logging,也不会推送到Android虚拟设备。 FCM的文档几乎就是我下面的代码,还有一些其他的东西你得做什么才能让推送通知与Firebase一起工作。 我已经通过了文档中指定的所有设置信息(build.gradle添加,安装google play服务等),但仍然没有生成消息。 我推送通知后立即收到一次性错误,指出“I / FA:Tag Manager未find,因此不会被使用”,但这是唯一的数据输出,我没有find任何有关标签经理要求和FCM上的谷歌。 代码有什么问题,我没有收到我的推送通知到logcat或设备? 请让我知道任何进一步的信息,这将是有益的。 谢谢。

NotificationGenie.java

public class NotificationGenie extends FirebaseMessagingService { private static final String TAG = "Firebase_MSG"; @Override public void onMessageReceived(RemoteMessage remoteMessage) { // TODO(developer): Handle FCM messages here. // If the application is in the foreground handle both data and notification messages here. // Also if you intend on generating your own notifications as a result of a received FCM // message, here is where that should be initiated. See sendNotification method below. sendNotification(remoteMessage.getNotification().getBody()); Log.d(TAG, "From: " + remoteMessage.getFrom()); Log.d(TAG, "Notification Message Body: " + remoteMessage.getNotification().getBody()); } private void sendNotification(String messageBody) { Intent intent = new Intent(this, PostLoginActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0 /* Request code */, intent, PendingIntent.FLAG_ONE_SHOT); Uri defaultSoundUri= RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.drawable.tf2spyprofile) .setContentTitle("FCM Message") .setContentText(messageBody) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0 /* ID of notification */, notificationBuilder.build()); } } 

AndroidManifest.xml中

 <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="org.test.movile_android"> <!-- To auto-complete the email text field in the login form with the user's emails --> <uses-permission android:name="android.permission.GET_ACCOUNTS" /> <uses-permission android:name="android.permission.READ_PROFILE" /> <uses-permission android:name="android.permission.READ_CONTACTS" /> <uses-permission android:name="android.permission.INTERNET" /> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".LoginActivity" android:label="@string/title_activity_login"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".DashBoardActivity" android:label="@string/title_activity_dash_board" android:theme="@style/AppTheme.NoActionBar"> </activity> <activity android:name=".NewOrderActivity" android:label="@string/title_activity_dash_board" android:theme="@style/AppTheme.NoActionBar"> </activity> <activity android:name=".PostLoginActivity" android:label="@string/title_activity_dash_board" android:theme="@style/AppTheme.NoActionBar"> </activity> </application> <service android:name=".NotificationGenie"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> 

您已将您的服务置于应用程序标签之外。 改变这一点。

 <service android:name=".NotificationGenie"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> </application> 

我有同样的问题,并通过定义启用,并在我的服务中导出为true来解决

  <service android:name=".MyFirebaseMessagingService" android:enabled="true" android:exported="true"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> 

“您还必须记住,要接收从Firebase控制台发送的消息,应用程序必须处于后台,不能启动,也不能隐藏。” —根据@劳伦特·鲁西尔的评论。

我从来没有从Firebase的任何消息,直到我把我的应用程序在后台。

在Overriden方法中调用super.OnMessageReceived() 。 这对我有用! 最后!

我遇到了未通过设备收到的Firebase云消息的相同问题。

在我的情况下,Firebase Console Project上定义的软件包名称与我在Android项目的Manifest&Gradle上定义的名称不同。

结果我正确地收到了令牌,但根本没有消息。

为了达到目的,Firebase Console包名称和Manifest&Gradle必须匹配。

您还必须记住,要接收从Firebase控制台发送的消息,应用程序必须处于后台,不能启动,也不能隐藏。

我有一个类似的问题,但在我的情况下,我错过了我的Gradle构build的google-services插件 (我正在添加Firebase到现有的项目)。

我将以下内容添加到我的根build.gradle

 classpath 'com.google.gms:google-services:3.1.0' 

和以下到我的app级别build.gradle

 apply plugin: 'com.google.gms.google-services' 

然后,我必须从Firebase控制台(最初导入现有的Google Cloud项目)下载google-services.json文件并将其复制到我的app目录中。

我面临同样的问题,但是我在旧的GCM中仍然留有一些碎片。 当我从我的清单中获得以下许可时,它修复了错误。 com.google.android.c2dm.permission.RECEIVE

如果您刚添加FCM到现有的应用程序, onTokenRefresh()将不会被调用。 我通过卸载应用程序并重新安装它来运行它。

您需要遵循以下清单代码(必须在清单中具有服务)

  <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="soapusingretrofitvolley.firebase"> <uses-permission android:name="android.permission.INTERNET"/> <application android:allowBackup="true" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:supportsRtl="true" android:theme="@style/AppTheme"> <activity android:name=".MainActivity"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyFirebaseMessagingService"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service> <service android:name=".MyFirebaseInstanceIDService"> <intent-filter> <action android:name="com.google.firebase.INSTANCE_ID_EVENT"/> </intent-filter> </service> </application> </manifest> 
 private void sendNotification(String message) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); int requestCode = 0; PendingIntent pendingIntent = PendingIntent.getActivity(this, requestCode, intent, PendingIntent.FLAG_ONE_SHOT); Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.URI_COLUMN_INDEX); NotificationCompat.Builder noBuilder = new NotificationCompat.Builder(this) .setSmallIcon(R.mipmap.ic_launcher) .setContentText(message) .setColor(getResources().getColor(R.color.colorPrimaryDark)) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle("FCM Message") .setContentText("hello").setLargeIcon(((BitmapDrawable) getResources().getDrawable(R.drawable.dog)).getBitmap()) .setStyle(new NotificationCompat.BigPictureStyle() .bigPicture(((BitmapDrawable) getResources().getDrawable(R.drawable.dog)).getBitmap())) .setAutoCancel(true) .setSound(sound) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager)getSystemService(Context.NOTIFICATION_SERVICE); notificationManager.notify(0, noBuilder.build()); 

当您复制您的设备令牌时,可能会复制该空间,请仔细检查您是否复制了正确的令牌

也许是从连接我改变连接从以太网到无线工作,没有做任何事情