2013-08-25 58 views
0

我试图让一个原始推送通知,从Azure的移动服务工作,到Windows Phone 8。的Windows Phone 8原始通知使用Windows Azure移动服务

我只使用Windows Azure签署了自由移动服务随附20mb免费数据库和免费移动服务。

管理Windows Azure服务的站点有一个链接,指向如何向应用程序发送推送通知以更新翻转块的示例here

在插入到表中时,发送通知的脚本运行。

MSDN上还有另外一个例子,它提供了一个如何创建一个向WP8应用程序发送原始通知的ASP页面的例子。那个例子是here

我已经得到了两个例子的工作,但我需要第一个例子发送原始通知,所以第二个例子中的代码工作。

这是我的代码:

在我的Windows Phone 8的应用程序我有这个接收通知,在App.xaml.cs:

private void AcquirePushChannel() 
    { 

     /// Holds the push channel that is created or found. 
     HttpNotificationChannel pushChannel; 

     // The name of our push channel. 
     string channelName = "RawSampleChannel"; 

     // Try to find the push channel. 
     pushChannel = HttpNotificationChannel.Find(channelName); 

     if (pushChannel == null) 
     { 
      pushChannel = new HttpNotificationChannel(channelName); 

      // Register for all the events before attempting to open the channel. 
      pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated); 
      pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred); 
      pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived); 

      pushChannel.Open(); 

     } 
     else 
     { 
      // The channel was already open, so just register for all the events. 
      pushChannel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(PushChannel_ChannelUriUpdated); 
      pushChannel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(PushChannel_ErrorOccurred); 
      pushChannel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(PushChannel_HttpNotificationReceived); 

      // Display the URI for testing purposes. Normally, the URI would be passed back to your web service at this point. 
      System.Diagnostics.Debug.WriteLine(pushChannel.ChannelUri.ToString()); 
      //MessageBox.Show(String.Format("Channel Uri is {0}", 
      // pushChannel.ChannelUri.ToString())); 

     } 

    } 

    void PushChannel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e) 
    { 

     Deployment.Current.Dispatcher.BeginInvoke(() => 
     { 
      // Display the new URI for testing purposes. Normally, the URI would be passed back to your web service at this point. 
      System.Diagnostics.Debug.WriteLine(e.ChannelUri.ToString()); 
      MessageBox.Show(String.Format("Channel Uri is {0}", 
       e.ChannelUri.ToString())); 

     }); 
    } 

    void PushChannel_ErrorOccurred(object sender, NotificationChannelErrorEventArgs e) 
    { 
     // Error handling logic for your particular application would be here. 
     Deployment.Current.Dispatcher.BeginInvoke(() => 
      MessageBox.Show(String.Format("A push notification {0} error occurred. {1} ({2}) {3}", 
       e.ErrorType, e.Message, e.ErrorCode, e.ErrorAdditionalData)) 
       ); 
    } 

    /// <summary> 
    /// Event handler for when a raw notification arrives. For this sample, the raw 
    /// data is simply displayed in a MessageBox. 
    /// </summary> 
    /// <param name="sender"></param> 
    /// <param name="e"></param> 
    void PushChannel_HttpNotificationReceived(object sender, HttpNotificationEventArgs e) 
    { 
     string message; 

     using (System.IO.StreamReader reader = new System.IO.StreamReader(e.Notification.Body)) 
     { 
      message = reader.ReadToEnd(); 
     } 


     Deployment.Current.Dispatcher.BeginInvoke(() => 
      MessageBox.Show(String.Format("Received Notification {0}:\n{1}", 
       DateTime.Now.ToShortTimeString(), message)) 
       ); 
    } 

在应用程序启动它调用AcquirePushChannel:

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

    } 

我的问题是在我的Windows Azure移动服务数据库,其中我有以下代码插入表发送原始推送通知,这是行不通的:

function insert(item, user, request) { 

request.execute({ 
    success: function() { 
     // Write to the response and then send the notification in the background 
     request.respond(); 
     // for testing I'm manually putting in the channel ID where it says <channelID> below 
     push.mpns.sendRaw(<channelID>, 
      'test', { 
      success: function (pushResponse) { 
       console.log("Sent push:", pushResponse); 
      } 
     }); 
    } 
}); 

} 

有这个here的文档,所以我确定它是正确的,但它不起作用。

还有一个例子here

另一个问题是,如何通过Windows Azure查看console.log?

+0

您可以访问Azure移动服务仪表板的最后一个选项(日志)上的console.log条目 –

+0

感谢您的帮助。我已经能够找出一些事情。 – doktorg

回答

0

我能够从日志中发现我的代码没有发送通知,并发现它是我的测试方法,它导致了它,所以我修复了它。我发现,当我使用的代码插入脚本只触发:

private MobileServiceCollection<TodoItem, TodoItem> items; 

private IMobileServiceTable<TodoItem> todoTable = App.MobileService.GetTable<TodoItem>(); 

private async void InsertTodoItem(TodoItem todoItem) 
    { 
     // This code inserts a new TodoItem into the database. When the operation completes 
     // and Mobile Services has assigned an Id, the item is added to the CollectionView 
     await todoTable.InsertAsync(todoItem); 
     items.Add(todoItem); 
    } 

如果您使用Management Studio和手动插入一行例如插入脚本不运行。