我遇到FireBase Cloud Messaging的问题,我从设备获取令牌并通过Google Firebase通知控制台发送通知测试但是,通知永远不会记录,也不会推送到Android虚拟设备。 FCM的文档几乎就是我在下面的代码,除了使用firebase进行推送通知之外你还需要做什么。我已经完成了文档中指定的所有设置信息(build.gradle添加,安装google play服务等等),但仍然没有生成消息。我按下通知后立即收到一次性错误,指出“I / FA:找不到标签管理器,因此不会被使用”,但这是唯一输出的数据,我没有找到与标签相关的任何内容经理要求和谷歌上的FCM。我没有收到对logcat或设备的推送通知的代码有什么问题?请让我知道任何有用的进一步信息。 感谢。
NotificationGenie.java
String Queue = "32930"
的AndroidManifest.xml
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());
}
}
答案 0 :(得分:50)
您已将服务放在应用程序代码之外。改变底部。
<service
android:name=".NotificationGenie">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
</application>
答案 1 :(得分:35)
我遇到了同样的问题,通过在我的服务中定义enabled,导出为true来解决问题
<service
android:name=".MyFirebaseMessagingService"
android:enabled="true"
android:exported="true">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
答案 2 :(得分:27)
&#34;您还必须记住,要接收从Firebase控制台发送的消息,应用必须处于后台,而不是未启动。&#34; ---根据@ Laurent Russier的评论。
我从未收到任何来自Firebase的消息,直到我将我的应用程序置于后台。
这仅适用于模拟器的usb连接,您也可以在前台获得通知
答案 3 :(得分:10)
在Overriden方法中调用super.OnMessageReceived()
。这对我有用!
终于来了!
答案 4 :(得分:9)
老实说,Google API充满了sh *。他们随机地不工作而没有调试
答案 5 :(得分:7)
我遇到了设备未收到的Firebase云消息传递问题。
在我的案例中,Firebase控制台项目中定义的程序包名称与Manifest&amp; E上定义的程序包名称不同。我的Android项目的Gradle。
因此我正确地收到了令牌,但根本没有收到任何消息。
要进行sumarize,Firebase控制台软件包名称和Manifest&amp; amp; Gradle匹配。
您还必须记住,要接收从Firebase控制台发送的消息,应用必须处于后台,而不是已开始隐藏。
答案 6 :(得分:7)
我遇到了类似的问题,但在我的情况下,我错过了Gradle版本中的google-services
plugin(我将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
目录。
答案 7 :(得分:5)
我遇到了同样的问题,但我的旧版GCM中的清单中仍有一些碎片。当我从我的清单中取出以下权限时,它修复了错误。 com.google.android.c2dm.permission.RECEIVE
答案 8 :(得分:4)
如果您刚刚将FCM添加到现有应用中,则不会调用onTokenRefresh()
。我通过卸载应用程序并再次安装它来运行它。
答案 9 :(得分:2)
您需要遵循以下清单代码(必须在清单中提供服务)
<?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>
答案 10 :(得分:2)
在这个问题上花了几个小时后,当我故意破坏“google-services.json”的格式并且我的构建仍然成功时,我终于意识到了这个问题。编译器不会注意到此文件中的更改。我尝试了很多方法,“从磁盘重新加载”、gradle 任务“cleanBuildCache”、新虚拟设备、卸载/重新安装应用程序等,但都没有奏效。
对我来说,解决方案是在 AndroidStudio -> Build -> Clean Project
和 Build -> Rebuild Project
PS:还要确保“google-services.json”在“app”文件夹中。
答案 11 :(得分:2)
就我而言,我只是在模拟器中打开WIFI和移动数据,它的工作原理就像一个魅力。因为我无法发送评论,所以发表回复。 祝你好运
答案 12 :(得分:1)
<activity android:name=".activity.MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- Firebase Notifications -->
<service android:name=".service.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT" />
</intent-filter>
</service>
<service android:name=".service.MyFirebaseInstanceIDService">
<intent-filter>
<action android:name="com.google.firebase.INSTANCE_ID_EVENT" />
</intent-filter>
</service>
答案 13 :(得分:0)
复制设备令牌时,可能会复制空间,请仔细检查是否复制了正确的令牌
答案 14 :(得分:0)
就我而言,我手动杀死了一些Google Play服务,却忘记了。
稍后,我必须重新启动设备,之后我才能毫无问题地收到通知。
答案 15 :(得分:0)
就我而言,我发现mergedmanifest缺少接收者。所以我必须包括:
<receiver
android:name="com.google.firebase.iid.FirebaseInstanceIdReceiver"
android:exported="true"
android:permission="com.google.android.c2dm.permission.SEND" >
<intent-filter>
<action android:name="com.google.android.c2dm.intent.RECEIVE" />
</intent-filter>
</receiver>
答案 16 :(得分:0)
如果您也希望您的应用也可以在24个以上的版本中运行,请遵循以下步骤:
1。将此添加到您的strings.xml
<字符串名称=“ default_notification_channel_id” translatable =“ false”> fcm_default_channel
<元数据 android:name =“ com.google.firebase.messaging.default_notification_channel_id” android:value =“ @ string / default_notification_channel_id” />
3。用于创建通知(带有图像)的方法是在您处理通知的地方使用,如果直接在firebasemessaging服务中添加,或者如果您正在使用某些util类,则在该util类中添加:
@RequiresApi(api = Build.VERSION_CODES.JELLY_BEAN)
public static void createBigNotification(Bitmap bitmap, int icon, String message, Uri alarmSound) {
final int NOTIFY_ID = 0; // ID of notification
NotificationManager notificationManager = (NotificationManager) mContext.getSystemService(NOTIFICATION_SERVICE);
String id = mContext.getString(R.string.default_notification_channel_id); // default_channel_id
String title = mContext.getString(R.string.app_name);
Intent intent;
NotificationCompat.Builder builder;
if (notificationManager == null) {
notificationManager = (NotificationManager) mContext.getSystemService(Context.NOTIFICATION_SERVICE);
}
PendingIntent resultPendingIntent;
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
int importance = NotificationManager.IMPORTANCE_HIGH;
NotificationChannel mChannel = notificationManager.getNotificationChannel(id);
if (mChannel == null) {
mChannel = new NotificationChannel(id, title, importance);
mChannel.enableVibration(true);
mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
notificationManager.createNotificationChannel(mChannel);
}
builder = new NotificationCompat.Builder(mContext, id);
intent = new Intent(mContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
resultPendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
bigPictureStyle.setBigContentTitle(title);
bigPictureStyle.setSummaryText(Html.fromHtml(message).toString());
bigPictureStyle.bigPicture(bitmap);
builder.setContentTitle(title) // required
.setSmallIcon(R.drawable.app_icon) // required
.setContentText(message) // required
.setDefaults(Notification.DEFAULT_ALL)
.setAutoCancel(true)
.setSound(alarmSound)
.setStyle(bigPictureStyle)
.setContentIntent(resultPendingIntent)
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
.setTicker(title)
.setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
} else {
builder = new NotificationCompat.Builder(mContext, id);
intent = new Intent(mContext, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
resultPendingIntent = PendingIntent.getActivity(mContext, 0, intent, 0);
NotificationCompat.BigPictureStyle bigPictureStyle = new NotificationCompat.BigPictureStyle();
bigPictureStyle.setBigContentTitle(title);
bigPictureStyle.setSummaryText(Html.fromHtml(message).toString());
bigPictureStyle.bigPicture(bitmap);
builder.setContentTitle(title) // required
.setSmallIcon(R.drawable.app_icon) // required
.setContentText(message) // required
.setDefaults(Notification.DEFAULT_ALL)
.setAutoCancel(true)
.setSound(alarmSound)
.setStyle(bigPictureStyle)
.setContentIntent(resultPendingIntent)
.setLargeIcon(BitmapFactory.decodeResource(mContext.getResources(), icon))
.setTicker(title)
.setVibrate(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400})
.setPriority(Notification.PRIORITY_HIGH);
}
Notification notification = builder.build();
notificationManager.notify(NOTIFY_ID, notification);
}
按照以下步骤操作,您的通知将显示在通知托盘中。
答案 17 :(得分:0)
我一直在研究整个帖子和其他内容以及教程视频,但无法解决我没有收到消息的问题,但是注册令牌仍然有效。
直到那时,我只在模拟器上测试应用程序。在物理电话上尝试后,无需更改项目即可立即运行。
答案 18 :(得分:0)
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());
答案 19 :(得分:-1)
答案 20 :(得分:-1)
我遇到了一个奇怪的问题,我不知道为什么我无法接收 FCM,如果它工作正常,但后来我稍微更改了 xml。我想出了为什么它不起作用。
我改变了这个:
<service
android:name=".Service.MyFirebaseMessagingService"
>
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
为此:
<service
android:name=".Service.MyFirebaseMessagingService">
<intent-filter>
<action android:name="com.google.firebase.MESSAGING_EVENT"/>
</intent-filter>
</service>
放置 >
的位置导致了一些问题,因此我在一行中关闭了标签。
答案 21 :(得分:-2)
也许是来自连接 我改变了从以太网到无线的连接,没有做任何其他工作