Не удается отправить уведомление о WP8 из мобильных служб Azure.

У меня возникла проблема с отображением уведомления Toast, следуя руководству.

Вот сценарий сервера мобильной службы 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: 

person ken lee    schedule 02.08.2013    source источник


Ответы (1)


Если приложение работает на переднем плане, когда получено всплывающее уведомление, оно не будет отображать всплывающее уведомление в пользовательском интерфейсе; вместо этого вы можете получить его, подписавшись на событие ShellToastNotificationReceived. Если вы это сделаете, вы получите уведомление об обработчике событий.

Изменить после обновления в вопросе: чтобы предотвратить появление InvalidOperationException при вызове 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();
    }
}
person carlosfigueira    schedule 02.08.2013
comment
ТекущийКанал.Открыть(); Исключение типа «System.InvalidOperationException» произошло в неизвестном модуле. но не было обработано в пользовательском коде, что это за ошибка, вчера этого не было - person ken lee; 03.08.2013
comment
Есть ли еще информация об исключении? Сообщение, трассировка стека и т. д.? - person carlosfigueira; 03.08.2013