Làm cách nào để ứng dụng của tôi gửi thông báo khi được tải nhưng không chạy ở nền trước?


8

Tôi có một ứng dụng mà đôi khi tôi sử dụng. Tôi phải để nó ở đó trong nền trước khi tôi ngủ. Khi tôi thức dậy, tôi thấy thông báo này trên màn hình của tôi.

nhập mô tả hình ảnh ở đây

Có ai có bất kỳ đề xuất nào về cách tôi có thể làm cho một thông báo như thế này xuất hiện với ứng dụng XF của tôi không?

Ngoài ra, những thông báo này cũng xuất hiện trên Android phải không? Tôi chưa bao giờ nhìn thấy chúng trên điện thoại Android của tôi nhưng điều đó có thể là do tôi sử dụng nó ít hơn nhiều.


Hãy thử ở đây .
Andrew

Ngoài ra, những thông báo này cũng xuất hiện trên Android phải không? Có, và thường xuyên hơn không họ không muốn. Vì vậy, khi bạn tự thực hiện chúng, xin vui lòng sử dụng chúng một cách khan hiếm.
Bram Vanroy

Hãy cho chúng tôi biết nếu bất kỳ giải pháp được trình bày không hoạt động! :)
Saamer

Bạn đang cố gắng hiển thị thông báo cục bộ ngay khi Ứng dụng bắt đầu?
Anubhav Ranjan

Xin chào @ Alan2! Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi về câu trả lời của tôi, dưới đây! Nếu nó giải quyết được câu hỏi của bạn, hãy chắc chắn đánh dấu nó là Đã trả lời để giúp đỡ các nhà phát triển trong tương lai!
Brandon Trinick

Câu trả lời:


9

Chúng tôi có thể sử dụng Gói Shiny.Notifying NuGet để tạo Thông báo cục bộ đa nền tảng trong Xamarin.Forms

Ứng dụng mẫu

Có thể tìm thấy một ứng dụng mẫu hoàn chỉnh được tạo bằng mã bên dưới tại đây: https://github.com/brminnick/LocalNotutionsSample

Hướng dẫn

1. Cài đặt Shiny. Thông báo

Thêm Gói NuGet Shiny.Notifying vào dự án Xamarin.Forms, dự án Xamarin.iOS của bạn và dự án Xamarin.Android.

2. Khởi tạo Shiny.

Android

Trong [Application]lớp, in OnCreate, khởi tạo Shiny bằng cách gọi Shiny.AndroidShinyHost.Initvà đặt biểu tượng của nó bằng cách gọi Shiny.Notifications.AndroidOptions.DefaultSmallIconResourceName:

using System;
using Android.App;
using Android.Runtime;
using Shiny;

namespace LocalNotificationsSample.Droid
{
    [Application]
    public class YourApplication : Application
    {
        public YourApplication(IntPtr handle, JniHandleOwnership transfer) : base(handle, transfer)
        {
        }

        public override void OnCreate()
        {
            base.OnCreate();
            AndroidShinyHost.Init(this, platformBuild: services => services.UseNotifications());
            Notifications.AndroidOptions.DefaultSmallIconResourceName = "icon.png";
        }
    }
}

Trong MainActivity.cs, trong OnRequestPermission, cho phép Shiny trình bày các quyền thông báo yêu cầu từ người dùng bằng cách thêmShiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);

using Android.App;
using Android.Content.PM;
using Android.OS;
using Android.Runtime;

namespace LocalNotificationsSample.Droid
{
    [Activity(Label = "LocalNotificationsSample", Icon = "@mipmap/icon", Theme = "@style/MainTheme", MainLauncher = true, ConfigurationChanges = ConfigChanges.ScreenSize | ConfigChanges.Orientation)]
    public class MainActivity : global::Xamarin.Forms.Platform.Android.FormsAppCompatActivity
    {
        public override void OnRequestPermissionsResult(int requestCode, string[] permissions, [GeneratedEnum] Android.Content.PM.Permission[] grantResults)
        {
            Xamarin.Essentials.Platform.OnRequestPermissionsResult(requestCode, permissions, grantResults);
            Shiny.AndroidShinyHost.OnRequestPermissionsResult(requestCode, permissions, grantResults);

            base.OnRequestPermissionsResult(requestCode, permissions, grantResults);
        }

