0

Xamarin Forms for Android、ios、WinPhone で共有プロジェクトを実現しようとしています。通知を使用したいので、このサンプル ( https://github.com/edsnider/Xamarin.Plugins/tree/master/Notifier ) に従って、Android でローカル通知を作成できました。しかし、私はまだAndroidアプリケーションのような操作方法を理解していません. ページを開くか、ページがすでにアクティブかどうかを確認するか、すべてのプラットフォームのブロードキャストを中止します。私を助けることができるリンクはありますか?各プラットフォームに実装する必要があるインターフェイスでのみ機能するか、他のソリューションが存在することは正しいですか?

私の基本的な問題は、xmpp-protocol からメッセージを取得し、メッセージ通知をユーザーに送信するか、開いている場合は UI を更新したいことです...

ご協力いただきありがとうございます...

4

1 に答える 1

1

プラットフォーム プロジェクトにインターフェイスを追加する必要はありません。両方のプロジェクト Android/IOS に nuget パッケージをインストールするだけです。

IOS では、次を追加する必要があります。

// Ask the user for permission to get notifications on iOS 8.0+
            if (UIDevice.CurrentDevice.CheckSystemVersion (8, 0)) {
                var settings = UIUserNotificationSettings.GetSettingsForTypes (
                    UIUserNotificationType.Alert | UIUserNotificationType.Badge | UIUserNotificationType.Sound,
                    new NSSet ());
                UIApplication.SharedApplication.RegisterUserNotificationSettings (settings);
            }

あなたの方法に:

public override bool FinishedLaunching (UIApplication app, NSDictionary options)

AppDelegate で:

次に、共有プロジェクトで次を呼び出します。

using Plugin.LocalNotifications.Abstractions;


    CrossLocalNotifications.Current.Show("You've got mail", "You have 793 unread messages!");

現在のページを置き換える時点で、何もする必要はありません。Xamarin Forms がそれを処理します。

Android でも、MainActivity の LaunchMode を設定することで、アプリケーションの再起動動作を制御できます。

例:

LaunchMode = Android.Content.PM.LaunchMode.SingleInstance, AlwaysRetainTaskState = true

Android での LauchModes の詳細については、以下をお読みください。

https://developer.android.com/guide/components/tasks-and-back-stack.html

追加のアクティビティ フラグを確認します。

FLAG_ACTIVITY_NEW_TASK
FLAG_ACTIVITY_CLEAR_TOP
FLAG_ACTIVITY_SINGLE_TOP

現在、このプラグインはアプリ内の通知をキャッチできません。ただし、プラットフォーム固有の機能を使用してこれを行うことができます

IOS: https://developer.xamarin.com/guides/cross-platform/application_fundamentals/notifications/ios/remote_notifications_in_ios/を参照して ください。

  public override void ReceivedLocalNotification(UIApplication application, UILocalNotification notification)
  {
     MessagingCenter.Send<MainPage> (this, "IOS notification received");
  }

Android: このプラグインのソースを読んだ後、ScheduledAlarmHandler.LocalNotificationKey キーの作成メソッドで Bundle を確認できることがわかりました。

protected override void OnCreate(Bundle bundle)
{
  base.OnCreate(bundle);
  if(bundle.ContainsKey(ScheduledAlarmHandler.LocalNotificationKey)){
      //App launched form notification
    MessagingCenter.Send<MainPage> (this, "Android notification received");
  }
}

また、BroadcastReceiver クラスを使用することもできます。 https://developer.xamarin.com/api/type/Android.Content.BroadcastReceiver/

于 2016-10-11T11:15:55.700 に答える