read_contacts react permission internet app android permissions

react - ¿Es posible tener permisos "opcionales" en Android?



permissions android react native (3)

¿Hay alguna forma de que una aplicación de Android declare los permisos solicitados como opcionales?

Es decir, quiero escribir una aplicación que solicite un conjunto de permisos, por ejemplo, uno de ellos sea el acceso a los contactos del usuario. Ahora la aplicación puede funcionar y hacer cosas útiles sin este permiso de acceso, pero puede hacer más si se concede.

¿Hay alguna manera para que la aplicación diga "Deseo el permiso X, pero puede rechazarlo, en cuyo caso me complace ejecutarlo con una funcionalidad reducida"?



No lo creo, ya que los permisos se establecen en el manifiesto y son aceptados por el usuario al instalar .apk. Puede crear una versión ligera de la aplicación con permisos reducidos y un conjunto limitado de características y ofrecerla como alternativa.


Es posible otorgar privilegios a una aplicación ya instalada al no solicitar los permisos en la aplicación "principal" y al crear otra aplicación ("stub") usando el mismo android:sharedUserId , que solicita las características. A continuación, puede verificar si la aplicación de permiso se ha instalado comprobando si

context.checkCallingOrSelfPermission(permission) == PackageManager.PERMISSION_GRANTED

se evalúa como verdadero (con el contexto como contexto válido y permiso como una de las cadenas de permisos). Si es verdad, su aplicación de código auxiliar se ha instalado y usted puede desbloquear funciones que requieren los permisos otorgados. Si es falso, simplemente vuelve a las características básicas.

Al diseñar su aplicación de esa manera, puede volver a introducir fácilmente los permisos opcionales en la aplicación principal sin tener que cambiar ningún código, por ejemplo, si distribuye varias versiones.

Ahora puede consultar los privilegios del usuario activando la instalación de (una de) su (s) aplicación (es) de código auxiliar. Por lo tanto, si sus privilegios son necesarios después de la entrada de algún usuario en una actividad, inicie la aplicación para que aparezca si no se le ha otorgado el privilegio (por supuesto, puede colocar una actividad explicativa delante) y ejecute la función cuando regrese de ella. el administrador del paquete o cuando el permiso fue otorgado antes. También puede colocar la opción para habilitar o deshabilitar permisos en algún lugar de sus preferencias o en un primer cuadro de diálogo.

Para personas perezosas (como yo) un breve resumen sobre cómo subir el instalador del paquete: Cree un Intent usando Intent.ACTION_VIEW para un file:// -URI usando el Tipo "application/vnd.android.package-archive" . Los activos y los recursos no funcionan directamente, por ejemplo, puedes agruparlos como activos y copiarlos en la carpeta de caché o similar.

Advertencia: esta respuesta podría no cumplir con ToS de Google Play, ya que este método tiene algunos problemas de desinstalación (podría tener fugas de aplicaciones, consulte a continuación) especialmente al desinstalar a través de mecanismos de terceros (como Google Play, ya que el usuario no ve las aplicaciones de ayuda) usando estos métodos) y como privilegios opcionales no se pueden mostrar en la tienda de juegos afaik.

Para los problemas de desinstalación, recomendaría usar nombres como "MyApp: permisos XXX", dado que el nombre de la aplicación es "MyApp", por lo que el usuario puede eliminarlos fácilmente en listas alfabéticamente listadas. Alternativamente, si puede vivir con las aplicaciones de stub cada vez más complejas, use ACTION_PACKAGE_REMOVED como se menciona aquí .