Я пытаюсь перенаправить на другую страницу, нажимаемую на различные уведомления. OnMessagedRectained не запускается, когда приложение работает в фоновом режиме, только когда оно находится на переднем плане.
В соответствии с документацией передний план уведомления, фон - это системный трей, который запускается.
Итак, я посмотрел, как заставить его работать в фоновом режиме, я нашел этот учебник .
В соответствии с этим учебником:
Как объясняется ниже, с помощью консоли FCM вы можете отправлять только уведомления. сообщения уведомлений могут обрабатываться методом onMessageReceived в специализированном приложении и доставляться в системный трей устройства в фоновом приложении. Пользователь нажимает на уведомление, и по умолчанию приложение запускается. если вы хотите обрабатывать уведомления в каждом состоянии приложения, вы должны использовать сообщение данных и метод onMessageReceived.
Итак, я посмотрел, что такое сообщение данных и что такое сообщение уведомления. Документация
Я последовал за учебником, но он не работает для меня. Это мой код:
public async Task<bool> WakeUp(string[] tokens)
{
var message = new Message()
{
RegistrationID= tokens,
Notification = new Notification()
{
Title = "testing",
Body = "test"
},
Android = new AndroidConfig()
{
Notification = new AndroidNotification()
{
Color = "#FF0000",
ClickAction = "MyActivity"
}
},
Data = new Dictionary<string, string>()
{
{
"notificationType", NotificationType.WakeUp.ToString()
}
}
};
return await SendAsyncMessage(message).ConfigureAwait(false);
}
public async Task<bool> SendAsyncMessage(Message message)
{
var jsonMessage = JsonConvert.SerializeObject(message);
var request = new HttpRequestMessage(HttpMethod, FIREBASE_PUSH_NOTIFICATION_URL)
{
Content = new StringContent(jsonMessage, Encoding.UTF8, "application/json")
};
request.Headers.TryAddWithoutValidation("Authorization", $"key={ConfigurationManager.AppSettings["FirebaseNotificationServerKey"]}");
request.Headers.TryAddWithoutValidation("Sender", $"id={ConfigurationManager.AppSettings["FirebaseNotificationSenderID"]}");
HttpResponseMessage result;
using (var client = new HttpClient())
{
result = await client.SendAsync(request).ConfigureAwait(false);
}
return result.IsSuccessStatusCode;
}
Вот так я получаю свой код в своем приложении
public override void OnMessageReceived(RemoteMessage message)
{
Console.WriteLine("message recieved");
}
Raw Json
{
"registration_ids":["myToken"],
"condition":null,
"data":
{
"notificationType":"WakeUp"
},
"notification":
{
"title":"testing",
"body":"test",
"image":null
},
"android":
{
"collapse_key":null,
"restricted_package_name":null,
"data":null,
"notification":
{
"title":null,
"body":null,
"icon":null,
"color":"#FF0000",
"sound":null,
"tag":null,
"image":null,
"click_action":"mActivity",
"title_loc_key":null,
"title_loc_args":null,
"body_loc_key":null,
"body_loc_args":null,
"channel_id":null
},
"fcm_options":null,
"priority":"high",
"ttl":null
},
"webpush":null,
"apns":null,
"fcm_options":null,
"topic":null
}
Уведомление получено, но OnMessageReceded не сработало. Я думаю, что центр уведомлений является ответственным за отображение уведомлений.
В чем может быть проблема?