Sé que está un poco inundado con los problemas del Servicio de notificación de inserción (APN) de Apple en todo StackOverflow, así que hice muchas investigaciones antes de plantear mi pregunta.Apple Push Notification no se entrega
Básicamente, he seguido el apns-php's CertificateCreation, algunos tutoriales como on mobiforge, y algunos de Matthijs Hollemans. Aún así, no puedo obtener ninguna notificación publicada en mi iPad 2.
Básicamente estos son los pasos que he hecho:
- he seguido el tutorial CertificateCreation, que salió con
server_certificates_bundle_sandbox.pem
,entrust_root_certification_authority.pem
. Seguí el tutorial especificado en mobiforge blog, creé correctamente la ID de la aplicación, el perfil de aprovisionamiento y los vinculé muy bien.
- Descripción: APNTest
- ID de paquete de semillas: uso Nº equipo
- Bundle Identificador: com.learn.APN
Entonces me permiten el SSL impulsar el desarrollo Certificado (solo por ahora) usando la misma solicitud de certificado que he usado ahora para obtener los certificados, y los descargo e instalo en mi llavero .
He descargado mi perfil de aprovisionamiento en el archivo
.mobileprovision
y lo he cargado en el organizador de Xcode en mi dispositivo iPad 2.siguiente que crear una aplicación sencilla con sólo estos códigos:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { [[UIApplication sharedApplication] registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)]; // Override point for customization after application launch. return YES; } - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { NSLog(@"%@", deviceToken); } - (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { NSLog(@"Error: %@", error); }
Entonces configurar los parámetros de construcción:
- Objetivos> Información> Crecimiento Identificador: net.learn.APN
- Objetivos> Configuraciones de compilación> Identidad de firma de código> (Elegí el perfil de aprovisionamiento que he instalado en este momento, y selecciona automáticamente el ide ntical perfiles para mi depuración y liberación)
que generar y ejecutar la aplicación en mi iPad 2. Mi aplicación solicitante para notificaciones push y después de que lo aprobó, con el simbólico ID aparecieron en mi consola:
2012-01-19 12:43:26.345 TestAPN[578:707] <3cb08612 9392996b 5332d2fc 5adce03d 994f8959 d7a2ac38 de7bed52 c8e0778e>
Utilicé apns-php, cambié la identificación del dispositivo (valores hexadecimales crudos 64), luego ejecuté el
sample_push.php
. La secuencia de comandos se ejecutó correctamente, pero mi dispositivo no recibe ninguna notificaciónLuego trato de usar el SimplePush.php.Apareció un mensaje "Mensaje entregado correctamente", pero mi iPad aún no recibe ninguna notificación de APN
La pregunta es, ¿qué pasos he hecho incorrectamente? Soy bastante novato en esta área, y en realidad es un requisito para mi proyecto que el servidor necesite enviar mensajes a nuestras propias aplicaciones. Somos conscientes de los softwares de terceros que envían APN en su nombre, pero quisiéramos implementar uno nosotros mismos.
También encontré el "APN Feedback Service" y escribí esto (base en el SimplePush) pero lamentablemente está vacío. ¿Qué debería hacer ahora?
<?php
// Put your private key's passphrase here:
$passphrase = '';
$ctx = stream_context_create();
stream_context_set_option($ctx, 'ssl', 'local_cert', 'server_certificates_bundle_sandbox.pem');
stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase);
// Open a connection to the APNS server
$fp = stream_socket_client(
'ssl://feedback.sandbox.push.apple.com:2196', $err,
$errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx);
if (!$fp)
exit("Failed to connect: $err $errstr" . PHP_EOL);
echo 'Connected to APNS' . PHP_EOL;
while (!feof($fp)) {
$data = fgets($fp, 1024);
var_dump(unpack("N1timestamp/n1length/H*devtoken", $data));
}
// Close the connection to the server
fclose($fp);
Nota
- Soy consciente de las diferencias entre los CERT desarrollo/producción.
- iPad no está jailbreak, con iOS 5.0.1
- Otras aplicaciones de la App Store recibe notificaciones normalmente
- XCode 4.2.1, Lion 10.7.2
Yo espero no estar duplicados cualquiera de las preguntas aquí ..;)
EDIT
cuando corro php simplepush.php
continuación php feedback.php
, I rec Eived un comentario con mi ID de dispositivo. Mi aplicación todavía está en el iPad, ¿significa que la identificación de mi dispositivo es incorrecta?
[[email protected] SimplePush]# php feedback.php
Connected to APNS
array(3) {
["timestamp"]=>
int(1326962028)
["length"]=>
int(32)
["devtoken"]=>
string(64) "3cb086129392996b5332d2fc5adce03d994f8959d7a2ac38de7bed52c8e0778e"
}
Gracias
EDITAR
Después de mucha lucha y volver a hacer todos los pasos escritos por Matthijs Hollemans, por fin conseguir que funcione. Así que el problema radica en el archivo PEM incorrecto generado ... hmm
Restablezco todo y reinicio todos los pasos @ http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12 y ahora la notificación de inserción funciona ... hmm –
La notificación de inserción el servicio ha estado teniendo problemas en los últimos días. Apple envió un correo electrónico para regenerar sus perfiles de aprovisionamiento. Es posible que haya sido atrapado en eso. –
Gracias.He resuelto mi problema siguiendo de cerca todos los pasos en raywenderlich.com. Creo que esto tiene algo que ver con el problema del certificado. De todos modos, he resuelto mi problema. ¿Debo publicar mi respuesta? (Básicamente es lo mismo que la página) –