Fondo
La función de imágenes privadas seguras te permite definir imágenes en pases que no necesitan ser accesibles desde una URL pública (un requisito para que las imágenes normales se rendericen correctamente en los pases). Usas la API de Wallet para subir una imagen y recibir un identificador que se puede usar para hacer referencia a esa imagen en un objeto de pase de Wallet.
Se admiten los siguientes tipos de pases:
- Entrada para evento
- Tarjeta de embarque
- Pase de transporte público
- Tarjeta de oferta
- Tarjeta de regalo
- Pase de lealtad
- Pase genérico
Ejemplo de función
|
| Tarjeta de membresía con una imagen privada segura |
Casos de uso
Las imágenes privadas seguras permiten usar imágenes que no necesitan ser de acceso público y, por lo tanto, se pueden usar para elementos como una foto de perfil. Esto permite casos de uso como los siguientes, entre otros:
- Pase de membresía anual
- Tarjeta de presentación
- Pase de transporte público
Nota: Las imágenes privadas seguras no están diseñadas para representar pases como identificación emitida por el Gobierno, junto con los lineamientos adicionales definidos en la política de uso aceptable.
Algunas consideraciones para usar la función de la Billetera
- No se puede usar con pases privados genéricos
- Solo se pueden agregar a objetos de pase (no a clases).
- Solo se puede usar con un solo objeto
- Solo se puede usar con ImageModuleData (no con otras imágenes, p. ej., el logotipo y el logotipo de encabezado ancho).
Funciones en desarrollo
- Asistencia web
- Imágenes privadas en imágenes de héroe
Pasos de integración
- Sube tu imagen privada con la API de la Billetera de Google para recibir un
privateImageId. - Agrega una imagen al objeto del pase (por ejemplo,
ImageModuleData). En lugar de configurar el camposourceUrien la imagen, configurarás el campoprivateImageIdcon el valor obtenido en el paso anterior.
Diagrama de secuencia
|
| Secuencia de imágenes privada y segura |
Código de ejemplo
Sube la imagen
String issuerId = "12345"; String keyFilePath = "/path/to/key.json"; GoogleCredential credential = GoogleCredential.fromStream(new FileInputStream(keyFilePath)) .createScoped(Arrays.asList("https://www.googleapis.com/auth/wallet_object.issuer")); HttpTransport httpTransport = GoogleNetHttpTransport.newTrustedTransport(); // Prepare request to upload image String contentType = "image/jpeg"; // MIME type of image String imageFilePath = "/path/to/image.jpg"; HttpContent content = new ByteArrayContent( contentType, ByteStreams.toByteArray(new FileInputStream(imageFilePath))); String url = String.format( "https://walletobjects.googleapis.com/upload/walletobjects/v1/privateContent/%s/uploadPrivateImage", issuerId); // Make request to upload image HttpResponse response = httpTransport .createRequestFactory(credential) .buildPostRequest(new GenericUrl(url), content) .execute(); // Get privateImageId from response Gson gson = new Gson(); JsonObject jsonObject = gson.fromJson(response.parseAsString(), JsonObject.class); String privateImageId = jsonObject.get("privateImageId").getAsString();
Usa la imagen privada en el objeto del pase
// Build GenericObject with privateImageId in ImageModuleData (also adding an optional TextModuleData) Image image = new Image().setPrivateImageId(privateImageId); ImageModuleData imageModuleData = new ImageModuleData().setId("imageId").setMainImage(image); TextModuleData textModuleData = new TextModuleData().setId("textId").setHeader("Card holder").setBody("John Doe"); GenericObject genericObject = new GenericObject() .setId(issuerId + ".objectId") // class must be inserted before inserting object .setClassId(issuerId + ".classId") .setCardTitle("Business name") .setHeader("My membership card") .setImageModulesData(Arrays.asList(imageModuleData)) .setTextModulesData(Arrays.asList(textModuleData)); // Insert GenericObject (or can use in JWT without inserting ahead of time) Walletobjects service = new Walletobjects.Builder(httpTransport, GsonFactory.getDefaultInstance(), credential) .setApplicationName("My Application") .build(); service.genericobject().insert(genericObject).execute();
Actualiza el pase para mostrar la imagen en el frente
Puedes usar la imagen privada segura en cualquier campo imageModulesData. A continuación, se muestra un ejemplo de cómo usar un campo imageModulesData para colocar la imagen en el frente de la tarjeta con una anulación de plantilla. Este es un ejemplo de cómo insertar una clase con una anulación de plantilla:
CardTemplateOverride cardTemplateOverride =
new CardTemplateOverride()
.setCardRowTemplateInfos(
Arrays.asList(
new CardRowTemplateInfo()
.setTwoItems(
new CardRowTwoItems()
// The ids chosen here must be set on the object's TextModuleData and ImageModuleData
.setStartItem(
createTemplateItem("object.textModulesData['textId']"))
.setEndItem(
createTemplateItem("object.imageModulesData['imageId']")))));
GenericClass genericClass =
new GenericClass()
.setId(issuerId + ".classId")
.setClassTemplateInfo(
new ClassTemplateInfo().setCardTemplateOverride(cardTemplateOverride));
service.genericclass().insert(genericClass);
...
private static TemplateItem createTemplateItem(String fieldPath) {
return new TemplateItem()
.setFirstValue(
new FieldSelector()
.setFields(Arrays.asList(new FieldReference().setFieldPath(fieldPath))));
}Manejo de excepciones
Es posible que se produzcan errores si se usa de forma incorrecta la API de Wallet Feature, lo que puede incluir lo siguiente:
| Mensaje | Motivo |
|---|---|
| La imagen no puede tener source_uri y private_image_id | El emisor intentó establecer un source_uri y un private_image_id en una sola imagen, lo que no se permite. |
| No se encontró la imagen privada con el ID %s para el emisor %s | Establecer un ID de imagen privada inexistente en un objeto |
| No se pudo agregar la imagen privada con el ID %s para el emisor %s al objeto %s porque ya se usa con el objeto %s. Una imagen privada solo se puede usar con un objeto. | Intentar usar la misma imagen privada en más de un objeto Para usar la misma imagen privada con más de un objeto, se debe volver a subir y obtendrás un nuevo ID de imagen privada, que se puede usar con el segundo objeto. |