#android #firebase #flutter #notifications #firebase-cloud-messaging
# #Android #firebase #флаттер #уведомления #firebase-облако-обмен сообщениями
Вопрос:
Я новичок в flutter, я использую firebase-Messaging для отправки уведомлений на устройство. мы используем веб-API, которые отправляют запрос в firebase для отправки уведомлений, а firebase отправляет уведомления на Android. Я хочу, чтобы в заголовке и теле уведомления отображались две кнопки (принять и отклонить), например, опция watts app notification «отметить как прочитанное». Я хочу что-то подобное.
Файл манифеста Android, который я добавил:
<intent-filter>
<action android:name="FLUTTER_NOTIFICATION_CLICK" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
код flutter
final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();
if(user != null)
{
Navigator.push(context,
MaterialPageRoute(builder: (context) => InitialPage()));
_firebaseMessaging.onTokenRefresh.listen(sendTokenToServer);
_firebaseMessaging.getToken();
// _firebaseMessaging.subscribeToTopic('all');
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) async {
print("onMessage: $message");
final notification = message['data'];
},
onLaunch: (Map<String, dynamic> message) async {
print("onLaunch: $message");
},
onResume: (Map<String, dynamic> message) async {
print("onResume: $message");
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
}
код службы веб-api
public class NotificationController : ApiController
{
//api/user
public IHttpActionResult GetUsers()
{
WebRequest tRequest = WebRequest.Create("https://fcm.googleapis.com/fcm/send");
tRequest.Method = "post";
//serverKey - Key from Firebase cloud messaging server
tRequest.Headers.Add(string.Format("Authorization: key={0}", "xxxxxxxxxxxxxxxxxxxxxx"));
//Sender Id - From firebase project setting
tRequest.Headers.Add(string.Format("Sender: id={0}", "123456"));
tRequest.ContentType = "application/json";
var payload = new
{
to = "wwwwwwwwwwww",
priority = "high",
content_available = true,
notification = new
{
body = "test body",
title = "Test title",
badge = 1,
},
data = new
{
key1 = "value1",
key2 = "value2"
}
};
string postbody = JsonConvert.SerializeObject(payload).ToString();
Byte[] byteArray = Encoding.UTF8.GetBytes(postbody);
tRequest.ContentLength = byteArray.Length;
using (Stream dataStream = tRequest.GetRequestStream())
{
dataStream.Write(byteArray, 0, byteArray.Length);
using (WebResponse tResponse = tRequest.GetResponse())
{
using (Stream dataStreamResponse = tResponse.GetResponseStream())
{
if (dataStreamResponse != null) using (StreamReader tReader = new StreamReader(dataStreamResponse))
{
String sResponseFromServer = tReader.ReadToEnd();
//result.Response = sResponseFromServer;
}
}
}
}
return Ok("test service");
}
}
Ответ №1:
Служба обмена сообщениями Firebase Cloud для push-уведомлений не предоставляет возможности добавлять кнопки действий в макеты уведомлений. Итак, чтобы добавить кнопку действия в уведомления, единственный способ, который у нас есть сейчас, — создать уведомление на родном языке и интегрировать его с Flutter.
Проверьте этот средний пост
Комментарии:
1. спасибо за ваш ответ 🙂 У меня есть еще один вопрос, пожалуйста … когда мое приложение на переднем плане и отправляет ему уведомление, оно не отображается как уведомление, я имею в виду, что на устройство не поступает уведомление. как я могу с этим справиться
2. Вы можете использовать пакеты flutter_local_notifications, чтобы показывать уведомления, когда приложение получает их напрямую pub.dev/packages/flutter_local_notifications
3. Имеет ли этот ответ отношение и к Firebase в Capcitor?