iPhone iOS notifications push apns en producción que no envía

He estado trabajando en esto por un time ahora. Sé que hay un montón de artículos por ahí, y he aprendido mucho sobre todo esto.

He creado mi desarrollo y producción SSL de la misma manera. El desarrollo se conecta a ssl: //gateway.sandbox.push.apple.com: 2195 La producción se conecta a ssl: //gateway.push.apple.com: 2195 Las conexiones parecen funcionar bien.

En cuanto a la aplicación. Desarrollo: cuando lo ejecuto directamente en mi dispositivo desde xCode, ejecuta la versión de desarrollo. La aplicación registra con éxito el token de desarrollo en la database. Luego ejecuto un service para enviar una notificación push, y se entrega correctamente. El msg se entrega con éxito.

Ad-hoc: cuando compilo un file y lo exporto para la distribución Ad-hoc, codesign -dvvvv --entitlements - Elepago.app contenido del package codesign -dvvvv --entitlements - Elepago.app y veo que aps-environment está configurado correctamente en producción. Lo empaco y lo carga en mi dispositivo a través de iTunes. Cuando se inicia la aplicación, veo el nuevo token de producción grabado en la database. Entonces el entorno debe estar configurado correctamente. Cuando envío la notificación push a la key de producción (idénticamente igual que el desarrollo, simplemente cambiando la key .pem SSL y el server), dice que se entregó correctamente. ¡Sin embargo, en realidad nunca llega al dispositivo!

Este problema me está volviendo loco. Acabo de pasar y limpié mi certificate de distribución y lo reconstruí usando un CSR completamente nuevo. También actualicé todos los perfiles de aprovisionamiento para usar ese nuevo certificate. [Alguna idea de cómo estos certificates se vinculan con la aplicación, aparte de la cosa del entorno aps que ya verifico.]

Cualquier idea sería muy apreciada.

Así que después de horas y horas de dolores de cabeza, terminé de rebuild el file SSL .pem y funcionó.

Esto es lo que hice:

  • limpié mi certificate de distribución y creé uno nuevo
  • asoció todos los perfiles de aprovisionamiento al nuevo certificate
  • cargó nuevos perfiles de aprovisionamiento en xCode
  • reconstruí mi file de protocolo de enlace SSL .pem siguiendo las instrucciones de los asombrosos tutoriales de Raywenderlich

Estas son las mismas instrucciones que originalmente seguí para el desarrollo y la producción, pero tal vez / aparentemente arruinó algo. ¡Luego probé en mi versión ad-hoc y funcionó!

Además, vale la pena señalar que al usar la key .pem incorrecta, no recibía ningún comentario de error de APNS. Utilizo el file simplepush.php que se encuentra en el enlace de arriba como base para enviar la PN.

El token de dispositivo para Desarrollo y Producción no es el mismo.

Cuando esté probando para Producción, utilice UIAlertView para ver su token para Producción. Haz algo como lo siguiente:

 - (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken { [[UIApplication shanetworkingApplication] setApplicationIconBadgeNumber:0]; NSString *deviceID = [[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; deviceID = [deviceID stringByReplacingOccurrencesOfString:@" " withString:@""]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Device Token", nil) message:deviceID delegate:nil cancelButtonTitle:NSLocalizedString(@"OK", nil) otherButtonTitles:nil]; [alert show]; } 

Utilice este token para enviar la notificación para la producción.

  • Cualquier perfil de distribución interno proporciona un mismo tokenID, sin embargo, este tokenID varía en diferentes dispositivos.
  • Otro único problema podría ser solo con ProductionURL.
  • También me doy count de que la recepción de notifications automáticas se retrasa a veces, sobre todo cuando se usa con URL de producción.

Espero que esto ayude.

Mi problema es el mismo cuando desarrollé en Java, pero lo solucioné debido a que production = true es para producción y producción = falso para desarrollo.

carga útil (carga útil, almacén de keys, contraseña, producción, dispositivos)

Espero que esto ayude.