1

チュートリアルに従ってトースト通知を表示する際に問題が発生しました

Azure モバイル サービス サーバー スクリプトは次のとおりです。

function insert(item, user, request) {
request.execute({
    success: function () {
        // Write to the response and then send the notification in the background
        request.respond();
        push.mpns.sendToast(item.channel, {
           text1:"Sent from cloud!"
       }, {
            success: function (pushResponse) {
                console.log("Sent push:", pushResponse);
            }
        });
    }
});

そして、これは私がApp.xaml.csに入れたコーディングです:

//push notification
    public static HttpNotificationChannel CurrentChannel { get; private set; }


    private void AcquirePushChannel()
    {
        CurrentChannel = HttpNotificationChannel.Find("MyPushChannel");


        if (CurrentChannel == null)
        {
            CurrentChannel = new HttpNotificationChannel("MyPushChannel");
            CurrentChannel.Open();
            //CurrentChannel.BindToShellTile();
            CurrentChannel.BindToShellToast();
        }
    }

private void Application_Launching(object sender, LaunchingEventArgs e)
    {
        AcquirePushChannel();
    }

しかし、トーストはまだ出ていません(フリップタイルはうまく機能しています)。

トーストを機能させるために必要な変更はありますか?

編集: チャネルを開くときのエラー:

System.InvalidOperationException was unhandled by user code
  HResult=-2146233079
  Message=Open failed because the channel was already open.  You can find an open channel by calling the Find method.
  Source=Microsoft.Phone
  StackTrace:
       at Microsoft.Phone.Notification.SafeNativeMethods.ThrowExceptionFromHResult(Int32 hr, Exception defaultException, NotificationType type)
       at Microsoft.Phone.Notification.HttpNotificationChannel.Open()
       at UtemFtmkDB.App.AcquirePushChannel()
       at UtemFtmkDB.App.Application_Launching(Object sender, LaunchingEventArgs e)
       at Microsoft.Phone.Shell.PhoneApplicationService.FireLaunching()
       at Microsoft.Phone.TaskModel.Interop.ITask.Launching.Invoke()
       at Microsoft.Phone.TaskModel.Interop.Task.FireOnLaunching()
  InnerException: 
4

1 に答える 1

2

トースト通知を受信したときにアプリケーションがフォアグラウンドで実行されている場合、UI にトーストは表示されません。代わりに、 ShellToastNotificationReceived イベントをサブスクライブすることで受け取ることができます。これを行うと、イベント ハンドラーで通知を受け取ります。

質問の更新後に編集InvalidOperationException: while callingを防ぐにはOpen、以下のコードを使用できます。

private void AcquirePushChannel()
{
    CurrentChannel = HttpNotificationChannel.Find("MyPushChannel");

    if (CurrentChannel == null)
    {
        CurrentChannel = new HttpNotificationChannel("MyPushChannel");
    }

    if (CurrentChannel.ConnectionStatus == ChannelConnectionStatus.Disconnected)
    {
        CurrentChannel.Open();
    }

    if (!CurrentChannel.IsShellToastBound)
    {
        CurrentChannel.BindToShellToast();
    }
}
于 2013-08-02T18:17:13.407 に答える