Activa las notificaciones push PhoneGap Spain

Foro

Home Forums PhoneGap Cámara funciona en la app de Phonegap pero no al compilar

This topic contains 11 replies, has 2 voices, and was last updated by G G 2 meses, 3 semanas .

Viendo 12 respuestas - de la 1 a 12 (de 12 en total)
  • Cámara funciona en la app de Phonegap pero no al compilar

    Intervenciones
  • G
    G 
    Participant

    Estimados, como no encontré nada tan específico al inconveniente que estoy teniendo, creo este hilo para ver si me pueden ayudar, y a la vez ayudar a otros que puedan estar pasando por situaciones similares.

    Trataré de resumir:

    Estoy desarrollando una app donde una de sus funciones es el uso de la cámara.
    He hecho todo el desarrollo y lo vengo probando con la app de phonegapp tanto en android como iOs, y hasta el momento funciona a la perfección.
    Vale aclarar que cuando se instala la app de phonegap en Android e iOs por defecto la misma solicita todos los permisos del dispositivo: gps, internet, archivos, contactos, cámara, micrófono, vibrador, etc. Por eso es que al correr tu propia app sobre phonegap en el dispositivo no solicita ningún permiso adicional (al menos esa es mi experiencia).

    El problema está cuando compilo y corro la app en Android e iOs sin usar la app de Phonegap. Ahí me doy cuenta que muchas de las funcionalidades que uso en la app están bien (como GPS, internet, grabar archivos, etc), pero la que no me está funcionando es la de la cámara.
    Cuando voy a instalar la app en Android, me muestra el listado de permisos que la app requiere pero entre ellas no está la cámara.

    Al usar la app, y utilizar la función que ejecuta la cámara, la app en Android no hace nada, y en iOs la app se cierra.

    Conclusión: necesito darle permisos a la app para usar la cámara, y al momento no lo he logrado.

    Básicamente todo lo que hago en cuanto a esto es cambiar los meta en el config.xml:

    Como las siguientes líneas:

     Code: XML (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.
    15.
    16.

    <feature name="http://api.phonegap.com/1.0/camera"/>

    <gap:plugin name="cordova-plugin-camera" source="npm" spec="4.0.2" />

    <platform name='ios'>
        <feature name="Camera">
          <param name="ios-package" value="CDVCamera" />
        </feature>
    </platform>

    <platform name='android'>
        <uses-permission name="android.permission.CAMERA" />
        <feature name="Camera">
          <param name="android-package" value="org.apache.cordova.CameraLauncher" />
        </feature>
    </platform>

    (vale aclarar que compilo con Phonegap Build).

    ¿Alguien me puede guiar a la solución a mi problema?

    Muchas gracias, desde Uruguay.


    Aeon
    Aeon 
    Participant

    que version de phonegap estas usando, porque esa forma de definir los plugins no se me hace de versiones recientes


    Aeon
    Aeon 
    Participant

    mira la documentacion del plugin de la camara https://www.npmjs.com/package/cordova-plugin-camera

    https://build.phonegap.com/plugins

    • This reply was modified 3 meses, 1 semana by Aeon Aeon.

    • This reply was modified 3 meses, 1 semana by Aeon Aeon.
    G
    G 
    Participant

    La forma de definir los plugins es

    1.  <gap:plugin name="cordova-plugin-camera" source="npm" spec="4.0.2" />
    En el config.xml, hay otra forma?

    Estos son algunos de los que tengo definidos:

     Code: XML (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.

    <gap:plugin name="cordova-plugin-x-socialsharing" source="npm" />
        <gap:plugin name="cordova-plugin-device" source="npm" spec="1.1.4" />
        <gap:plugin name="cordova-plugin-device-orientation" source="npm" spec="1.0.5" />
        <gap:plugin name="cordova-plugin-dialogs" source="npm" spec="1.3.1" />
        <gap:plugin name="cordova-plugin-file" source="npm" spec="4.3.1" />
        <gap:plugin name="cordova-plugin-file-transfer" source="npm" spec="1.6.1" />
        <gap:plugin name="cordova-plugin-network-information" source="npm" spec="1.3.1" />
        <gap:plugin name="cordova-plugin-whitelist" source="npm" spec="~1.3.1" />
        <gap:plugin name="cordova-plugin-inappbrowser" source="npm" spec="~1.6.1" />
        <gap:plugin name="phonegap-plugin-push" source="npm" spec="~1.8.0">
            <variable name="SENDER_ID" value="XXXXXXXXXX" />
        </gap:plugin>
        <gap:plugin name="cordova-plugin-badge" source="npm" version="0.7.4" />
      <gap:plugin name="cordova-plugin-camera" source="npm" spec="4.0.2" />

    De todas formas no sé si viene por ahí el tema, ya que cuando corro la app en el Phonegap funciona a la perfección, y cuando subo a Phonegap Build para compilar, muestra que los plugins fueron detectados:

     Code: TEXT (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.

    Plugin  Source  Version  Installed  Latest  Platforms
    cordova-plugin-badge     npm  0.7.4  0.7.4  n/a  android,ios,winphone
    cordova-plugin-camera     npm  4.0.2  4.0.2  n/a  android,ios,winphone
    cordova-plugin-device     npm  1.1.4  1.1.4  n/a  android,ios,winphone
    cordova-plugin-device-orientation     npm  1.0.5  1.0.5  n/a  android,ios,winphone
    cordova-plugin-dialogs     npm  1.3.1  1.3.1  n/a  android,ios,winphone
    cordova-plugin-file     npm  4.3.1  4.3.1  n/a  android,ios,winphone
    cordova-plugin-file-transfer     npm  1.6.1  1.6.1  n/a  android,ios,winphone
    cordova-plugin-inappbrowser     npm  ~1.6.1  1.6.1  n/a  android,ios,winphone
    cordova-plugin-network-information     npm  1.3.1  1.3.1  n/a  android,ios,winphone
    cordova-plugin-whitelist     npm  ~1.3.1  1.3.3  n/a  android,ios,winphone
    cordova-plugin-x-socialsharing     npm  *  5.2.1  n/a  android,ios,winphone
    phonegap-plugin-push     npm  ~1.8.0  1.8.4  n/a  android,ios,winphone

    Y me dice:

     Code: TEXT (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.
    13.
    14.

    Update your config.xml with the snippet below to lock your plugins to the specific versions used in this build:

    <plugin name="cordova-plugin-badge" spec="0.7.4" />
    <plugin name="cordova-plugin-camera" spec="4.0.2" />
    <plugin name="cordova-plugin-device" spec="1.1.4" />
    <plugin name="cordova-plugin-device-orientation" spec="1.0.5" />
    <plugin name="cordova-plugin-dialogs" spec="1.3.1" />
    <plugin name="cordova-plugin-file" spec="4.3.1" />
    <plugin name="cordova-plugin-file-transfer" spec="1.6.1" />
    <plugin name="cordova-plugin-inappbrowser" spec="1.6.1" />
    <plugin name="cordova-plugin-network-information" spec="1.3.1" />
    <plugin name="cordova-plugin-whitelist" spec="1.3.3" />
    <plugin name="cordova-plugin-x-socialsharing" spec="5.2.1" />
    <plugin name="phonegap-plugin-push" spec="1.8.4" />

    Lo que no sé es por qué motivo cuando descargo el APK o el IPA y lo instalo en un dispositivo, me avisa de los permisos pero no el de la cámara… y obviamente cuando hago uso de la cámara en la app, aborta.


    G
    G 
    Participant

    Donde aborta es aquí:

     Code: Javascript (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.

    navigator.camera.getPicture(
                              funcionSuccessFotoPerfil,
                              funcionErrorFotoPerfil,
                              {
                                quality: 50,
                                destinationType: Camera.DestinationType.FILE_URI,
                                correctOrientation: true,
                                allowEdit: true
                              }
                            );

    Cuando llega a este punto debería abrirse la cámara, pero no lo hace (es luego de compilar, en la app de Phonegapp funciona perfectamente).
    Descarto que sea la función funcionSuccessFotoPerfil ya que esta se llama luego de sacar la foto, pero no llego a ese punto. Y la función funcionErrorFotoPerfil actualmente la tengo vacía, por lo que tampoco es eso.

    Pero como decía anteriormente, he dejado de revisar el código JS por dos motivos: (1) es prácticamente igual a los ejemplos de la documentación oficial, y (2) lo más importante es que cuando instalo la app compilada, no muestra que tenga permisos para acceder a la cámara. Y ahí es donde estoy casi seguro que tengo el inconveniente.

    He intentado con desinstalar e instalar el plugin unas 400 veces mas o menos, y tal como decía Einstein “Locura es hacer lo mismo una vez tras otra y esperar resultados diferentes”…


    Aeon
    Aeon 
    Participant

    ya estuve viendo el problema que comentas y tienes razon no lanza la camara cuando se compila:

     Code: arbitrary (select
    1.
    2.

    PhoneGap (iOS / Android / Windows)
    cli-6.5.0 (4.3.1 / 6.1.2 / 4.4.3)

    con esta compilación el plugin de la camara 4.0.2 no es compatible por eso no se instala el plugins, el mas reciente que te sirve para esa seria la version 2.4.1


    Aeon
    Aeon 
    Participant

    o actualiza tu app para la funcion 7.0.1 o la 8.0.0 que estan disponibles en el build


    G
    G 
    Participant

    Tal cual, tengo la 6.5.2, voy a actualizar a la 7.1.1 y publico los comentarios por si a alguien mas le sirve.
    Muchas gracias!


    G
    G 
    Participant

    Bueno, para ir comentando lo que he hecho…

    Lo primero que hice fue actualizar phonegap en mi pc a la 7.1.1 mediante node.js (última versión disponible)… no sé realmente por qué lo hice, o si era necesario.

    Luego fui al config.xml y puse:
    1.  <preference name='phonegap-version' value='cli-8.0.0' />
    Pero no funcionó, daba error al compilar en Phonegap Build…
    Para Android:

     Code: TEXT (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.
    12.

    Updating icons at ../res
    Error: Source path does not exist: res/icon/android/drawable-hdpi-icon.png
        at updatePathInternal (/cordova/node_modules/cordova-common/src/FileUpdater.js:145:19)
        at /cordova/node_modules/cordova-common/src/FileUpdater.js:223:19
        at Array.forEach (native)
        at Object.updatePaths (/cordova/node_modules/cordova-common/src/FileUpdater.js:221:33)
        at updateIcons (/cordova/lib/prepare.js:377:17)
        at /cordova/lib/prepare.js:49:9
        at _fulfilled (/cordova/node_modules/q/q.js:854:54)
        at self.promiseDispatch.done (/cordova/node_modules/q/q.js:883:30)
        at Promise.promise.promiseDispatch (/cordova/node_modules/q/q.js:816:13)
        at /cordova/node_modules/q/q.js:624:44

    En iOS:

     Code: TEXT (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.

    Error: Source path does not exist: res/icon/ios/icon-40.png
        at updatePathInternal (/private/project/cordova/node_modules/cordova-common/src/FileUpdater.js:145:19)
        at /private/project/cordova/node_modules/cordova-common/src/FileUpdater.js:223:19
        at Array.forEach (native)
        at Object.updatePaths (/private/project/cordova/node_modules/cordova-common/src/FileUpdater.js:221:33)
        at updateIcons (/private/project/cordova/lib/prepare.js:367:17)
        at /private/project/cordova/lib/prepare.js:64:9
        at _fulfilled (/private/project/cordova/node_modules/q/q.js:834:54)
        at self.promiseDispatch.done (/private/project/cordova/node_modules/q/q.js:863:30)
        at Promise.promise.promiseDispatch (/private/project/cordova/node_modules/q/q.js:796:13)
        at /private/project/cordova/node_modules/q/q.js:556:49

    (muestro únicamente la última parte de los logs, la del error)

    Luego, y solo para descartar, cambié a 7.0.1, pero el resultado fue exactamente el mismo.
    1.  <preference name='phonegap-version' value='cli-7.0.1' />

    Vale aclarar que esos archivos están en esas rutas, dentro de la carpeta www de la raíz. No entiendo el motivo por el cuál no los encuentra.

    Imagino que hay más cambios que debo hacer para adaptar la versión que venía manejando a estas versiones más recientes.

    ¿Me dan una ayuda?


    Aeon
    Aeon 
    Participant

    acabo de actualizar a la version 8.0.0 desde nodejs y cree un proyecto nuevo defini
    1.  <preference name='phonegap-version' value='cli-8.0.0' />
    y ya compilo

     Code: arbitrary (select
    1.
    2.

    PhoneGap (iOS / Android / Windows)
    cli-8.0.0 (4.5.4 / 7.0.0 / 5.0.0)

    todo lo hizo correctamente y funciona bien la app con el plugin de la camara 4.0.2


    Aeon
    Aeon 
    Participant

    te paso el git de la app con la que probe lo que te comento

    https://github.com/Aeon1/cameratest


    G
    G 
    Participant

    Gracias @aeon, el inconveniente debe pasar porque tengo varios plugins en uso en mi app, no solo la cámara, y al actualizar probablemente tenga que cambiar varias cosas.

    Probé bajar la versión del plugin y funcionó perfecto! Compilé, probé, y hasta subí al Google Play y todo perfecto.

    Podríamos decir que en Android la misión está cumplida.
    El cambio que hice fue en el config.xml:
    1.  <gap:plugin name="cordova-plugin-camera" source="npm" spec="2.4.1" />

    Luego tuve algunos inconvenientes con la cámara en iOS.
    Si bien compiló perfecto, y en las pruebas está todo ok, a la hora de subir al App Store me está tirando un error, donde se me decía que tenía que agregar unas descripciones del uso de la cámara, que lo solucioné colocando lo siguiente en el config.xml:

     Code: XML (select
    1.
    2.
    3.
    4.
    5.
    6.
    7.
    8.
    9.
    10.
    11.

    <gap:config-file platform="ios" parent="NSCameraUsageDescription">
        <string>Necesitas acceso a la camara para tomar fotos.</string>
      </gap:config-file>
      
      <gap:config-file platform="ios" parent="NSPhotoLibraryUsageDescription">
        <string>Necesitas acceso a la libreria para seleccionar fotos.</string>
      </gap:config-file>
      
      <gap:config-file platform="ios" parent="NSPhotoLibraryAddUsageDescription">
        <string>Necesitas permisos para guardar en la libreria de fotos</string>
      </gap:config-file>

    Me surgió otro asunto pero es relacionado a la localización (y esto fue por una revisión previo a ser aprobado en el App Store), que trata de lo siguiente: https://developer.apple.com/ios/human-interface-guidelines/app-architecture/requesting-permission/

    Pero no sigo este tema acá por no estar relacionado a la cámara, que es el tema de este hilo.

    Muchas gracias por tu ayuda @aeon!


Viendo 12 respuestas - de la 1 a 12 (de 12 en total)

You must be logged in to reply to this topic.