2012-01-17 14 views
8

Ho provato l'esempio trovato nel collegamento http://www.raywenderlich.com/3443/apple-push-notification-services-tutorial-part-12, per il messaggio di notifica push del mio iPhone. Potrei eseguire correttamente tutti i passaggi tranne i passaggi per la registrazione dell'app per la notifica push per la prima volta.Registrazione dell'applicazione iPhone per notifica push non funzionante

Ho seguito diverse varianti del codice:

[[UIApplication sharedApplication] registerForRemoteNotificationTypes: 
(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; 

Ma nessuno ha funzionato per me. Lo sto testando nel mio iPhone 4 e la mia versione di Xode è 4.2, OS è Lion. Si prega di consulenza.

+0

Quale problema si sta affrontando? sei andato attraverso questo link: http://mobiforge.com/developing/story/programming-apple-push-notification-services anche http://stackoverflow.com/questions/8075255/push-notification-for-development-certificate/8075436 # 8075436 – Sarah

risposta

31

Si può provare la seguente:

  • assicurarsi che il progetto Xcode è configurato per utilizzare l'ID pacco esplicita dal portale di provisioning
  • assicurarsi che non sta costruendo il bersaglio con carattere jolly o squadra profilo di provisioning, controllare questo sul progetto E impostazioni di destinazione
  • Se hai creato il tuo profilo di fornitura prima di configurare l'ID app per spingere, rigenerare il profilo di provisioning

anche guardare l'oggetto errore nel metodo di UIApplicationDelegate

application:didFailToRegisterForRemoteNotificationsWithError: 

EDIT 1

Aprire il profilo di provisioning in un editor di testo e cercare la stringa

<key>aps-environment</key> 

Se il profilo non contiene questo, non è impostato correttamente per il push.

+0

1) Sì, ho l'ID bundle esplicito 2) Non utilizzo i caratteri jolly, 3) Ho un profilo di provisioning rigenerato e ho provato a eseguire nuovamente l'app. – Vinod

+0

Quale errore si sta ottenendo nel metodo delegato di cui sopra? – nduplessis

+0

Vedere la modifica sopra riguardante l'errore di registrazione push – nduplessis

0

Hai mai visto la finestra di dialogo di notifica push nella tua app? Se si chiude la finestra di dialogo ci vogliono 24 ore per reshow. Controlla questo impostando l'ora sul tuo iPhone in anticipo di 2 giorni e vedere se mostra.

hanno anche implementato i metodi delegato:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { 

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error { 

- (void) application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo { 

Prova a mettere un NSLog (@ "") nella didRegisterForRemoteNotificationsWithDeviceToken e didFailToRegisterForRemoteNotificationsWithError e vedere si sta ottenendo in là?

Inoltre si richiedono un ID applicazione che è configurato per la notifica push e avete bisogno di avere generato i certificati di notifica push per inviare i messaggi.

+0

sì, ho questi metodi. Inoltre, ho l'ID app con i servizi di notifica push attivati. – Vinod

+0

Ricevo l'output NSlog per il metodo "didFinishLaunchingWithOptions" non per gli altri. Ora sto ottenendo l'errore Impossibile ottenere token di errore: Errore di dominio = Codice NSCocoaErrorDomain = 3000 "non valida 'aps-ambiente' stringa di diritto trovato per l'applicazione" UserInfo = 0x1657c0 {NSLocalizedDescription = no 'aps-ambiente' stringa di diritto valido trovato per l'applicazione} – Vinod

+0

Verificare che si stia procedendo contro il file di provisioning corretto. Sembra il problema per me. Avresti dovuto creare un file di provisioning sull'ID app con notifiche push. – jodm

3

Ecco il mio codice workin di esempio da delegato applicazione (AppDelegate.m)

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    [application registerForRemoteNotificationTypes:UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeSound]; 
} 

Per verificare se la registrazione è andato bene, implementare questi tre metodi

– application:didReceiveRemoteNotification: 
– application:didRegisterForRemoteNotificationsWithDeviceToken: 
– application:didFailToRegisterForRemoteNotificationsWithError: 

http://developer.apple.com/library/ios/#documentation/uikit/reference/UIApplicationDelegate_Protocol/Reference/Reference.html

o si può andare a Impostazioni per verificare se sono disponibili le impostazioni di autorizzazione

come questo:

iPad Notification Settings

+0

Ho aggiunto sopra 3 metodi, quindi sto ricevendo l'errore nella console "Impossibile ottenere il token, errore: errore Dominio = NSCocoaErrorDomain Code = 3000" nessuna valida stringa di autorizzazione "aps-environment" trovata per l'applicazione "UserInfo = 0x143bc0 { NSLocalizedDescription = nessuna stringa di entitlement 'aps-environment' valida trovata per l'applicazione} "Ma l'app è in esecuzione su iPhone con uno schermo bianco vuoto. Inoltre, non ho avviato la parte del codice payload/php. – Vinod

+0

Ho aggiunto la stampa NSlog per ciascun metodo, potrei ottenere l'output solo dal metodo "didFinishLaunchingWithOptions" e quindi l'errore sopra riportato. – Vinod

+0

@Vinod great, ora che hai una risposta all'errore, puoi trovare dove si trova il problema. Leggi questo: http://stackoverflow.com/questions/5681172/bundle-identifier-and-push-certificate-aps-environment-entitlement-error –

1

Se il problema appare in produzione (con l'applicazione su AppStore), è molto probabile, perché si è creato/abilitato la modalità di produzione APNS dell'applicazione DOPO avere creato il profilo di distribuzione.

In questo caso, nessun altra scelta che presentare di nuovo con un certificato corretto ...

Regola generale: SEMPRE abilitare/creare certificato di produzione per la vostra applicazione PRIMA la creazione del profilo di distribuzione.

È possibile utilizzare il metodo descritto da 'nduplessis' (vedi sotto) per verificare manualmente se si applicazione verrà eseguita la notifica una volta approvato.

0

Vai a Capacità ->Notifiche push. Se ci sono errori quindi provare questa soluzione!

Se la versione Xcode è stata cambiata da 7 a 8, quindi provare questa soluzione!

Xcode 7 copie l'aps-ambiente titolarità dal tuo profilo di provisioning. L'attivazione delle notifiche push su Xcode 8 aggiunge l'autorizzazione sia al profilo di provisioning che al file delle autorizzazioni.

Prova ad aggiungere il diritto aps-ambiente nel file diritti della tua app, o passare la capacità di notifica e riaccenderlo.