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 eine Voraussetzung für reguläre Bilder, 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 z. B. 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 darzustellen. Es gelten zusätzliche Richtlinien, die in der Richtlinie zur zulässigen Nutzung definiert sind.
Hinweise zur Verwendung der Wallet-Funktion
- Kann nicht mit generischen privaten Karten verwendet werden
- Kann nur Pass-Objekten (nicht -Klassen) hinzugefügt werden
- Kann nur mit einem einzelnen Objekt verwendet werden
- Kann nur mit ImageModuleData verwendet werden (nicht mit anderen Bildern, z.B. Logo und breites Header-Logo)
In Entwicklung befindliche Funktionen
- Web-Support
- Private Bilder in Hero-Images
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 Passobjekt 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 einem imageModulesData-Feld 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))));
}Ausnahmebehandlung
Bei falscher Verwendung der Wallet FeatureAPI können folgende Fehler auftreten:
| Botschaft | Grund |
|---|---|
| Ein 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 wurde kein privates Bild mit der ID %s für den Aussteller %s gefunden. | 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. |