Bảo mật hình ảnh riêng tư

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

Ví dụ về hình ảnh riêng tư bảo mật
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

  1. Tải hình ảnh riêng tư của bạn lên bằng API Ví Google để nhận privateImageId.
  2. Thêm hình ảnh vào đối tượng thẻ và vé (ví dụ: ImageModuleData). Thay vì đặt trường sourceUri trên hình ảnh, bạn sẽ đặt trường privateImageId bằng giá trị nhận được từ bước trước.

Sơ đồ trình tự

Sơ đồ chuỗi hình ảnh bảo mậ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