flutter + firebase adminsdk c # обмен сообщениями - PullRequest
0 голосов
/ 23 апреля 2019

У меня возникли проблемы с получением простого push-уведомления в мобильном приложении, использующем флаттер, с использованием firebase C # admin sdk:

Мой код c # выглядит как

private async Task SendPushNotification3Async(string val)
{
    FirebaseApp.Create(new AppOptions()
    {
        Credential = GoogleCredential.FromFile(@"e:\firebase-adminsdk.json"),
    });
    var condition = "'SQL' in topics";
    var message = new FirebaseAdmin.Messaging.Message()
    {

        Notification = new FirebaseAdmin.Messaging.Notification()
        {
            Title = "simple title",
            Body = "simple message",
        },
        Condition = condition
    };


    var response = await FirebaseMessaging.DefaultInstance.SendAsync(message);

}

и на флаттерной стороне:

import 'package:flutter/material.dart';
import 'package:sqlnotifapp/widget/messaging_widget.dart';


void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  final String appTitle = 'Simple Notifications';
  @override
  Widget build(BuildContext context) => MaterialApp(
        title: appTitle,
        home: MainPage(appTitle: appTitle),
      );
}

class MainPage extends StatelessWidget {
  final String appTitle;

  const MainPage({this.appTitle});

  @override
  Widget build(BuildContext context) => Scaffold(
        appBar: AppBar(
          title: Text(appTitle),
        ),
        body: MessagingWidget(),
      );
}

и виджет обмена сообщениями:

import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:sqlnotifapp/model/message.dart';


class MessagingWidget extends StatefulWidget {
  @override
  _MessagingWidgetState createState() => _MessagingWidgetState();
}

class _MessagingWidgetState extends State<MessagingWidget> {
   final FirebaseMessaging _firebaseMessaging = FirebaseMessaging();



  final List<Message> messages = [];

  @override
  void initState() {
    super.initState();
    _firebaseMessaging.configure(

      onMessage: (Map<String, dynamic> message) async {
        print("onMessage: $message");
        final notification = message['notification'];
        setState(() {
          messages.add(Message(
              title: notification['title'], body: notification['body']));
        });
      },

      onLaunch: (Map<String, dynamic> message) async {
        print("onLaunch: $message");
_firebaseMessaging.subscribeToTopic('SQL');
        final notification = message['data'];
        setState(() {
          messages.add(Message(
            title: '${notification['title']}',
            body: '${notification['body']}',
          ));
        });
      },
      onResume: (Map<String, dynamic> message) async {
        print("onResume: $message");
      },
    );
    _firebaseMessaging.requestNotificationPermissions(
        const IosNotificationSettings(sound: true, badge: true, alert: true));
  }


  @override
  Widget build(BuildContext context) => ListView(
        children: messages.map(buildMessage).toList(),
      );

  Widget buildMessage(Message message) => ListTile(
        title: Text(message.title),
        subtitle: Text(message.body),
      );
}

пожалуйста, не строчку

_firebaseMessaging.subscribeToTopic ( 'SQL');

При запуске этого кода нет исключений, но также нет push-уведомлений. Обратите внимание, что я могу получить push-уведомления из консоли Firebase на мобильное устройство без проблем, но не из .net api.

Что мне здесь не хватает?

Также есть ли способ отправить сообщение через API в приложение для Android, используя его идентификатор приложения?

Любая помощь или идея приветствуется, спасибо

...