0

Windows 10 UWP アプリケーションを開発していますが、生の通知の送信と処理に問題があります。

PHPで記述されたサーバーから通知を送信しています。アプリが開いていると、送信された生の通知を受け取ることができます。以下は私の通知のテンプレートです。

           <toast launch='args'>
                <visual>
                    <binding template = 'ToastGeneric'>
                         <text> başlık </text>
                         <text> Açıklama </text>
                        </binding>
                    </visual>
            </toast> 

上記のテンプレートを生の通知として送信しました。

また、以下の方法をバックグラウンドタスクとして使用しています

public void Run(IBackgroundTaskInstance taskInstance)
    {
        // Get the background task details
        ApplicationDataContainer settings = ApplicationData.Current.LocalSettings;
        string taskName = taskInstance.Task.Name;

        Debug.WriteLine("Background " + taskName + " starting...");

        // Store the content received from the notification so it can be retrieved from the UI.
        RawNotification notification = (RawNotification)taskInstance.TriggerDetails;
        settings.Values[taskName] = notification.Content;
        Windows.Data.Xml.Dom.XmlDocument doc = new XmlDocument();

        var toast = new ToastNotification(doc);
        var center = ToastNotificationManager.CreateToastNotifier();
        center.Show(toast);


        Debug.WriteLine("Background " + taskName + " completed!");
    }

appmanifest にタスク エントリ ポイントを設定しましたが、デバッガーでテストできませんでした。

以下のコードでバックグラウンド タスクを登録します。

 private void RegisterBackgroundTask()
    {
        BackgroundTaskBuilder taskBuilder = new BackgroundTaskBuilder();
        PushNotificationTrigger trigger = new PushNotificationTrigger();
        taskBuilder.SetTrigger(trigger);

        // Background tasks must live in separate DLL, and be included in the package manifest
        // Also, make sure that your main application project includes a reference to this DLL
        taskBuilder.TaskEntryPoint = SAMPLE_TASK_ENTRY_POINT;
        taskBuilder.Name = SAMPLE_TASK_NAME;

        try
        {
            BackgroundTaskRegistration task = taskBuilder.Register();
            task.Completed += BackgroundTaskCompleted;
        }
        catch (Exception ex)
        {
            // rootPage.NotifyUser("Registration error: " + ex.Message, NotifyType.ErrorMessage);
            UnregisterBackgroundTask();
        }
    }

最後に、私の pushreceived イベント:

private async void OnPushNotificationReceived(PushNotificationChannel sender, PushNotificationReceivedEventArgs e)
    {
        if (e.NotificationType == PushNotificationType.Raw)
        {
            e.Cancel = false;

            Windows.Data.Xml.Dom.XmlDocument doc = new Windows.Data.Xml.Dom.XmlDocument();

            var t = @" <toast launch='args'>
                <visual>
                    <binding template = 'ToastGeneric'>
                         <text> başlık </text>
                         <text> Açıklama </text>
                        </binding>
                    </visual>
            </toast> ";

            doc.LoadXml(t);

            var toast = new ToastNotification(doc);
            var center = ToastNotificationManager.CreateToastNotifier();
            center.Show(toast);
        }
    }

メソッドの内部はテスト専用です。

さて、私の構造のどこが間違っているか、または間違っているかを尋ねたいと思いますか? 提案、例、またはヘルプをいただければ幸いです。

前もって感謝します。

4

1 に答える 1