2017-06-16 111 views
0

我正在实施基于消息的消息传递服务以向所有用户发送通知。一切都很好,直到现在,但问题是当我关闭我的WiFi,并同时从消防局控制台发送通知,我的消息的状态显示消息已成功发送,但是当我打开我的WiFi我不接收任何通知,为什么会这样,FCM是否不允许待处理的通知,或者我做错了什么。他们的任何实现如何发送处于未决状态的通知。下面是我的代码Firebase消息服务

Android的清单

<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> 

FirebaseMessagingService.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()); 
    } 
} 

FirebaseIDService.cs

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. 
     } 
    } 
+0

我使用相同的代码,并尝试重现您的问题,第一次部署在我的手机上,一切工作正常。当我关闭WiFi时,虽然有短暂的延迟,但应用仍然收到该消息。但是当我清理并重建项目时,我无法收到任何消息。 –

回答

0

我假设你的问题依赖于应用程序是在前台还是在后台,以及你是发送一个通知有效载荷还是一个数据有效载荷,因为当应用程序在后台时,通知有效载荷不会达到“ OnMessageReceived“回调。检查应用程序状态表中的以下链接:https://firebase.google.com/docs/cloud-messaging/android/receive