plugin notificaciones example ssl apple-push-notifications production-environment pushsharp

ssl - example - xamarin notificaciones push



Producción PushSharp APNS: las credenciales suministradas al paquete no fueron reconocidas(sin embargo, el desarrollo funciona bien) (6)

"Las credenciales suministradas al paquete no fueron reconocidas" generalmente la excepción indica que el usuario que ejecuta el código no tiene suficientes permisos.

Si está enviando notificaciones push desde la aplicación web de Azure o el trabajo web no cargue el certificado APNS desde un archivo o cadena codificada en base64. Vaya a Azure Portal y agregue el certificado al sitio web. Tenga en cuenta la huella digital.

A continuación, agregue la configuración WEBSITE_LOAD_CERTIFICATES y establézcala en * (asterisco).

Ahora el certificado APNS se puede usar desde el código C #:

string thumbprint = "YOUR THUMBPRINT"; var store = new X509Store(StoreName.My, StoreLocation.CurrentUser); store.Open(OpenFlags.ReadOnly); var certificate = store.Certificates.Find( X509FindType.FindByThumbprint, thumbprint, validOnly: false) .Cast<X509Certificate2>().SingleOrDefault(); var apnsConfig = new ApnsConfiguration( ApnsConfiguration.ApnsServerEnvironment.Production, certificate);

Referencias

Mi aplicación acaba de estar lista para su venta en App Store, pero ninguno de mis dispositivos de producción (dispositivos que han instalado la aplicación en App Store) recibe notificaciones push. Cuando trato de enviar una notificación de inserción a un dispositivo de producción, recibo este error:

"The credentials supplied to the package were not recognized" (System.ComponentModel.Win32Exception)

Esta excepción se lanza internamente y atrapada en un ciclo infinito:

Se lanza a la línea 539 del archivo ApplePushChannel.cs :

try { stream.AuthenticateAsClient(this.appleSettings.Host, this.certificates, System.Security.Authentication.SslProtocols.Ssl3, false); //stream.AuthenticateAsClient(this.appleSettings.Host); } catch (System.Security.Authentication.AuthenticationException ex) { throw new ConnectionFailureException("SSL Stream Failed to Authenticate as Client", ex); }

Este es el resultado de la aplicación en Visual Studio Output:

... A first chance exception of type ''System.ComponentModel.Win32Exception'' occurred in System.dll A first chance exception of type ''System.ObjectDisposedException'' occurred in System.dll A first chance exception of type ''System.ComponentModel.Win32Exception'' occurred in System.dll A first chance exception of type ''System.ObjectDisposedException'' occurred in System.dll A first chance exception of type ''System.ComponentModel.Win32Exception'' occurred in System.dll A first chance exception of type ''System.ObjectDisposedException'' occurred in System.dll A first chance exception of type ''System.ComponentModel.Win32Exception'' occurred in System.dll A first chance exception of type ''System.ObjectDisposedException'' occurred in System.dll A first chance exception of type ''System.ComponentModel.Win32Exception'' occurred in System.dll ...(it keeps getting thrown until I stop it manually)

Estas son las cosas que he intentado:

  • Comprobé dos veces que la identificación del dispositivo que estoy intentando está registrada con un token de dispositivo de producción.
  • Revocó y regeneró el certificado APNS Production, lo exportó con la clave privada a un nuevo archivo .p12 y lo intentó nuevamente con el nuevo certificado. (Tuve el mismo problema con las notificaciones push de desarrollo, y esto resolvió mi problema)
  • Cambió el protocolo SSL de Ssl3 a Tls . (Hace unos días hubo un problema con la versión de protocolo, y solucionó un problema de forma temporal. No debería ser necesario, pero el error que obtengo es el mismo que estaba obteniendo antes de que esto se solucionara)
  • Comprobé que en realidad estoy tratando de conectarme al servidor de producción con el certificado de producción en lugar del servidor / certificado de desarrollo.
  • Comprueba que puedo acceder al servidor APNS directamente (mi aplicación ASP.NET vive dentro de Parallels VM Windows 8.1 en mi Mac, aquí está el resultado de mi Mac, solo para evitar confusiones:

(Salida de la terminal) Editar: estaba haciendo ping al servidor de la caja de arena, he buscado el servidor de producción, verifico que también puedo conectarme a él, así que no es el problema.

can$ sudo nmap -p 2195 gateway.sandbox.push.apple.com Starting Nmap 6.40-2 ( http://nmap.org ) at 2014-04-28 00:06 EEST Nmap scan report for gateway.sandbox.push.apple.com (17.149.34.189) Host is up (0.49s latency). Other addresses for gateway.sandbox.push.apple.com (not scanned): 17.149.34.187 17.149.34.188 PORT STATE SERVICE 2195/tcp open unknown

¿Por qué PushSharp no negociaría con servidores APNS?


Al usar el almacén de certificados de Windows, (la forma más sencilla de administrar certificados en un servidor de producción), asegúrese de establecer los permisos correctos en la clave privada.


Fui probado una y otra vez.

Convierta el archivo p12 a formato de pem , y funcionará con usuarios limitados de IIS y tal vez con Azure ....


Ninguna de las respuestas funcionó para mí. Al final, lo que terminé haciendo es importar el Certificado y la Clave Privada en el almacén de certificados de Windows, y luego exportarlo como .pfx .


Recibí la misma excepción y, en mi caso, tuve que agregar el permiso para mi certificado de IOS Push Services.

Haga clic derecho en el certificado en mmc -> Todas las tareas -> Administrar claves privadas ... Agregué el SERVICIO DE RED porque el grupo de aplicaciones iis de mi aplicación web usaba esa cuenta.

Vea para más detalles: http://blog.falafel.com/apple-push-notifications-certificates-and-iis/


Resolví el problema. Revoqué y volví a generar el certificado, y esta vez solo exporté la clave privada (sin el certificado). En el acceso a Llaveros, .p12 como .p12 y usé el nuevo archivo y funcionó. Por alguna razón, PushSharp no funcionó bien con .p12 cuando tanto el certificado como la clave privada están presentes en el archivo.