1

按照教程显示 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: 
4

1 回答 1

2

如果收到 toast 通知时应用程序正在前台运行,则不会在 UI 中显示 toast;相反,您可以通过订阅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();
    }
}
于 2013-08-02T18:17:13.407 回答