ロードされているがフォアグラウンドで実行されていないときに、アプリに通知を送信させるにはどうすればよいですか?


8

時々使うアプリがあります。寝る前にバックグラウンドに置いたにちがいない。目が覚めると、画面にこの通知が表示されていました。

ここに画像の説明を入力してください

このような通知をXFアプリケーションで表示する方法について誰かが何か提案はありますか?

また、これらの通知はAndroidにも表示されますか?私はAndroidフォンでそれらを見たことがありませんが、それは私がそれをはるかに使用していないためです。



また、これらの通知はAndroidにも表示されますか?はい、多くの場合、彼らは望まれていない。自分で実装する場合は、ほとんど使用しないでください。
Bram Vanroy、

提示された解決策のいずれかが機能しない場合はお知らせください!:)
サーマー

アプリが起動したらすぐにローカル通知を表示しようとしていますか?
Anubhav Ranjan

こんにちは@ Alan2!以下の私の答えに質問がある場合はお知らせください!質問が解決した場合は、回答済みとしてマークしてください。将来、他の開発者を支援します。
Brandon Minnick

回答:


9

我々は使用することができますShiny.Notifications NuGetパッケージを Xamarin.Formsにおけるクロスプラットフォームのローカル通知を作成します

サンプルアプリ

以下のコードを使用して作成された完成したサンプルアプリは、https//github.com/brminnick/LocalNotificationsSampleにあります。

ウォークスルー

1. Shiny.Notificationsをインストールします

Xamarin.Formsプロジェクト、Xamarin.iOSプロジェクト、およびXamarin.AndroidプロジェクトにShiny.Notifications NuGetパッケージを追加します。

2. Shiny.Notificationsを初期化します

アンドロイド

では[Application]、クラス、中にOnCreate呼び出すことにより、光沢を初期化し、Shiny.AndroidShinyHost.Init呼び出すことによって、そのアイコンを設定します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";
        }
    }
}

MainActivity.cs、でOnRequestPermission、次のように追加することにより、Shinyがユーザーからのリクエスト通知権限を提示できるようにします。Shiny.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

ではAppDelegate.cs、をFinishedLaunching呼び出してShinyを初期化します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.ローカル通知をスケジュールする

この例では、ローカル通知をすぐに送信し、アプリが起動してから1分後に送信するようにスケジュールします

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

ここに画像の説明を入力してください ここに画像の説明を入力してください

https://github.com/brminnick/LocalNotificationsSample


質問してもいいですか?Shiny.Notificationsフォアグラウンドサービスでの使用方法を知っていますか?StartForeground(int id, Android.App.Notification notification)通知をとして提供する必要がある方法とはどういう意味Android.App.Notificationですか?
エリザベス

2

を使用Notificationsして、この機能を実現できます。Xamarin.Formsのドキュメントローカル通知から 、次のことがわかります。

ローカル通知は、モバイルデバイスにインストールされているアプリケーションによって送信されるアラートです。ローカル通知は、次のような機能によく使用されます。

  • リストアイテム
  • カレンダーイベント
  • リマインダー

ロケーションベースのトリガー各プラットフォームは、ローカル通知の作成、表示、消費を異なる方法で処理します。

アプリケーションが通知と対話するために使用できるクロスプラットフォームAPIを定義できます。

  public interface INotificationManager
{
    event EventHandler NotificationReceived;

    void Initialize();

    int ScheduleNotification(string title, string message);

    void ReceiveNotification(string title, string message);
}

詳細については、上記のドキュメントを確認してください。このリンクには、通知に関するサンプルも含まれています。

もちろん、アプリがバックグラウンドにあるときにアプリに通知を送信させたい場合は、バックグラウンドタスクを使用できます。

詳細については、以下を確認できます。

https://xamarinhelp.com/xamarin-background-tasks/

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.