Android Firebase消息服务
我正在实施fire base消息服务,以向所有用户发送通知。到目前为止一切正常,但问题是当我关闭WiFi并同时从fire base控制台发送通知时,我的消息状态显示消息已成功发送,但当我打开WiFi时,我没有收到任何通知,为什么会这样,FCM不允许挂起的通知,或者我做错了什么。是如何发送处于挂起状态的通知的任何实现。下面是我的代码 Android清单Android Firebase消息服务,android,firebase,xamarin,firebase-cloud-messaging,Android,Firebase,Xamarin,Firebase Cloud Messaging,我正在实施fire base消息服务,以向所有用户发送通知。到目前为止一切正常,但问题是当我关闭WiFi并同时从fire base控制台发送通知时,我的消息状态显示消息已成功发送,但当我打开WiFi时,我没有收到任何通知,为什么会这样,FCM不允许挂起的通知,或者我做错了什么。是如何发送处于挂起状态的通知的任何实现。下面是我的代码 Android清单 <manifest xmlns:android="http://schemas.android.com/apk/res/android" p
<manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.xamarin.fcmexample" android:versionCode="1" android:versionName="1.0" android:installLocation="auto">
<uses-sdk android:minSdkVersion="16" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<application android:label="FCMClient">
<receiver android:name="com.google.firebase.iid.FirebaseInstanceIdInternalReceiver" android:exported="false" />
<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" />
<action android:name="com.google.android.c2dm.intent.REGISTRATION" />
<category android:name="${applicationId}" />
</intent-filter>
</receiver>
</application>
</manifest>
FirebaseIDService.cs
public class MyFirebaseMessagingService : FirebaseMessagingService
{
const string TAG = "MyFirebaseMsgService";
public override void OnCreate()
{
base.OnCreate();
}
public override void OnMessageReceived(RemoteMessage message)
{
Log.Debug(TAG, "From: " + message.From);
Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
SendNotification(message.GetNotification().Body);
}
void SendNotification(string messageBody)
{
var intent = new Intent(this, typeof(MainActivity));
intent.AddFlags(ActivityFlags.ClearTop);
var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);
var notificationBuilder = new Notification.Builder(this)
.SetSmallIcon(Resource.Drawable.Icon)
.SetContentTitle("FCM Message")
.SetContentText(messageBody)
.SetAutoCancel(true)
.SetContentIntent(pendingIntent);
var notificationManager = NotificationManager.FromContext(this);
notificationManager.Notify(0, notificationBuilder.Build());
}
}
public class MyFirebaseIIDService : FirebaseInstanceIdService
{
const string TAG = "MyFirebaseIIDService";
public override void OnTokenRefresh()
{
var refreshedToken = FirebaseInstanceId.Instance.Token;
Log.Debug(TAG, "Refreshed token: " + refreshedToken);
SendRegistrationToServer(refreshedToken);
}
void SendRegistrationToServer(string token)
{
// Add custom implementation, as needed.
}
}
我假设您的问题取决于应用程序是在前台还是在后台,以及您是在发送通知负载还是数据负载,因为当应用程序在后台时,通知负载将不会到达“OnMessageReceived”回调。检查以下链接中的应用程序状态表:我使用相同的代码并尝试重现您的问题,第一次在我的手机上部署时,一切正常。当我关闭WiFi时,虽然有短暂的延迟,但应用程序仍然收到消息。但当我清理和重建项目时,我无法收到任何消息。