1

私のアプリが閉じられるとFCMから新しい通知が届きますが、それをタップするとアプリがクラッシュします。私のアプリがバックグラウンドまたはフォアグラウンドになったら、それは大丈夫です。そして、彼らは通知のための正しいページを開きます。私はアプリがフォアグラウンドにあるときに地元の通知をしたくないので、SendNotificationを呼び出さないでください。アプリがFCMで閉じられているときの通知を処理するにはどうすればよいですか?

マイFCMサービス:OnCreate関数で扱う

[Service] 
[IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })] 
public class MyFirebaseMessagingService : FirebaseMessagingService 
{ 
    const string TAG = "MyFirebaseMsgService"; 
    public override void OnMessageReceived(RemoteMessage message) 
    { 
     Log.Debug(TAG, "From: " + message.From); 
     MessagingCenter.Send(App.CurrentApp, "ReceivedNotification"); 
    } 

    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 Android.App.Notification.Builder(this) 
      .SetSmallIcon(Resource.Drawable.ic_launcher) 
      .SetContentTitle("FCM Message") 
      .SetContentText(messageBody) 
      .SetAutoCancel(true) 
      .SetContentIntent(pendingIntent); 

     var notificationManager = NotificationManager.FromContext(this); 
     notificationManager.Notify(0, notificationBuilder.Build()); 
    } 
} 

通知:私は解決策を見つける

protected override void OnCreate(Bundle bundle) 
    { 


     TabLayoutResource = Resource.Layout.Tabbar; 
     ToolbarResource = Resource.Layout.Toolbar; 

     base.OnCreate(bundle); 
     Forms.Init(this, bundle); 
     ImageCircleRenderer.Init(); 

     IsPlayServicesAvailable(); 

     if (Intent.Extras != null) 
     { 
      NotificationSendObject notifcation = new NotificationSendObject(); 
      foreach (var key in Intent.Extras.KeySet()) 
      { 
       switch (key) 
       { 
        case "object_id": 
         notifcation.objectId = Intent.Extras.GetString(key); 
         break; 
        case "notification_id": 
         notifcation.notificationId = Intent.Extras.GetString(key); 
         break; 
        case "object_type": 
         notifcation.objectType = Intent.Extras.GetString(key); 
         break; 
       } 
      } 
      if (notifcation.notificationId != null) 
      { 
       MessagingCenter.Send(App.CurrentApp, "OnTapNotification", notifcation); 
      } 
     } 


     SecureStorageImplementation.StoragePassword = "*****"; 

     LoadApplication(new App()); 

    } 
+0

は、ここではあなたのクラッシュログを置きます。 –

+0

OnCreate()は大文字のOですか?あなたはそれを確信していますか? –

+0

こんにちは。スタックトレースをポストします。 :) –

答えて

1

は、Intent.ExtrasはLoadApplicationメソッドの後に呼び出さなければなりません。

固定

protected override void OnCreate(Bundle bundle) 
{ 


    TabLayoutResource = Resource.Layout.Tabbar; 
    ToolbarResource = Resource.Layout.Toolbar; 

    base.OnCreate(bundle); 
    Forms.Init(this, bundle); 
    ImageCircleRenderer.Init(); 

    IsPlayServicesAvailable(); 

    SecureStorageImplementation.StoragePassword = "*****"; 

    LoadApplication(new App()); 

    if (Intent.Extras != null) 
    { 
     NotificationSendObject notifcation = new NotificationSendObject(); 
     foreach (var key in Intent.Extras.KeySet()) 
     { 
      switch (key) 
      { 
       case "object_id": 
        notifcation.objectId = Intent.Extras.GetString(key); 
        break; 
       case "notification_id": 
        notifcation.notificationId = Intent.Extras.GetString(key); 
        break; 
       case "object_type": 
        notifcation.objectType = Intent.Extras.GetString(key); 
        break; 
      } 
     } 
     if (notifcation.notificationId != null) 
     { 
      MessagingCenter.Send(App.CurrentApp, "OnTapNotification", notifcation); 
     } 
    } 

} 
関連する問題