2013-06-13 5 views
12

Ho lavorato su questo per un po 'di tempo. So che ci sono un sacco di articoli là fuori e ho imparato molto su tutto.App di notifica push per iPhone iOS su produzione non inviata

Ho creato i miei SSL di sviluppo e produzione allo stesso modo. Lo sviluppo si connette a ssl: //gateway.sandbox.push.apple.com: 2195 La produzione si connette a ssl: //gateway.push.apple.com: 2195 Le connessioni sembrano funzionare correttamente.

Come per l'app. Sviluppo: Quando lo eseguo direttamente sul mio dispositivo da xCode, esegue la versione di sviluppo. L'app registra con successo il token di sviluppo nel database. Quindi eseguo un servizio per inviare una notifica push e viene consegnato correttamente. Il messaggio è stato consegnato correttamente.

Ad-hoc: Quando costruisco un archivio ed esportarlo per la distribuzione Ad-hoc, faccio doppio controlla il contenuto della confezione codesign -dvvvv --entitlements - Elepago.app e vedo che l'aps-ambiente sia correttamente impostato la produzione. Lo impacchetta e lo carico sul mio dispositivo tramite iTunes. All'avvio dell'app, vedo il nuovo token di produzione registrato nel database. Quindi l'ambiente deve essere impostato correttamente. Quando invio la notifica push alla chiave di produzione (identico allo stesso modo dello sviluppo, semplicemente cambiando la chiave .pem SSL e il server), dice che è stata consegnata correttamente. Tuttavia non raggiunge mai il dispositivo !!!

Questo problema mi sta facendo impazzire. Ho appena esaminato e cancellato il mio certificato di distribuzione e l'ho ricostruito utilizzando un CSR completamente nuovo. Ho anche aggiornato tutti i profili di provisioning per utilizzare quel nuovo certificato. [Qualche idea su come questi certificati si colleghino all'app, tranne per la cosa aps-environment che controllo già.]

Qualsiasi intuizione sarebbe molto apprezzata.

+0

sono le notifiche abilitate per la tua app in Impostazioni -> Notifica? – feco

+0

grazie per l'aiuto. sono (le notifiche push funzionano sullo sviluppo). E anche nella versione di produzione, ottengo il tasto push ogni volta, quindi quelle autorizzazioni sembrano essere tutte in ordine ... – Federico

+0

@Federico Sei sicuro di voler inviare la notifica al token del dispositivo di produzione? – Eran

risposta

8

Quindi dopo ore e ore di mal di testa, ho finito per ricostruire il file .pem SSL e ha funzionato !!

Ecco quello che ho fatto:

  • ripulito il mio certificato di distribuzione e ha creato uno nuovo
  • associati tutti i profili di provisioning di nuovo certificato
  • caricati nuovi profili di provisioning in Xcode
  • ricostruito la mia File .pem handshake SSL seguendo le istruzioni su Raywenderlich's awesome tutorials

Queste sono le stesse istruzioni che avevo originariamente seguito per lo sviluppo e la produzione, ma forse/apparentemente incasinato qualcosa. Poi ho provato la mia versione ad-hoc e ha funzionato !!!

Inoltre, vale la pena notare che quando si utilizza il tasto .pem sbagliato, non ricevevo alcun feedback di errore da APNS. Io uso il file simplepush.php trovato nel link sopra come base per inviare la PN.

1
  • Qualsiasi profilo di distribuzione interno fornisce lo stesso tokenID, tuttavia questo tokenID varia tra diversi dispositivi.
  • Altro unico problema potrebbe riguardare solo ProductionURL.
  • Ho anche notato che la ricezione delle notifiche push viene talvolta ritardata, soprattutto se utilizzata con l'URL di produzione.

Spero che questo aiuti.

0

Il mio problema è lo stesso quando ho sviluppato su Java Ma l'ho risolto a causa della produzione = true è per produzione e produzione = falso per lo sviluppo.

carico utile (payload, chiavi, la password, di produzione, dispositivi)

Spero che questo aiuto.

4

I token dispositivo per lo sviluppo e la produzione non sono uguali.

Quando si esegue il test per la produzione, utilizzare UIAlertView per visualizzare il token per la produzione. Fai qualcosa di simile al seguente:

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken 
{ 
    [[UIApplication sharedApplication] 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]; 
} 

Utilizzare questo token per inviare notifiche per la produzione.