Android模拟器无法接收Firebase Cloud Messaging推送通知求助
Firebase Cloud Messaging通知无法送达问题排查
尝试将Firebase Cloud Messaging集成到应用中,试过所有解决方案后,通知仍无法送达。控制台发送通知时仅显示特定日志,模拟器版本为Android 13(API 33)。以下是相关代码及信息:
AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.example.myapp"> <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE"/> <uses-permission android:name="android.permission.WAKE_LOCK" /> <application android:allowBackup="true" android:dataExtractionRules="@xml/data_extraction_rules" android:fullBackupContent="@xml/backup_rules" android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:noHistory="true" android:roundIcon="@mipmap/ic_launcher_round" android:supportsRtl="true" android:theme="@style/Theme.Myapp" tools:targetApi="31"> <activity android:name=".SignInActivity" android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".SignUpActivity" android:exported="true"> <intent-filter> <action android:name=".SignUpActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".CreatedWorkoutActivity" android:exported="false"> <intent-filter> <action android:name=".CreatedWorkoutActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".WorkoutMakerActivity" android:exported="true"> <intent-filter> <action android:name=".WorkoutMakerActivity" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity> <activity android:name=".MainActivity" android:exported="false"> </activity> <activity android:name=".Pop" android:theme="@style/AppTheme.CustomTheme"> </activity> <service android:name=".FCMNotificationService" android:permission="com.google.android.c2dm.permission.SEND" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> <action android:name="com.google.android.c2dm.intent.RECEIVE"/> </intent-filter> </service> <meta-data android:name="com.google.firebase.messaging.default_notification_channel_id" android:value="@string/default_notification_channel_id" /> </application> </manifest>
FCMNotificationService.java
package com.example.myapp; import android.app.NotificationChannel; import android.app.NotificationManager; import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.PackageManager; import android.media.RingtoneManager; import android.net.Uri; import android.os.Build; import android.util.Log; import androidx.annotation.NonNull; import androidx.core.app.NotificationCompat; import com.google.firebase.messaging.FirebaseMessagingService; import com.google.firebase.messaging.RemoteMessage; public class FCMNotificationService extends FirebaseMessagingService { @Override public void onMessageReceived(RemoteMessage remoteMessage) { System.out.println("я тут"); if (remoteMessage.getNotification()!=null){ String notificationBody = remoteMessage.getNotification().getBody(); String notificationTitle = remoteMessage.getNotification().getTitle(); sendNotification(notificationTitle, notificationBody); } } private void sendNotification(String title, String body) { Intent intent = new Intent(this, MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, intent, PendingIntent.FLAG_IMMUTABLE); String channelId = "fcm_default_channel"; Uri defaultSoundUri = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION); NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this, channelId) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(title) .setContentText(body) .setAutoCancel(true) .setSound(defaultSoundUri) .setContentIntent(pendingIntent); NotificationManager notificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationChannel channel = new NotificationChannel(channelId, "Channel human readable title", NotificationManager.IMPORTANCE_DEFAULT); notificationManager.createNotificationChannel(channel); } notificationManager.notify(0, notificationBuilder.build()); } }
MainActivity中添加的通知通道创建代码
为解决“AndroidManifest.xml中设置的通知通道未被应用创建,将使用默认值”问题,在MainActivity中添加了以下代码:
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { NotificationManager notificationManager = getSystemService(NotificationManager.class); CharSequence name = getString(R.string.default_notification_channel_name); String description = getString(R.string.default_notification_channel_description); int importance = NotificationManager.IMPORTANCE_DEFAULT; NotificationChannel channel = new NotificationChannel(getString(R.string.default_notification_channel_id), name, importance); channel.setDescription(description); notificationManager.createNotificationChannel(channel); }
已尝试在Manifest中添加多项配置,但均未解决问题,恳请提供帮助。
内容的提问来源于stack exchange,提问作者L_E_M
相关产品推荐
相关产品推荐

