ฉากหลัง
ฟีเจอร์รูปภาพส่วนตัวที่ปลอดภัยช่วยให้คุณกำหนดรูปภาพในบัตรที่ไม่จำเป็นต้องเข้าถึงได้จาก URL ที่หันหน้าสู่สาธารณะ (ข้อกำหนดสำหรับรูปภาพปกติเพื่อให้แสดงอย่างถูกต้องในบัตร) คุณใช้ Wallet API เพื่ออัปโหลดรูปภาพและรับตัวระบุที่ใช้เพื่ออ้างอิงรูปภาพนั้นในออบเจ็กต์บัตร Wallet ได้
ระบบรองรับบัตรประเภทต่อไปนี้
- ตั๋วกิจกรรม
- บอร์ดดิ้งพาส
- บัตรโดยสาร
- บัตรข้อเสนอ
- บัตรของขวัญ
- บัตร Loyalty Pass
- บัตรทั่วไป
ตัวอย่างฟีเจอร์
|
| บัตรสมาชิกโดยใช้รูปภาพส่วนตัวที่ปลอดภัย |
กรณีการใช้งาน
รูปภาพส่วนตัวที่ปลอดภัยช่วยให้ใช้รูปภาพที่ไม่จำเป็นต้อง เข้าถึงได้แบบสาธารณะได้ จึงสามารถใช้สำหรับสิ่งต่างๆ เช่น รูปโปรไฟล์ ซึ่งจะช่วยให้ใช้กรณีการใช้งานต่างๆ ได้ เช่น แต่ไม่จำกัดเพียงกรณีต่อไปนี้
- บัตรสมาชิกรายปี
- นามบัตร
- บัตรโดยสาร
หมายเหตุ: รูปภาพส่วนตัวที่ปลอดภัยไม่ได้มีไว้เพื่อใช้แสดงบัตรเป็นบัตรประจำตัวที่ออกโดยรัฐบาล รวมถึงหลักเกณฑ์เพิ่มเติมที่กำหนดไว้ในนโยบายการใช้งานที่ยอมรับได้
ข้อควรพิจารณาบางประการเมื่อใช้ฟีเจอร์ Wallet
- ใช้ร่วมกับบัตรส่วนตัวทั่วไปไม่ได้
- เพิ่มได้เฉพาะในออบเจ็กต์บัตร (ไม่ใช่คลาส)
- ใช้ได้กับออบเจ็กต์เดียวเท่านั้น
- ใช้ได้กับ ImageModuleData เท่านั้น (ไม่ใช่รูปภาพอื่นๆ เช่น โลโก้และโลโก้ส่วนหัวแบบกว้าง)
ฟีเจอร์อยู่ระหว่างการพัฒนา
- การสนับสนุนทางเว็บ
- รูปภาพส่วนตัวในรูปภาพหลัก
ขั้นตอนการผสานรวม
- อัปโหลดรูปภาพส่วนตัวโดยใช้ Google Wallet API เพื่อรับ
privateImageId - เพิ่มรูปภาพลงในออบเจ็กต์บัตร (เช่น
ImageModuleData) แทนที่จะตั้งค่าฟิลด์sourceUriในรูปภาพ คุณจะตั้งค่าฟิลด์privateImageIdด้วยค่าที่ได้จากขั้นตอนก่อนหน้า
ไดอะแกรมลำดับ
|
| ลำดับรูปภาพส่วนตัวที่ปลอดภัย |
โค้ดตัวอย่าง
อัปโหลดรูปภาพ
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();
ใช้รูปภาพส่วนตัวในออบเจ็กต์บัตร
// 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();
อัปเดตบัตรเพื่อแสดงรูปภาพที่ด้านหน้า
คุณใช้รูปภาพส่วนตัวที่ปลอดภัยใน imageModulesDatafield ใดก็ได้ ตัวอย่างต่อไปนี้แสดงวิธีใช้ฟิลด์ imageModulesData เพื่อจัดตำแหน่ง รูปภาพที่ด้านหน้าของการ์ดโดยใช้การลบล้างเทมเพลต ตัวอย่าง การแทรกคลาสด้วยการลบล้างเทมเพลตมีดังนี้
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))));
}การจัดการข้อยกเว้น
การใช้ Wallet FeatureAPI อย่างไม่ถูกต้องอาจทำให้เกิดข้อผิดพลาดได้ ซึ่งรวมถึง
| ข้อความ | เหตุผล |
|---|---|
| รูปภาพต้องไม่มีทั้ง source_uri และ private_image_id | ผู้ออกพยายามตั้งค่า source_uri และ private_image_id ในรูปภาพเดียว ซึ่งไม่ได้รับอนุญาต |
| ไม่พบรูปภาพส่วนตัวที่มีรหัส %s สำหรับผู้ออก %s | การตั้งค่ารหัสรูปภาพส่วนตัวที่ไม่มีอยู่จริงในออบเจ็กต์ |
| เพิ่มรูปภาพส่วนตัวที่มีรหัส %s สำหรับผู้ออก %s ลงในออบเจ็กต์ %s ไม่ได้ เนื่องจากมีการใช้กับออบเจ็กต์ %s อยู่แล้ว รูปภาพส่วนตัวใช้ได้กับออบเจ็กต์เดียวเท่านั้น | พยายามใช้รูปภาพส่วนตัวเดียวกันในออบเจ็กต์มากกว่า 1 รายการ หากต้องการใช้รูปภาพส่วนตัวเดียวกันกับออบเจ็กต์มากกว่า 1 รายการ คุณต้องอัปโหลดรูปภาพอีกครั้งและจะได้รับรหัสรูปภาพส่วนตัวใหม่ ซึ่งใช้กับออบเจ็กต์ที่ 2 ได้ |