Push-уведомления не работают в Xamarin. Android - PullRequest
0 голосов
/ 24 января 2019

Я настроил push-уведомления для приложения Xamarin.Android , используя Центр уведомлений Azure и Firebase . Я следовал этому учебнику

При отправке тестового push-уведомления из Azure Notification Hub я вижу, что мой код уведомления вызывается, поэтому кажется, что все настроено. Ошибок не возникает, но push-уведомлений также не получено.

    [Service]
    [IntentFilter(new[] { "com.google.firebase.MESSAGING_EVENT" })]
    public class MyFirebaseMessagingService : FirebaseMessagingService
    {
        const string TAG = "MyFirebaseMsgService";
        public override void OnMessageReceived(RemoteMessage message)
        {
            Log.Debug(TAG, "From: " + message.From);
            if (message.GetNotification() != null)
            {
                //These is how most messages will be received
                Log.Debug(TAG, "Notification Message Body: " + message.GetNotification().Body);
                SendNotification(message.GetNotification().Body);
            }
            else
            {
                //Only used for debugging payloads sent from the Azure portal
                SendNotification(message.Data.Values.First());
            }
        }

        void SendNotification(string messageBody)
        {
            var intent = new Intent(this, typeof(MainActivity));
            intent.AddFlags(ActivityFlags.ClearTop);
            var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);

            var notificationBuilder = new NotificationCompat.Builder(this)
                .SetContentTitle("FCM Message")
                .SetSmallIcon(Resource.Drawable.drivingalert)
                .SetContentText(messageBody)
                .SetAutoCancel(true)
                .SetContentIntent(pendingIntent);

            var notificationManager = NotificationManager.FromContext(this);
            notificationManager.Notify(0, notificationBuilder.Build()); // this should send the notification!!
        }
    }

Я могу пройтись по коду, и все, кажется, работает без проблем, но не получено push-уведомление.

1 Ответ

0 голосов
/ 24 января 2019

Вызовите следующий метод в MainActivity, чтобы установить канал уведомления:

void CreateNotificationChannel()
    {
        if (Build.VERSION.SdkInt < BuildVersionCodes.O)
        {
            // Notification channels are new in API 26 (and not a part of the
            // support library). There is no need to create a notification 
            // channel on older versions of Android.
            return;
        }

        var channel = new NotificationChannel(CHANNEL_ID, "FCM Notifications", NotificationImportance.Default)
                      {
                          Description = "Firebase Cloud Messages appear in this channel"
                      };

        var notificationManager = (NotificationManager) GetSystemService(NotificationService);
        notificationManager.CreateNotificationChannel(channel);
    }

Если вы проверите Firebase Github , они обновили этот код, но он, кажется, недоступен в их документах, а также другие документы на сервере push-уведомлений еще не обновили его, что заставляет людей сталкиваться с с огромной скоростью, спасибо за указание, я подниму эту проблему с Mircosoft!

Обновление

Также убедитесь, что вы используете классы Notification Compat для обратной совместимости, как показано ниже:

 var intent = new Intent(this, typeof(MainActivity));
 intent.AddFlags(ActivityFlags.ClearTop);               
 var pendingIntent = PendingIntent.GetActivity(this, 0, intent, PendingIntentFlags.OneShot);

 NotificationCompat.Builder notificationBuilder = new NotificationCompat.Builder(this)
             .SetSmallIcon(Resource.Drawable.Icon)
             .SetContentTitle(messageTitle)
             .SetContentText(messageBody)
             .SetSound(Settings.System.DefaultNotificationUri)
             .SetVibrate(new long[] { 1000, 1000 })
             .SetLights(Color.AliceBlue, 3000, 3000)
             .SetAutoCancel(true)
             .SetOngoing(true)
             .SetContentIntent(pendingIntent);
            NotificationManagerCompat notificationManager = NotificationManagerCompat.From(this);
            notificationManager.Notify(0, notificationBuilder.Build());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...