2012-01-05 7 views
11

Ho un'app che doveva avere le notifiche push abilitate, ma per qualche motivo non le ha. Ho visto altre persone scaricare e installare l'app e non richiede nemmeno l'autorizzazione per l'invio di notifiche push. Come previsto, questa app non appare nelle loro Impostazioni> Notifiche.Come si verifica se un profilo di provisioning di distribuzione iOS ha abilitato le notifiche push?

Tuttavia, sul mio iPad, sono in grado di ricevere notifiche push da questa app, e viene visualizzato su Impostazioni> Notifiche. Ho eliminato e reinstallato l'app per assicurarmi che avessi la stessa cosa che hanno tutti gli altri (e non una versione di sviluppo) e sono ancora in grado di ricevere le notifiche.

Ora, questa app è stata scritta per un cliente che mi ha inviato tutti i profili di provisioning (dev, adhoc, distribution) così come i file necessari per poter inviare notifiche push, quindi non posso sapere con certezza che tutto è stato creato correttamente.

La mia teoria in questo momento è che:

  • il profilo ad hoc che ho ricevuto è stato "creato correttamente" (cioè generato dopo aver impostato APN sul dell'applicazione App ID nel portale Provisioning)
  • la Il profilo di distribuzione che ho ricevuto è stato generato prima di configurare gli APN per questa app (e quindi non è "abilitato per il push")
  • il motivo per cui sono in grado di ricevere notifiche push sul mio dispositivo è dovuto al fatto che durante sviluppo Ho installato una versione ad hoc, che mi ha richiesto le autorizzazioni per ricevere le notifiche push, e anche se ho cancellato questa versione ad hoc e scaricato la versione dal negozio, il dispositivo ha "memorizzato" il fatto che sono disposto per ricevere notifiche e non mi viene più richiesto per questo. Ho controllato con altre app e in effetti, dopo averle eliminate e reinstallate, non mi richiedono di nuovo le autorizzazioni per ricevere le notifiche push.

Quindi le mie domande sono:

  • Vuol questa teoria ha senso?
  • In tal caso, ciò significa che dovrò chiedere al client di generare un nuovo profilo di provisioning di distribuzione. Come posso verificare che questo profilo sia "abilitato al push"? (vale a dire che non posso semplicemente installare un'app compilata)

risposta

22

Ok, potrei aver trovato un modo per verificare se i profili hanno attivato o meno il push.

Se apro il file .mobileprovision come file di testo, c'è un po 'di XML lì (un plist a quanto pare), che sto cercando di indovinare per un profilo di distribuzione dovrebbe avere questo:

<key>aps-environment</key> 
<string>production</string> 

E in effetti , il profilo adhoc aveva questo e il profilo di distribuzione no, quindi ... immagino che questo fosse il problema.

Eppure, tutte le risposte sarebbe utile :)

+2

E il modo semplice per visualizzare la parte XML nel profilo di provisioning è eseguire il seguente comando in Terminal.app 'security cms -D -i/path/to/AppStoreProfile.mobileprovision' Quindi cerca lo stesso ambiente aps chiave. – Tal

7

leggermente diverso, ma ancora utile: quando si carica un app per iTunes Connect, è possibile verificare se ha le notifiche push (o qualsiasi altro diritto) abilitato.

Per fare ciò, passare a Gestisci applicazioni, selezionare l'applicazione, quindi passare a "Visualizza dettagli" per la versione che si desidera controllare.

Da lì, andare alla pagina "Dettagli binari" - c'è un campo Diritti che mostra quali sono le autorizzazioni del binario. Se le notifiche push sono abilitate, vedrai una riga "aps-environment: production".

0

Assicurarsi che il profilo di provisioning di distribuzione sia generato dopo aver creato aps_certificate. Alte variazioni del profilo possono perdere aps-ambiente

0

ho aggiunto quanto segue per AppDelegate.m così ho potuto vedere esattamente ciò che le impostazioni sono state attivate in di debug

- (void)application:(UIApplication*)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken 
{ 
    UIRemoteNotificationType enabledTypes = [[UIApplication sharedApplication] enabledRemoteNotificationTypes]; 
NSLog(@"Receiving Notification Types: %lu", (long)enabledTypes); //0=none 1=badge 2=sound 4=alert 8=NewsStandContantAvailability 

ho ricevuto questo da un molto inclusiva e link utile: Apple Push Notification Service Tutorial - Part 1 è stato estremamente utile per me.