Alcance de acceso utilizando el nombre de tipo en Google Cloud / Android Mobile Backend Starter
La documentación de Google Cloud MBS indica que el acceso a entidades almacenadas puede controlarse mediante el prefijo de KindName de esa entidad con cadenas "[public]" o "[private]" (o nada).
Https://cloud.google.com/developers/articles/mobile-backend-starter-api-reference#acfce
- Cómo implementar un GCM Hello World para Android con Android Studio
- No se pudo resolver: com.google.firebase: firebase-database: 10.2.0
- Google App Engine Java y Android Introducción
- Protección de los extremos de la API de Google App Engine
- Notificación Push mediante Firebase y Google Cloud Messaging
Sin embargo, intentar la inserción de CloudEntities en el almacén de datos que utiliza KindNames que empiezan con [public] o [private] provoca una excepción / error, específicamente que el KindName no es válido.
Este es el caso tanto para el Backend que se ejecuta en modo abierto y en modo seguro (con las credenciales de inicio de sesión de Google para derivar el campo propietario)
Por ejemplo aquí yo uso KindName "[public] TestDB" que falla, mientras que "TestDB" no lanzaría ninguna excepción.
04-22 19: 57: 54.132: E / AndroidRuntime (4690): Proceso: com.example.package, PID: 4690
04-22 19: 57: 54.132: E / AndroidRuntime (4690): java.lang.IllegalArgumentException: Illegal kind name: [public] TestDB
04-22 19: 57: 54.132: E / AndroidRuntime (4690): en com.google.cloud.backend.core.CloudEntity. (CloudEntity.java:86)
04-22 19: 57: 54.132: E / AndroidRuntime (4690): en com.example.package.CloudUtil.convertUpdatesToCEList (CloudUtil.java:252)
04-22 19: 57: 54.132: E / AndroidRuntime (4690): en com.example.package.CloudUtil.checkSync (CloudUtil.java:199)
La sección pertinente de código editada / comprimida por brevedad es:
CloudBackendMessaging cbm=_cloudfrag.getCloudBackend(); List<CloudEntity> entries=new ArrayList<CloudEntity>(); while (...) { CloudEntity ce=new CloudEntity(_CLOUD_DB_KIND); ce.put("fieldname", devID); entries.add(ce); } _countActivity.runOnUiThread(new Runnable() { @Override public void run() { cbm.updateAll(entries, handler); } });
Donde handler es la devolución de llamada y _cloudfrag es el CloudBackendFragment del código de ejemplo.
Obtengo el mismo efecto utilizando tanto inserciones como actualizaciones, para listas individuales o múltiples, es decir, de entidades a la vez.
Sólo puedo pensar que estoy malinterpretando la documentación – pero parece bastante explícito que KindNames puede comenzar con [public] [private] etc?
- GAE no reconoce la cookie?
- Obtener de android a motor de aplicaciones de Google
- ¿Cómo usar los puntos finales de Google Cloud con Volley?
- Gestión de sesiones en Google App Engine con Android / IPhone
- Bloqueo de inicio de Eclipse, "SDK de Android: resolución de marcadores de error"
- Servidor Android más seguro y seguro backend
- El nombre de GoogleAccountCredential es nulo a pesar de llamar a setSelectedAccountName (Android 6.0)
- ¿Cómo puedo restringir el acceso de la API de Endpoints de Google App Engine a sólo mis aplicaciones de Android?
A juzgar por los informes de errores en github de otros que experimentan el mismo problema, se trata de un error en la biblioteca MBS de Google.
Desafortunadamente la respuesta a esto ha sido silencio durante meses hasta que esta noche los desarrolladores publicaron un solo commit actualizando el archivo readme para indicar que esta biblioteca ya no es compatible y no es un producto oficial de google (a pesar de ser empujado como un kit de inicio con cada proyecto cloud Empezó desde la consola!).
https://github.com/GoogleCloudPlatform/solutions-mobile-backend-starter-android-client/pull/16
En cuanto a la fuente, creo que esta función de modificador de acceso nunca se implementó realmente a pesar de la documentación en sentido contrario.