0

現在、Windows 8.1 プッシュ通知部分に取り組んでいます。さまざまなリンクを読んだところ、最初にアプリを登録し、SID やクライアント シークレットなどのすべての情報を取得してサーバー チームに送信し、プッシュ通知を送信できるようにする必要があることがわかりました。

その後、WNS から channelUri とその Uri の有効期限を取得するために、次のコードを自分の側に実装しました。

  PushNotificationChannel channel = null;
        try
        {
            channel = await PushNotificationChannelManager.CreatePushNotificationChannelForApplicationAsync();
            if (channel != null)
            {
                var notificationUri = channel.Uri;
                var expiration_time = channel.ExpirationTime;
            }
            channel.PushNotificationReceived += channel_PushNotificationReceived;
        }
        catch (Exception ex)
        {
            if (ex != null)
            {
                System.Diagnostics.Debug.WriteLine(ex.HResult);
            }
        } 

私はすべての値を完全に受け取り、サーバー チームはプッシュ通知を送信するロジックを追加しました。今、私が直面している問題は、サーバーからそのユーザーに送信された受信したプッシュ通知を表示する方法がわからないことです。また、アプリが実行されていない、またはバックグラウンドであるという通知を表示することはできますか?

4

1 に答える 1

0

バックグラウンド タスクが私の問題を解決しました。

まず、 WindowsRuntimeComponentプロジェクトを作成し、以下のコードを追加する必要があります

public sealed class PushNotification:IBackgroundTask
{
    public void Run(IBackgroundTaskInstance taskInstance)
    {
        RawNotification notification = (RawNotification)taskInstance.TriggerDetails as RawNotification;
        if (notification != null)
        {
            ToastTemplateType toastTemplate = ToastTemplateType.ToastImageAndText01;
            XmlDocument toastXml = ToastNotificationManager.GetTemplateContent(toastTemplate);
            var textElemets = toastXml.GetElementsByTagName("text");
            textElemets[0].AppendChild(toastXml.CreateTextNode(notification.Content));
            var imageElement = toastXml.GetElementsByTagName("image");
            imageElement[0].Attributes[1].NodeValue = "ms-appx:///Assets/50.png";
            ToastNotificationManager.CreateToastNotifier().Show(new ToastNotification(toastXml));
        }

    }
}

次に、以下のコードを使用して、任意のページ (ホームページに追加したもの) にバックグラウンド タスクを登録します。

private async void RegisterBackgroundTask()
    {

        await BackgroundExecutionManager.RequestAccessAsync();

        try
        {

            foreach (var task in BackgroundTaskRegistration.AllTasks)
            {
                try
                {
                    task.Value.Unregister(false);
                }
                catch
                {
                    //
                }
            }
            BackgroundTaskBuilder builder = new BackgroundTaskBuilder();
            builder.Name = "Push Notifcation Task";
            builder.TaskEntryPoint = typeof(PushNotification).FullName;
            builder.SetTrigger(new PushNotificationTrigger());
            builder.Register();
        }
        catch(Exception e)
        {
            if(e != null)
            {
                System.Diagnostics.Debug.WriteLine(e.HResult);
                System.Diagnostics.Debug.WriteLine(e.InnerException);
            }
        }
    }

Package.appmanifestファイルの Declarations セクションにこのバックグラウンド タスクを追加することを忘れないでください。名前はEntry Point一致するbuilder.TaskEntryPoint = typeof(PushNotification).FullName;必要があります。そうしないと、例外が発生します。

それが誰かを助けることを願っています。

于 2015-07-09T09:02:21.460 に答える