Arrière-plan
La fonctionnalité d'images privées sécurisées vous permet de définir des images sur les cartes qui n'ont pas besoin d'être accessibles à partir d'une URL publique (une exigence pour que les images normales s'affichent correctement sur les cartes). Vous utilisez l'API Wallet pour importer une image et recevoir un identifiant permettant de faire référence à cette image sur un objet de carte Wallet.
Les types de pass suivants sont acceptés :
- Billet pour un événement
- Carte d'embarquement
- Titre de transport
- Carte d'offre
- Carte
- Pass fidélité
- Carte générique
Exemple de fonctionnalité
|
| Carte de membre utilisant une image privée sécurisée |
Cas d'utilisation
Les images privées sécurisées permettent d'utiliser des images qui n'ont pas besoin d'être accessibles au public et qui peuvent donc être utilisées pour des éléments tels qu'une photo du profil. Cela permet des cas d'utilisation tels que les suivants :
- Pass annuel
- Carte de visite
- Titre de transport
Remarque : Les images privées sécurisées ne sont pas destinées à représenter des pass comme des pièces d'identité officielles, conformément aux consignes supplémentaires définies dans le Règlement sur l'utilisation autorisée.
Éléments à prendre en compte lors de l'utilisation d'images privées sécurisées
- Ne peut pas être utilisé avec des cartes privées génériques
- Ne peut être ajouté qu'à des objets de pass (pas à des classes)
- Ne peut être utilisé qu'avec un seul objet
- Ne peut être utilisé qu'avec
ImageModuleData(les images privées ne peuvent pas être attribuées à d'autres champs d'image, tels queheroImage,logoouwideLogo) - Les pass utilisant des images privées sécurisées dans
ImageModuleDatapeuvent toujours afficher simultanément des images de logo et de bannière standards (hébergées sur des URL accessibles publiquement). L'ajout d'une image privée n'empêche pas l'affichage d'images de bannière ou de logo standards sur la carte.
Fonctionnalités en cours de développement
- Assistance Web
- Compatibilité avec les images privées dans le champ
heroImage(utilisation d'unprivateImageIdcomme image principale)
Procédure d'intégration
- Importez votre image privée à l'aide de l'API Google Wallet pour recevoir un
privateImageId. - Ajoutez une image à l'objet pass (par exemple,
ImageModuleData). Au lieu de définir le champsourceUrisur l'image, vous définissez le champprivateImageIdavec la valeur obtenue à l'étape précédente.
Diagramme de séquence
|
| Sécuriser une séquence d'images privées |
Exemple de code
Importez l'image.
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();
Utiliser l'image privée sur l'objet pass
// 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();
Mettre à jour la carte pour afficher l'image au recto
Vous pouvez utiliser l'image privée sécurisée sur n'importe quel champ imageModulesData. Voici un exemple d'utilisation d'un champ imageModulesData pour positionner l'image au recto de la carte à l'aide d'un remplacement de modèle. Voici un exemple d'insertion d'une classe avec un remplacement de modèle :
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))));
}Gestion des exceptions
Des erreurs potentielles peuvent se produire en cas d'utilisation incorrecte de l'API Google Wallet. En voici quelques exemples :
| Message | Motif |
|---|---|
| L'image ne peut pas avoir à la fois source_uri et private_image_id | L'émetteur a essayé de définir un source_uri et un private_image_id sur une seule image, ce qui n'est pas autorisé. |
| Impossible de trouver l'image privée avec l'ID %s pour l'émetteur %s | Définir un ID d'image privée inexistant sur un objet |
| Impossible d'ajouter l'image privée avec l'ID %s pour l'émetteur %s à l'objet %s, car elle est déjà utilisée avec l'objet %s. Une image privée ne peut être utilisée qu'avec un seul objet. | Vous essayez d'utiliser la même image privée sur plusieurs objets. Pour utiliser la même image privée avec plusieurs objets, vous devez la réimporter. Vous obtiendrez alors un nouvel ID d'image privée, qui pourra être utilisé avec le deuxième objet. |