        protected override void OnCreate(Bundle savedInstanceState)
        {
            TabLayoutResource = Resource.Layout.Tabbar;
            ToolbarResource = Resource.Layout.Toolbar;

            base.OnCreate(savedInstanceState);

            Xamarin.Essentials.Platform.Init(this, savedInstanceState);
            global::Xamarin.Forms.Forms.Init(this, savedInstanceState);
            LoadApplication(new App());
        }
    }
}

iOS

Vào AppDelegate.cs, trong FinishedLaunching, khởi tạo Shiny bằng cách gọi Shiny.iOSShinyHost.Init:

using Foundation;
using UIKit;
using Shiny;

namespace LocalNotificationsSample.iOS
{
    [Register(nameof(AppDelegate))]
    public partial class AppDelegate : global::Xamarin.Forms.Platform.iOS.FormsApplicationDelegate
    {
        public override bool FinishedLaunching(UIApplication app, NSDictionary options)
        {
            iOSShinyHost.Init(platformBuild: services => services.UseNotifications());
            global::Xamarin.Forms.Forms.Init();
            LoadApplication(new App());

            return base.FinishedLaunching(app, options);
        }
    }
}

3. Lên lịch thông báo địa phương

Trong ví dụ này, chúng tôi sẽ gửi Thông báo cục bộ ngay lập tức và lên lịch gửi một phút sau khi ứng dụng khởi chạy

using System;
using System.Threading.Tasks;
using Shiny;
using Shiny.Notifications;
using Xamarin.Forms;

namespace LocalNotificationsSample
{
    public partial class App : Application
    {
        public App()
        {
            InitializeComponent();

            MainPage = new MainPage();
        }

        protected override async void OnStart()
        {
            await SendNotificationNow();
            await ScheduleLocalNotification(DateTimeOffset.UtcNow.AddMinutes(1));
        }

        Task SendNotificationNow()
        {
            var notification = new Notification
            {
                Title = "Testing Local Notifications",
                Message = "It's working",
            };

            return ShinyHost.Resolve<INotificationManager>().RequestAccessAndSend(notification);
        }

        Task ScheduleLocalNotification(DateTimeOffset scheduledTime)
        {
            var notification = new Notification
            {
                Title = "Testing Local Notifications",
                Message = "It's working",
                ScheduleDate = scheduledTime
            };

            return ShinyHost.Resolve<INotificationManager>().Send(notification);
        }
    }
}

nhập mô tả hình ảnh ở đây nhập mô tả hình ảnh ở đây

https://github.com/brminnick/LocalNotutionsSample


Tôi có thể hỏi bạn một câu không? Bạn có biết làm thế nào để sử dụng Shiny.Notificationsvới một dịch vụ tiền cảnh? Ý tôi là với StartForeground(int id, Android.App.Notification notification)phương thức mà thông báo phải được cung cấp như một Android.App.Notification?
Elisabeth

2

Bạn có thể sử dụng Notificationsđể đạt được chức năng này. Từ tài liệu Thông báo địa phương trong Xamarin.Forms , chúng tôi sẽ tìm thấy:

Thông báo cục bộ là các cảnh báo được gửi bởi các ứng dụng được cài đặt trên thiết bị di động. Thông báo cục bộ thường được sử dụng cho các tính năng như:

  • Danh sách mục
  • Lịch sự kiện
  • Nhắc nhở

Các kích hoạt dựa trên vị trí Mỗi nền tảng xử lý việc tạo, hiển thị và tiêu thụ các thông báo cục bộ khác nhau.

Bạn có thể xác định API đa nền tảng mà ứng dụng có thể sử dụng để tương tác với thông báo.

  public interface INotificationManager
{
    event EventHandler NotificationReceived;

    void Initialize();

    int ScheduleNotification(string title, string message);

    void ReceiveNotification(string title, string message);
}

Để biết thêm chi tiết, bạn có thể kiểm tra tài liệu trên và liên kết này cũng chứa một mẫu về Thông báo. Nó sẽ hữu ích cho bạn.

Tất nhiên, nếu bạn muốn ứng dụng của mình gửi thông báo khi ứng dụng ở chế độ nền, bạn có thể sử dụng các tác vụ nền.

Để biết thêm chi tiết, bạn có thể kiểm tra:

https://xamarinhelp.com/xamarin-background-t task /

https://docs.microsoft.com/zh-cn/xamarin/ios/app-fundamentals/backgrounding/

https://docs.microsoft.com/en-ie/xamarin/android/app-fundamentals/service/creating-a-service/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.