设备未收到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());
当您复制您的设备令牌时,可能会复制该空间,请仔细检查您是否复制了正确的令牌
也许是从连接我改变连接从以太网到无线工作,没有做任何事情