Hintergrund
Mit der Funktion „Sichere private Bilder“ können Sie Bilder auf Karten definieren, die nicht über eine öffentliche URL zugänglich sein müssen. Das ist bei regulären Bildern erforderlich, damit sie auf Karten richtig gerendert werden. Mit der Wallet API können Sie ein Bild hochladen und eine Kennung erhalten, mit der Sie auf dieses Bild in einem Wallet-Karten-/Ticketobjekt verweisen können.
Die folgenden Arten von Karten werden unterstützt:
- Veranstaltungsticket
- Bordkarte
- Fahrkarte
- Angebotskarte
- Gutschein
- Kundenkarte
- Generische Karte/generisches Ticket
Beispiel für eine Funktion
|
| Mitgliedskarte mit sicherem privaten Bild |
Anwendungsfälle
Mit sicheren privaten Bildern können Sie Bilder verwenden, die nicht öffentlich zugänglich sein müssen und daher beispielsweise als Profilbild verwendet werden können. Dies ermöglicht unter anderem die folgenden Anwendungsfälle:
- Jahresabo
- Visitenkarte
- Fahrkarte
Hinweis: Sichere private Bilder sind nicht dafür vorgesehen, Ausweise als amtliche Ausweise mit zusätzlichen Richtlinien darzustellen, die in der Richtlinie zur zulässigen Nutzung definiert sind.
Hinweise zur Verwendung von Secure Private Images
- Kann nicht mit generischen persönlichen Ausweisen verwendet werden
- Kann nur Pass-Objekten (nicht Pass-Klassen) hinzugefügt werden
- Kann nur mit einem einzelnen Objekt verwendet werden
- Kann nur mit
ImageModuleDataverwendet werden. Private Bilder können nicht anderen Bildfeldern wieheroImage,logooderwideLogozugewiesen werden. - Bei Karten mit sicheren privaten Bildern in
ImageModuleDatakönnen weiterhin gleichzeitig Standard-Hero- und Logo-Bilder (die unter öffentlich zugänglichen URLs gehostet werden) angezeigt werden. Wenn Sie ein privates Bild hinzufügen, werden die Standard-Hero- oder Logo-Bilder auf der Karte oder dem Ticket nicht eingeschränkt oder blockiert.
In Entwicklung befindliche Funktionen
- Web-Support
- Unterstützung für private Bilder im Feld
heroImage(Verwendung einesprivateImageIdals Hero-Bild)
Integrationsschritte
- Laden Sie Ihr privates Bild über die Google Wallet API hoch, um eine
privateImageIdzu erhalten. - Fügen Sie dem Pass-Objekt ein Bild hinzu (z. B.
ImageModuleData). Anstatt das FeldsourceUrifür das Bild festzulegen, legen Sie das FeldprivateImageIdmit dem Wert aus dem vorherigen Schritt fest.
Sequenzdiagramm
|
| Private Bildsequenz sichern |
Beispielcode
Bild hochladen
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();
Privates Bild im Ausweisobjekt verwenden
// 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();
Aktualisieren Sie die Karte, damit das Bild auf der Vorderseite angezeigt wird.
Sie können das sichere private Bild in jedem imageModulesDatafield verwenden. Im Folgenden sehen Sie ein Beispiel dafür, wie Sie mit dem Feld „imageModulesData“ das Bild auf der Vorderseite der Karte mithilfe einer Vorlagenüberschreibung positionieren. Hier ist ein Beispiel für das Einfügen einer Klasse mit einer Vorlagenüberschreibung:
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))));
}Umgang mit Ausnahmen
Bei einer falschen Verwendung der Google Wallet API können folgende Fehler auftreten:
| Botschaft | Grund |
|---|---|
| Bild kann nicht sowohl „source_uri“ als auch „private_image_id“ haben | Der Aussteller hat versucht, für ein einzelnes Bild sowohl „source_uri“ als auch „private_image_id“ festzulegen. Das ist nicht zulässig. |
| Es konnte kein privates Bild mit der ID %s für den Aussteller %s gefunden werden. | Nicht vorhandene private Bild-ID für ein Objekt festlegen |
| Das private Bild mit der ID %s für den Aussteller %s konnte dem Objekt %s nicht hinzugefügt werden, da es bereits für das Objekt %s verwendet wird. Ein privates Bild kann nur für ein Objekt verwendet werden. | Sie versuchen, dasselbe private Bild für mehrere Objekte zu verwenden. Wenn Sie dasselbe private Bild für mehrere Objekte verwenden möchten, muss es noch einmal hochgeladen werden. Sie erhalten dann eine neue private Bild-ID, die Sie für das zweite Objekt verwenden können. |