Thông tin khái quát
Tính năng hình ảnh riêng tư an toàn cho phép bạn xác định những hình ảnh trên thẻ và vé không cần truy cập được từ một URL công khai (đây là yêu cầu đối với hình ảnh thông thường để hiển thị đúng cách trên thẻ và vé). Bạn sử dụng Wallet API để tải hình ảnh lên và nhận một mã nhận dạng có thể dùng để tham chiếu đến hình ảnh đó trên một đối tượng thẻ và vé trong Wallet.
Chúng tôi hỗ trợ các loại thẻ và vé sau đây;
- Vé xem sự kiện
- Thẻ lên máy bay
- Thẻ đi phương tiện công cộng
- Thẻ ưu đãi
- Thẻ quà tặng
- Thẻ khách hàng thân thiết
- Thẻ và vé chung
Ví dụ về tính năng
|
| Thẻ thành viên sử dụng hình ảnh riêng tư an toàn |
Trường hợp sử dụng
Hình ảnh riêng tư an toàn cho phép sử dụng những hình ảnh không cần truy cập công khai và do đó có thể được dùng cho những việc như ảnh hồ sơ. Điều này cho phép các trường hợp sử dụng như sau (nhưng không giới hạn ở):
- Thẻ hội viên hằng năm
- Danh thiếp
- Thẻ đi phương tiện công cộng
Lưu ý: Hình ảnh riêng tư an toàn không được dùng để thể hiện thẻ và giấy tờ tuỳ thân do chính phủ cấp, cùng với các nguyên tắc bổ sung được xác định trong chính sách sử dụng được chấp nhận
Một số điều cần cân nhắc khi sử dụng Tính năng Wallet
- Không dùng được với Thẻ và vé riêng tư chung
- Chỉ có thể thêm vào các Đối tượng thẻ và vé (không phải Lớp)
- Chỉ có thể dùng với một Đối tượng duy nhất
- Chỉ có thể dùng với ImageModuleData (không dùng với các hình ảnh khác, ví dụ: biểu trưng và biểu trưng tiêu đề rộng)
Các tính năng đang phát triển
- Hỗ trợ trên web
- Hình ảnh riêng tư trên hình ảnh chính
Các bước tích hợp
- Tải hình ảnh riêng tư của bạn lên bằng API Ví Google để nhận
privateImageId. - Thêm hình ảnh vào đối tượng thẻ và vé (ví dụ:
ImageModuleData). Thay vì đặt trườngsourceUritrên hình ảnh, bạn sẽ đặt trườngprivateImageIdbằng giá trị nhận được từ bước trước.
Sơ đồ trình tự
|
| Bảo mật chuỗi hình ảnh riêng tư |
Mã ví dụ
Tải hình ảnh lên
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();
Sử dụng Hình ảnh riêng tư trên đối tượng thẻ và vé
// 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();
Cập nhật Thẻ và vé để hình ảnh xuất hiện ở mặt trước
Bạn có thể sử dụng hình ảnh riêng tư bảo mật trên mọi imageModulesDatafield. Sau đây là ví dụ về cách sử dụng trường imageModulesData để đặt hình ảnh ở mặt trước của thẻ bằng cách sử dụng một mẫu ghi đè. Sau đây là ví dụ về cách chèn một lớp bằng cách ghi đè mẫu:
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))));
}Xử lý ngoại lệ
Có thể xảy ra lỗi khi sử dụng Wallet FeatureAPI không đúng cách, chẳng hạn như:
| Tin nhắn | Lý do |
|---|---|
| Hình ảnh không thể có cả source_uri và private_image_id | Nhà phát hành đã cố gắng đặt source_uri và private_image_id trên một hình ảnh duy nhất, điều này không được phép |
| Không tìm thấy hình ảnh riêng tư có mã nhận dạng %s cho tổ chức phát hành %s | Đặt mã nhận dạng hình ảnh riêng tư không tồn tại trên một đối tượng |
| Không thể thêm hình ảnh riêng tư có mã nhận dạng %s cho tổ chức phát hành %s vào đối tượng %s vì hình ảnh này đã được dùng với đối tượng %s. Bạn chỉ có thể dùng một hình ảnh riêng tư với một đối tượng. | Cố gắng sử dụng cùng một hình ảnh riêng tư trên nhiều đối tượng. Để sử dụng cùng một hình ảnh riêng tư với nhiều đối tượng, bạn phải tải lại hình ảnh đó và bạn sẽ nhận được một mã nhận dạng hình ảnh riêng tư mới. Mã này có thể được dùng với đối tượng thứ hai |