android - instalar - Aplicación Cordova que no utiliza notificaciones push: "Falta el derecho de notificación push"
cordova-android version (5)
Tenemos una aplicación para iOS basada en Cordova que no usa notificaciones push. A partir de Cordova 3.5.0, cada presentación que hemos realizado a la tienda de aplicaciones da como resultado un correo electrónico que nos informa que nuestra aplicación incluye API utilizada para registrarse en el Servicio de notificación de inserción de Apple, pero no tiene derecho a notificaciones automáticas.
La aplicación ha sido aceptada cada vez, ya que no usamos notificaciones push para nada. Sin embargo, me gustaría evitar activar esta advertencia en caso de que Apple decida cambiar su política en cuanto a si estas referencias API son aceptables.
No experimentamos el problema con versiones anteriores de Cordova, y no hemos hecho ningún trabajo en Objective-C. ¿Es este un problema conocido con Cordova 3.5? La búsqueda ha producido algunas personas con problemas similares, pero solo he encontrado soluciones para las personas que desean agregar derechos de inserción (en lugar de averiguar dónde se hace referencia a la API de inserción y eliminarla). Eché un vistazo a Cordova emite ML, pero no encontré nada allí. ¡Cualquier otra pista que la gente conozca sería apreciada!
Complementos utilizados:
org.apache.cordova.console
org.apache.cordova.device
org.apache.cordova.file
org.apache.cordova.inappbrowser
org.apache.cordova.media
org.apache.cordova.network-information
org.apache.cordova.splashscreen
Fragmento de correo electrónico relevante, información específica reemplazada por []:
Desde: iTunes Store
Fecha: mié, 17 de septiembre de 2014 a las 3:49 p.m.
Asunto: iTunes Connect: su aplicación "[appName]" (ID de Apple: [id]) tiene uno o más problemas
Para: [desarrollador]Estimado desarrollador,
Hemos descubierto uno o más problemas con su entrega reciente de "[app]". Su entrega fue exitosa, pero es posible que desee corregir los siguientes problemas en su próxima entrega:
Falta el derecho de notificación de inserción: su aplicación parece incluir API utilizada para registrarse con el servicio de notificación de inserción de Apple, pero los derechos de la firma de la aplicación no incluyen el derecho de "aps-environment". Si su aplicación utiliza el servicio de notificación push de Apple, asegúrese de que su ID de aplicación esté habilitada para notificaciones automáticas en el portal de aprovisionamiento y vuelva a enviarla después de firmar su aplicación con un perfil de aprovisionamiento de distribución que incluya el derecho de "aps-environment". Consulte "Aprovisionamiento y desarrollo" en la Guía de programación de notificación local y de envío para obtener más información. Si su aplicación no utiliza el servicio Apple Push Notification, no se requiere ninguna acción. Puede eliminar la API de futuras presentaciones para detener esta advertencia. Si utiliza un marco de terceros, es posible que necesite ponerse en contacto con el desarrollador para obtener información sobre la eliminación de la API.
Una vez que haya corregido los problemas, puede usar Xcode o Application Loader para cargar un nuevo binario en iTunes Connect.
Saludos,
El equipo de App Store
¿Has tenido el complemento Push instalado en algún momento? Parece que tienes el código respectivo en algún lugar de tu paquete de solicitud. Haría una búsqueda de todo el proyecto para las llamadas API específicas, por ejemplo:
- didRegisterForRemoteNotificationsWithDeviceToken
- didFailToRegisterForRemoteNotificationsWithError
El código muerto, los archivos deben ser eliminados.
Aquí está la documentación completa: https://developer.apple.com/library/ios/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/Chapters/IPhoneOSClientImp.html#//apple_ref/doc/uid/TP40008194-CH103-SW2
Como señala Charles Merriam, las versiones más nuevas de cordova-ios facilitan la desactivación de las notificaciones de inserción al configurar el indicador de preprocesador DISABLE_PUSH_NOTIFICATIONS. ( Ver el historial de errores )
Tendrá que cordova platform update ios
platform uninstall ios
platform install ios
e platform install ios
para obtener lo nuevo en AppDelegate.m. (¿Tal vez hay una mejor manera que volar la carpeta?)
Encontré una secuencia de comandos Cordova on_platform_add hook que editará project.pbxproj con esa bandera cuando instale la plataforma iOS. Necesitaba npm install xcode
para que el script hook funcionara.
Tanto como son correctos.
En versiones más recientes de Cordova, este código ofensivo ahora se genera útilmente dentro de un contenedor de #ifndef DISABLE_PUSH_NOTIFICATIONS
. Todo lo que necesita hacer es agregar -DISABLE_PUSH_NOTIFICATIONS
a sus indicadores de compilación. Eso está establecido en target/Build Settings/Custom Compiler Flags/(both C and C++ release)
para aquellos que se crean dentro de XCode.
En nuestro proceso de compilación, hemos estado volando y reconstruyendo mucho el archivo AppDelegate.m. El truco que uso es:
sed -i "" -e "s/ifndef DISABLE_PUSH_NOTIFICATIONS/if 0/" build/cordova/platforms/ios/gThrive/Classes/AppDelegate.m
# That uses the os/x sed to not have push notifications in the app
que simplemente hace que el problema desaparezca.
CÓMO HACER ESTO A TRAVÉS DE LA UI DE XCODE (6.1):
Mientras comenta el código ofensivo en Classes/AppDelegate.m
obtendrá su aplicación aprobada, desea continuar beneficiándose de las futuras actualizaciones de Cordova, así que la mejor manera de hacerlo es encender el símbolo DISABLE_PUSH_NOTIFICATIONS
durante la compilación para que este bit de código se quede fuera.
Vengo de un entorno de C #, así que entiendo la compilación condicional, pero soy nuevo en XCode, así que tuve que investigar un poco para descubrir cómo definir símbolos de compilación a través de la interfaz de usuario.
Resulta que las palabras mágicas son ''Macro de preprocesador''. Así es como puedes lograr esto gráficamente (ten en cuenta que así se hace en XCode 6.1):
Espero que esto ayude a otras personas en la misma situación.
Krik tiene razón! He encontrado que esta API llama en /Classes/AppDelegate.m
ciertamente generada por Cordova 3.5.
No probé por el momento, pero estas líneas ciertamente pueden ser comentadas en xCode para evitar las advertencias de Apple.
- (void) application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
// re-post ( broadcast )
NSString* token = [[[[deviceToken description]
stringByReplacingOccurrencesOfString: @"<" withString: @""]
stringByReplacingOccurrencesOfString: @">" withString: @""]
stringByReplacingOccurrencesOfString: @" " withString: @""];
[[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotification object:token];
}
- (void) application:(UIApplication *)application
didFailToRegisterForRemoteNotificationsWithError:(NSError *)error
{
// re-post ( broadcast )
[[NSNotificationCenter defaultCenter] postNotificationName:CDVRemoteNotificationError object:error];
}