Xamarin.Forms Android 推送通知不出现

Posted

技术标签:

【中文标题】Xamarin.Forms Android 推送通知不出现【英文标题】:Xamarin.Forms Android Push Notification Doesn't Appear 【发布时间】:2019-04-04 07:31:15 【问题描述】:

我正在使用 azure hub 通知。 我正在Xamarin.Forms 开发我的应用程序。对于 android,我可以在测试它进行调试时收到通知,我可以为此显示 DisplayAlert

但我无法将其显示为通知。我搜索了android oreo之后我应该创建一个通知频道。

但我不知道该怎么做。他们说您应该在 strings.xml 中创建一个通知 ID,但我没有 strings.xml 文件。不知道怎么弄,有大神帮忙吗?

internal static readonly string CHANNEL_ID = "cross_channel";
    void CreateNotification(string title, string desc)
    
        var notificationManager = GetSystemService(Context.NotificationService)
            as NotificationManager;

        var uiIntent = new Intent(this, typeof(MainActivity));
        var pendingIntent = PendingIntent.GetActivity(this, RandomGenerator(), uiIntent, PendingIntentFlags.OneShot);
        var notification = new Notification(Android.Resource.Drawable.ButtonMinus, title)
        
            Flags = NotificationFlags.AutoCancel
        ;
        notification.SetLatestEventInfo(this, title, desc,
            PendingIntent.GetActivity(this, 0, uiIntent, 0));

        if (Build.VERSION.SdkInt >= BuildVersionCodes.O)
        
            var channel = new NotificationChannel(CHANNEL_ID,
                                      "Cross Notifications",
                                      NotificationImportance.High);


            notificationManager.CreateNotificationChannel(channel);
            string channelId = "Cross Channel";
            var notBuilder = new Notification.Builder(Application.Context, CHANNEL_ID).SetContentTitle(title).SetContentText(desc).SetSmallIcon(Android.Resource.Drawable.StarBigOn).SetAutoCancel(true); 
            notificationManager.Notify(1, notBuilder.Build());

            channel.Description = (desc); 
            notBuilder.SetChannelId(channelId);
            
            notificationManager.Notify(RandomGenerator(), notBuilder.Build());
    

【问题讨论】:

我已经添加了答案看看 【参考方案1】:

我在使用 Xamarin.Forms 正确显示通知时也遇到了一些麻烦。我假设您已经覆盖了“OnMessageReceived”事件并且您直接调用“CreateNotification”?最后,这是对我有用的代码:

private void ShowNotification(RemoteMessage msg, IDictionary<string, string> data)

    var intent = new Intent();
    intent.AddFlags(ActivityFlags.ClearTop);

    foreach (var key in data.Keys)
        intent.PutExtra(key, data[key]);


    var pendingIntent = PendingIntent.GetActivity(Android.App.Application.Context, 100, intent, PendingIntentFlags.OneShot);

    var notificationBuilder = new NotificationCompat.Builder(Android.App.Application.Context) // Note: Everything I read online said to provide the ChannelID string here, but doing so caused it to not display notifications.
.SetSmallIcon(Resource.Drawable.abc_btn_radio_to_on_mtrl_000) // You can set this to your apps icon
.SetContentTitle(msg.GetNotification().Title)
.SetContentText(msg.GetNotification().Body)
.SetPriority((int)Android.App.NotificationImportance.Max)
.SetDefaults(NotificationCompat.DefaultAll)
.SetContentIntent(pendingIntent) // Even though intent here is empty, you *may* need to include it for the notification to show, I never tried without one.
.SetVisibility((int)NotificationVisibility.Public);


     var notificationManager = NotificationManagerCompat.From(Android.App.Application.Context);
            notificationManager.Notify(100, notificationBuilder.Build());

【讨论】:

如果您想将其他(“额外”)数据传递给意图。它可能与您无关,在这种情况下您应该可以忽略它。见:***.com/questions/5265913/…【参考方案2】:

MainActivity.cs的onCreate方法中可以调用这个方法:

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);
    

在哪里

    internal static readonly string CHANNEL_ID = "my_notification_channel";
    internal static readonly int NOTIFICATION_ID = 100; 

分别是频道ID和通知ID的定义。

在加载 XF 后在 MainActivity 的 OnCreate 中调用:

LoadApplication(new App());
CreateNotificationChannel();

祝你好运

在查询的情况下恢复

【讨论】:

以上是关于Xamarin.Forms Android 推送通知不出现的主要内容,如果未能解决你的问题,请参考以下文章

Xamarin.Forms Android推送通知不会出现

关闭应用程序时未收到 Xamarin Forms Android 推送通知

Xamarin学习系列之极光消息推送

xamarin.forms 中的推送通知

Xamarin.iOS:Firebase 推送通知不起作用

Azure 通知中心的 Xamarin.Forms PushNotifications