Как реализовать push-уведомление во флаттере
Привет, я пытаюсь реализовать push-уведомление во флаттера, как отображать как уведомление, может ли кто-нибудь помочь, я могу слушать, поскольку получаю уведомление, но я не могу видеть сообщение и он появляется как предупреждение, но я хотите, как уведомление может помочь кому-либо, и в android или iOS мы должны прямо в файле манифеста файла и приложения делегировать, что об этом в flutter
и мой код выглядит следующим образом
class PushMessagingExample extends StatefulWidget {
@override
_PushMessagingExampleState createState() => new _PushMessagingExampleState();
}
class _PushMessagingExampleState extends State<PushMessagingExample> {
String _homeScreenText = "Waiting for token...";
bool _topicButtonsDisabled = false;
final FirebaseMessaging _firebaseMessaging = new FirebaseMessaging();
final TextEditingController _topicController =
new TextEditingController(text: 'topic');
Future<Null> _showItemDialog(Map<String, dynamic> message) async {
final Item item = _itemForMessage(message);
showDialog<Null>(
context: context,
child: new AlertDialog(
content: new Text("Item ${message} has been updated"),
actions: <Widget>[
new FlatButton(
child: const Text('CLOSE'),
onPressed: () {
Navigator.pop(context, false);
}),
new FlatButton(
child: const Text('SHOW'),
onPressed: () {
Navigator.pop(context, true);
}),
],
)).then((bool shouldNavigate) {
if (shouldNavigate == true) {
_navigateToItemDetail(message);
}
});
}
Future<Null> _navigateToItemDetail(Map<String, dynamic> message) async {
final Item item = _itemForMessage(message);
// Clear away dialogs
Navigator.popUntil(context, (Route<dynamic> route) => route is PageRoute);
if (!item.route.isCurrent) {
Navigator.push(context, item.route);
}
}
@override
void initState() {
super.initState();
_firebaseMessaging.configure(
onMessage: (Map<String, dynamic> message) {
print("onMessage: $message");
print(message);
_showItemDialog(message);
},
onLaunch: (Map<String, dynamic> message) {
print("onLaunch: $message");
print(message);
_navigateToItemDetail(message);
},
onResume: (Map<String, dynamic> message) {
print("onResume: $message");
print(message);
_navigateToItemDetail(message);
},
);
_firebaseMessaging.requestNotificationPermissions(
const IosNotificationSettings(sound: true, badge: true, alert: true));
_firebaseMessaging.onIosSettingsRegistered
.listen((IosNotificationSettings settings) {
print("Settings registered: $settings");
});
_firebaseMessaging.getToken().then((String token) {
assert(token != null);
setState(() {
_homeScreenText = "Push Messaging token: $token";
});
print(_homeScreenText);
});
}
@override
Widget build(BuildContext context) {
return new Scaffold(
body: new Material(
child: new Column(
children: <Widget>[
new Center(
child: new Text(_homeScreenText),
),
],
),
));
}
}
Ответы
Ответ 1
Push-уведомления во Flutter могут быть особенно трудными, потому что вам нужно сделать вдвое больше работы, чтобы заставить их работать с конкретными реализациями Android и iOS (обе они, конечно, совершенно разные).
Я строил OneSignal SDK для флаттера. Он будет готов в течение нескольких дней. Мы прилагаем все усилия, чтобы максимально упростить push-уведомления, и наш SDK-совместимый способ легко использовать в соответствии с GDPR.
Репозиторий находится здесь (https://github.com/OneSignal/OneSignal-Flutter-SDK), он с открытым исходным кодом, и мы приветствуем вклады всех желающих. Он действует как оболочка над родным SDK для Android и iOS OneSignal.
Ответ 2
Если вы пытаетесь поместить сообщения на экран блокировки, убедитесь, что вы отправляете тип сообщения "уведомление", а не сообщение "данные", которое будет доставлено в работающее приложение. Подробнее о различных типах сообщений Firebase вы можете узнать в руководстве разработчика Firebase.
Ответ 3
Вы используете FCM настолько хорошо, что для Android это не должно быть проблемой, просто следуйте поваренной книге, и все будет в порядке, настоящая проблема связана с iOS, потому что вам нужно создать ключ, а затем сертификат для push-уведомлений, добавить это в подфайле и активировать его в xcode. Используйте эти ссылки для получения дополнительной информации: здесь и этот.