2011-05-04 13 views
7

C'è un modo per determinare se un token del dispositivo è sandbox o distribuzione? Stiamo testando e l'applicazione a volte è firmata con un certificato di sviluppo e altri sono firmati con un certificato ad hoc (certificato di distribuzione). Questo perché passiamo l'applicazione ad alcuni dei 100 dispositivi di test ad hoc forniti e stiamo anche costruendo app firmate per lo sviluppo sui nostri dispositivi. Poiché l'invio di una notifica push richiede che selezioniamo il server push e il file pem appropriati, sarebbe bello essere in grado di determinare se il token è sandbox o distribuzione per inviare le notifiche nel modo appropriato in modo che la notifica push abbia esito positivo. A volte dobbiamo usare il profilo di distribuzione per firmare le nostre applicazioni, quindi testare il sistema di notifica push ci impone di fornire queste notifiche correttamente.Determina se il token del dispositivo è sandbox o distribuzione

risposta

8
  1. Aprire progetto impostazione
  2. Vai a impostazioni di pre-elaborazione
  3. Sotto "Le macro del preprocessore non utilizzati in intestazioni precompilate" build (supponendo che non sono ramificazione codice in un file PCH), aggiungere TOKEN_ENV_SANDBOX = 0 in uscita e TOKEN_ENV_SANDBOX = 1 in Debug e Ad Hoc.
  4. Nel codice ovunque basta usare la direttiva del compilatore

#if TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == PRODUZIONE!");
#endif

#if TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == sandbox");
#endif

EDIT: Corretto un problema di cui sopra.

+1

Come aggiungere Adhoc alle "macro di preprocessore non utilizzate nelle intestazioni precompilate" – siva

+0

Posso sapere se questo è ancora valido? Ho notato che alcuni utenti sono identificati come token sandbox, con la stessa versione da App Store. – neobie

+1

Perché per Ad Hoc, il TOKEN_ENV_SANDBOX è 0? E per Debug, TOKEN_ENV_SANDBOX = 1? C'è un errore? – neobie

1

Ecco quello che Apple ha da dire

È possibile determinare in Xcode quale ambiente ci si trova dalla selezione di un'identità di firma del codice. Se vedi una coppia di certificati/provisioning "iPhone Developer: Firstname Lastname", sei nell'ambiente sandbox. Se vedi una coppia di certificati/profili di distribuzione "Distribuzione di iPhone: nome azienda", sei nell'ambiente di produzione.

0

Aggiungere una macro di preprocessore alle impostazioni di generazione del target in Apple LLVM 7.0 - Preelaborazione. Poi sotto Debug aggiungere qualcosa come:

isRunningInDevModeWithDevProfile=1

Poi, nel tuo PCH, si può fare qualcosa di simile:

// AZ - 01282016 - Determine which environment we are running in for APNS 
# ifdef isRunningInDevModeWithDevProfile 
#  define isAPNSSandbox YES 
#else 
# define isAPNSSandbox NO 
#endif 

E poi dove è necessario verificare nel vostro codice, è possibile fare questo:

NSString *ifAppIsRunningFromXcodeUsingNonReleaseProfile; 

if (isAPNSSandbox) { 
    ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"dev"; 
} else { 
    ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"prod"; 
} 

passiamo questo valore di nuovo al nostro server APNS in modo che sappia quale strada prendere quando si chiama APNS di Apple.

La ragione per cui suggerisco questo è che in questo caso, se si lascia la macro del preprocessore indefinita negli obiettivi non di debug, ciò non causerà un errore quando si tenta di crearlo.

Certo, ci sono soluzioni con una forma migliore, ma questo è un modo abbastanza sicuro e veloce per ottenere questa funzionalità attiva e funzionante.

0

Ho letto tutte le risposte sopra e sono tutte corrette ma non rispondere alla domanda di base: "È una sandbox o distribuzione di token dispositivo?".

È perché rileva la configurazione di build, non di qualità token.

Dopo aver trascorso diversi giorni a risolvere questo problema, ho avuto modo di soluzione straigt-forward:

test gettone che hai con il Real Apple Push Notification Server. È possibile utilizzare una semplice app che parlerà con il server e sarà sufficiente configurarla.

Ho usato questa semplice app "Easy APNs Provider" per macOS o altro.

https://itunes.apple.com/us/app/easy-apns-provider-push-notification/id989622350?mt=12

mio problema centrale in MacOS app è che continuo a ricevere token di produzione sia in Debug e Release configurazioni.

Quando si rileva un problema, è possibile che i certificati invochino i certificati per essere sicuri al 100% che non saranno compromessi.

Problemi correlati