5

ACTUALIZACIÓN: La trama se espesa. Cambié el nombre de mi canal y de repente funciona (lo que significa que no fue un problema con mi servicio de inserción, ya que recibo la misma respuesta HTTP del servidor de notificaciones automáticas de Microsoft).Notificaciones de Windows Phone 7 Push que no aparecen en mi teléfono

Para mí, sin embargo, esto no es una solución. ¿Cómo podré probar esto y SABER que mis usuarios reciben sus notificaciones automáticas si obtengo la misma respuesta cuando no funciona como cuando lo hago?

[post original]

que he estado tratando de empujar las notificaciones enviadas al dispositivo Windows Phone 7, pero estoy teniendo problemas muy grandes que no puedo encontrar ninguna respuesta para. Comenzaré con el código C#.

Configuro notificaciones automáticas utilizando el siguiente código C#.

private HttpNotificationChannel channel; 
private static string PUSH_CHANNEL = "MySpecialPushChannel"; 
private Uri PushUri = null; 
private bool IsPushRegistered = false; 

public void StartPushSubscription() 
{ 
    try 
    { 
     channel = HttpNotificationChannel.Find(PUSH_CHANNEL); 
    } 
    catch 
    {} 

    if (channel != null) 
    {    
     PushUri = channel.ChannelUri; 
     if (!channel.IsShellTileBound) 
      channel.BindToShellTile(); 
    } 
    else 
    { 
     channel = new HttpNotificationChannel(PUSH_CHANNEL); 
     channel.ChannelUriUpdated += new EventHandler<NotificationChannelUriEventArgs>(channel_ChannelUriUpdated); 
     channel.HttpNotificationReceived += new EventHandler<HttpNotificationEventArgs>(channel_HttpNotificationReceived); 
     channel.ErrorOccurred += new EventHandler<NotificationChannelErrorEventArgs>(channel_ErrorOccurred); 

     try 
     { 
      channel.Open(); 
      channel.BindToShellTile(); 
     } 
     catch (Exception err) 
     { 
      channel = null; 
      IsPushRegistered = false; 
      // Code to try again 
     } 
    } 
} 

void channel_ChannelUriUpdated(object sender, NotificationChannelUriEventArgs e) 
{ 
    PushUri = e.ChannelUri; 
    IsPushRegistered = true; 
} 

estoy siguiendo la misma estructura de empuje WP7:

  1. Encuentra la HttpNotificationChannel (o iniciar una nueva)
  2. Registro controlador de eventos para obtener la notificación de inserción uri volver
  3. abierto el canal
  4. Unir a la losa
  5. Manejar el canal Uri (que enviamos a nuestro servicio para esperar t él feliz día cuando enviamos la notificación de inserción

OK ... hasta ahora todo bien. Sin errores, obtengo mi Uri y lo envío a mi servicio. Apunto mi aplicación a la pantalla de inicio y mi servicio envía una solicitud de inserción al Uri (enviando solo el conteo para que obtenga un pequeño número de conteo de inserción en la esquina superior derecha). Yo vuelva un estado HTTP 200 con lo siguiente:

DeviceConnectionStatus => Conectado

NotificationStatus => Recibido

SubscriptionStatus => Activo

Y luego ... nada. No se muestra el estado de inserción en mi aplicación. Ahora lo probé en mi dispositivo, en el emulador, en otro dispositivo y con varios servidores, y el resultado siempre es el mismo. Parece que todo funciona, excepto por el hecho de que no funciona.

+0

¿Cómo formatear las notificaciones que se envían? Me gustaría ver el XML que está usando y los encabezados. –

+0

Estoy usando el sistema de notificaciones push de PHP WP7 aquí: http://phpwindowsphonepush.codeplex.com/ ¿Pero no es ese tipo de punto discutible? Quiero decir ... si recibo un mensaje de éxito del Microsoft Push Notification Server, ¿no significa eso que la solicitud de inserción fue exitosa? ¿O hay una versión de "usted hizo algo mal, pero vamos a darle un mensaje de éxito de todos modos" de la respuesta? – MatthiasS

+0

No estoy familiarizado con PHP, pero eche un vistazo a la implementación de C# aquí: http://dotnet.dzone.com/articles/sending-tile-push Al menos cuando traté de pasar una imagen, si no se ajusta a la reglas (80 KB/15 segundos), el estado será Recibido pero la notificación fallará. –

Respuesta

3

Para mí, sin embargo, esto no es una solución. ¿Cómo podré probar esto y SABER que mis usuarios reciben sus notificaciones automáticas si obtengo la misma respuesta cuando no funciona como cuando lo hago?

La respuesta es que no se puede. Es una limitación de cómo WP7 maneja las notificaciones.

Para notificaciones estructuradas como Tile and Toast, si obtiene la respuesta Connected/Active/Received/200, puede saber que MPNS aceptó su solicitud de notificación. Sin embargo, esto no significa que haya enviado una carga XML válida.

El componente que se encarga de analizar XML es el cliente de transmisión automática, el proceso que se ejecuta en el teléfono que acepta notificaciones push y les reparte a las aplicaciones apropiadas, muestra el pan tostado, etc.

Si ha enviado XML no válido, no hay absolutamente ninguna indicación de que lo hayas hecho. Como máximo, si intenta enviar nuevamente la notificación al mismo URI del canal de inserción, obtendrá un 404 en respuesta. Aparentemente, al obtener una carga útil XML no válida para una aplicación específica, se cierra el canal de inserción de esa aplicación, lo que requiere que realices todo el procedimiento otra vez.

Lo he descubierto durante la depuración con nuestro equipo de servidores, y al intentar que el teléfono muestre un mosaico activo en vivo. El único consejo que puedo ofrecerte es cuadruplicar tu XML.

Recibirá errores en su controlador de eventos de error para su canal de notificaciones automáticas para las notificaciones de Toast que tienen XML no válido, ya que puede enviar/recibir notificaciones de notificaciones mientras la aplicación está activa.


Si alguien de Microsoft está leyendo esto, FAVOR proporcionan una documentación más exhaustiva sobre los posibles estados de error en el sistema de notificación de inserción. También necesitamos un controlador de eventos para las notificaciones de Tile, o al menos permitirnos recibir notificaciones en mosaico mientras la aplicación está en primer plano y activar el evento de error del canal de notificación para que podamos tener en cuenta que nuestra carga XML no es válida.

Especialmente si su servicio web no está construido con WCF, .NET, Azure, y lo que sea, trabajar con Push Notifications en WP7 es como deambular ciego.

Documentación para la lectura de un mensaje de excepción "InvalidOperationException(Failed to open channel)" debería no lectura: ". Esta excepción se lanza cuando el canal de notificación no pudo abrir Intente abrir el canal de notificación de nuevo" (reference)

0

¿Recibirá la URL de cada dispositivo? que necesita para obtener una URL desde la sevicio notificación de inserción para cada cada dispositivo se conecta el dispositivo,

cuando lo hace es necesario encontrar una manera de recuperar la URL de cada cliente,

una vez que haces eso y su aún no recibo notificaciones push, entonces escribiría a microsoft para ver si pueden ver algo relacionado con las notificaciones push