2011-05-04 16 views
7

¿Hay alguna forma de determinar si un token de dispositivo es un entorno limitado o la distribución? Estamos probando y la aplicación a veces se firma con un certificado de desarrollo y otras se firman con un certificado ad hoc (certificado de distribución). Esto se debe a que estamos transfiriendo la aplicación a algunos de los 100 dispositivos de prueba ad hoc proporcionados y también creando aplicaciones de desarrollo firmadas para nuestros dispositivos. Debido a que enviar una notificación de inserción requiere que seleccionemos el servidor push y el archivo pem apropiados, sería genial poder determinar si el token es sandbox o distribución para enviar las notificaciones de manera adecuada para que la notificación push sea exitosa. A veces debemos utilizar el perfil de distribución para firmar nuestras aplicaciones, por lo que probar el sistema de notificación de inserción requiere que entreguemos estas notificaciones correctamente.Determinar si el token del dispositivo es sandbox o distribución

Respuesta

8
  1. establecer
  2. Ir a la configuración de pre-procesamiento
  3. Bajo "macros del preprocesador no utilizados en los encabezados precompilados" Abrir proyecto de construcción (suponiendo que no hay una ramificación de código en un archivo .pch), añadir TOKEN_ENV_SANDBOX = 0 en virtud de lanzamiento y TOKEN_ENV_SANDBOX = 1 en Debug y Ad Hoc.
  4. En su código donde sólo tiene que utilizar la directiva de compilación

#if TOKEN_ENV_SANDBOX
NSLog (@ "TOKEN_ENV == PRODUCCIÓN!");
#endif

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

EDIT: ha corregido un problema anteriormente.

+1

Cómo agregar Adhoc A mis "Macros de preprocesador no utilizados en encabezados precompilados" – siva

+0

¿Sé si esto todavía es válido? Noté que algunos de los usuarios están identificados como tokens de sandbox, con el mismo lanzamiento de App Store. – neobie

+1

¿Por qué para Ad Hoc, TOKEN_ENV_SANDBOX es 0? Y para la depuración, TOKEN_ENV_SANDBOX = 1? ¿Hay algún error? – neobie

1

Esto es lo que Apple tiene que decir

Puede determinar en qué entorno Xcode está en la selección de una identidad de firma de código. Si ve un par de perfil de aprovisionamiento/certificado "iPhone Developer: Firstname Lastname", se encuentra en el entorno de la zona de pruebas. Si ve un par de perfil de aprovisionamiento/certificado de "Distribución de iPhone: nombre de empresa", se encuentra en el entorno de producción.

0

Agregue una macro de preprocesador a la configuración de compilación de su destino en Apple LLVM 7.0 - Preprocesamiento. A continuación, en depuración añadir algo como:

isRunningInDevModeWithDevProfile=1

entonces en su .pch, se puede hacer algo como esto:

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

Y a continuación, en el que la necesidad de comprobarlo en su código, puede hacer esto:

NSString *ifAppIsRunningFromXcodeUsingNonReleaseProfile; 

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

pasamos este valor de nuevo a nuestro servidor APN para que sepa qué camino tomar cuando se llama a APN de Apple.

La razón por la que sugiero esto es que en este caso, si deja la macro del preprocesador indefinida en los destinos que no son de depuración, esto no causará un error cuando intente compilarlo.

Claro, hay soluciones con una mejor forma, pero esta es una forma bastante segura y rápida de poner esta funcionalidad en funcionamiento.

0

He leído todas las respuestas anteriores y todas son correctas pero no responden a la pregunta básica: "¿El dispositivo es sandbox o distribución?".

Es porque detectan la configuración de compilación, no token de calidad.

Después de pasar varios días en la resolución de este problema, llegué a la solución straigt-forward:

token de prueba que recibió con verdadera Apple Push Notification Server. Puede usar una aplicación simple que se comunicará con el servidor y solo necesita configurarlo.

Utilicé esta sencilla aplicación "Easy APNs Provider" para macOS o cualquier otra.

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

Mi tema central en macOS aplicación fue que me siguen dando token de producción, tanto en depuración y Release configuraciones.

Cuando detecta lo que era un problema, puede invalidar certificados para estar 100% seguro de que no se verá comprometido.

Cuestiones relacionadas