且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

Xamarin 表单:推送通知不适用于 Android 7.1.2

更新时间:2022-11-11 21:04:27

我关注了这个示例https://docs.microsoft.com/en-us/azure/notification-hubs/xamarin-notification-hubs-push-notifications-android-gcm

我发布了我的生产项目中的 SendNotification 方法.

I post my SendNotification method from my production project.

按照我的工作代码并更改您的方法.

Following my working code and change your method.

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


        //if i want more than one notification ,different unique value in every call
        Random u = new Random ();

        if (Build.VERSION.SdkInt >= BuildVersionCodes.O) {

            string channelName = Resources.GetString (Resource.String.channel_name);

            NotificationCompat.Builder notificationBuilder;



                 notificationBuilder = new NotificationCompat.Builder (this, channelName)
                        .SetContentTitle (title)
                        .SetSmallIcon (Resource.Drawable.ic_stat_g)
                        .SetContentText (messageBody)
                        .SetAutoCancel (true)
                        .SetContentIntent (pendingIntent);


            var notificationManager = GetSystemService (Context.NotificationService) as NotificationManager;


            NotificationChannel channel = new NotificationChannel (channelName, "notification channel", NotificationImportance.Default);
            notificationManager.CreateNotificationChannel (channel);

            notificationManager.Notify (u.Next(), notificationBuilder.Build ());


        } 
        else
        {

            NotificationCompat.Builder notificationBuilder;


                 notificationBuilder = new NotificationCompat.Builder (this)
                    .SetContentTitle (title)
                    .SetSmallIcon (Resource.Drawable.ic_stat_g)
                    .SetContentText (messageBody)
                    .SetAutoCancel (true)
                    .SetContentIntent (pendingIntent);


            var notificationManager = GetSystemService (Context.NotificationService) as NotificationManager;

            notificationManager.Notify (u.Next(), notificationBuilder.Build ());
        }
    }

首先不要使用 Android.App.Notification.Builder 已弃用.NotificationCompat.Builder 是新的.

First of all don't use Android.App.Notification.Builder is deprecated. The NotificationCompat.Builder is the new one.

也许这是你的新代码

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

if (Build.VERSION.SdkInt < BuildVersionCodes.O)
        {
            var notificationBuilder = new NotificationCompat.Builder(this)
                        .SetContentTitle(Header)
                        .SetSmallIcon(Resource.Drawable.icon)
                        .SetContentText(body)
                        .SetAutoCancel(true)
                        .SetContentIntent(pendingIntent);

            var notificationManager = GetSystemService (Context.NotificationService) as NotificationManager;

            notificationManager.Notify(0, notificationBuilder.Build());
        }
        else
        {
            var notificationBuilder = new NotificationCompat.Builder(this, Utils.CHANNEL_ID)
                        .SetContentTitle(Header)
                        .SetSmallIcon(Resource.Drawable.icon)
                        .SetContentText(body)
                        .SetAutoCancel(true)
                        .SetContentIntent(pendingIntent);


            var notificationManager = GetSystemService (Context.NotificationService) as NotificationManager;

            NotificationChannel channel = new NotificationChannel (Utils.CHANNEL_ID, "FCM Notifications", NotificationImportance.Default);
            notificationManager.CreateNotificationChannel (channel);

            notificationManager.Notify (0, notificationBuilder.Build ());
        }