FCM и xamarin.android - приемник вещания не работает - PullRequest
0 голосов
/ 04 июля 2018

У меня проблема с приемником вещания в xamarin.android. Не могу заставить его работать.

У меня есть уведомление в рабочем приложении, и я хочу изменить некоторые вещи в своем приложении после получения уведомления (например, всплывающее сообщение или значок кнопки), но оно не работает. Я не знаю, что я делаю неправильно, и я не могу найти решение, потому что все темы связаны с Java. Мне нужно что-то, событие или широковещательный приемник, чтобы срабатывать, когда пользователь получает уведомление, а затем я хочу сделать кое-что в моем MainActivity.

Итак, это код.

Класс BroadcastReceiver:

  [BroadcastReceiver(Enabled = true, Exported = false)]
public class MyMessageReceiver : BroadcastReceiver
{
    public override void OnReceive(Context context, Intent intent)
    {
        bool messageReceived = intent.GetBooleanExtra("messageReceived", false);
    }
}

Метод OnMessageReceived:

 {
            base.OnMessageReceived(message);
            SendNotification(message.GetNotification().Body);

            LocalBroadcastManager broadcaster = LocalBroadcastManager.GetInstance(this);

            Intent intent = new Intent("message");
            intent.PutExtra("messageReceived", true);
            broadcaster.SendBroadcast(intent);
        }

И методы OnResume и OnPause:

 protected override void OnResume()
    {
        base.OnResume();

        LocalBroadcastManager.GetInstance(this).RegisterReceiver(myReceiver, new IntentFilter("message"));
        RegisterReceiver(myReceiver, new IntentFilter("message"));
    }

    protected override void OnPause()
    {
        base.OnPause();
        LocalBroadcastManager.GetInstance(this).UnregisterReceiver(myReceiver);
    }

Я не знаю, как получить эту информацию, например, в моем методе OnCreate в MainActivity? Я пробовал с

messageReceived = Intent.GetBooleanExtra("messageReceived", false);
        if (messageReceived)
        {
            Toast.MakeText(this, "new notification", ToastLength.Long).Show();
        }

Но это не работает, messageReceived равно нулю.

1 Ответ

0 голосов
/ 16 июля 2018

Я знаю, что уже слишком поздно, но лучше поздно, чем никогда:

После анализа сообщений Firebase я сделал подходящий обходной путь для этой цели:

Когда ваше приложение работает в фоновом режиме, при получении push-уведомления по умолчанию вызывается метод намерения дескриптора:

 public override void HandleIntent(Intent p0)
{
  base.HandleIntent(intent);
  //Your code to know that you received a notification (backgrounnd)
  // Use shared preference for this 
}

Не знаю, как использовать общие настройки, проверьте this .

Для получения дополнительной информации о том, как работает дескриптор, проверьте мой ответ здесь .

Когда приложение находится на переднем плане, вы можете просто использовать метод получения сообщений следующим образом:

 public override void OnMessageReceived(Context context, Intent intent)
{
     //Your code to know that you received a notification (backgrounnd)
     // Use shared preference for this 
}

Затем, где бы вам ни понадобилось это использовать, вы можете получить флаг или счетчик или что-то еще, используя общие настройки.

В случае каких-либо запросов вернуться!

...