پیشینه
ویژگی تصاویر خصوصی امن به شما امکان میدهد تصاویری را در گذرگاهها تعریف کنید که نیازی به دسترسی از طریق URL عمومی ندارند (الزامی برای تصاویر معمولی جهت رندر صحیح آنها در گذرگاهها). شما از Wallet API برای آپلود یک تصویر و دریافت یک شناسه استفاده میکنید که میتواند برای ارجاع به آن تصویر در شیء گذرگاه Wallet استفاده شود.
انواع گذرگاههای زیر پشتیبانی میشوند؛
- بلیط رویداد
- کارت سوار شدن به هواپیما
- مجوز عبور و مرور
- کارت پیشنهاد
- کارت هدیه
- کارت وفاداری
- گذر عمومی
مثال ویژگی
![]() |
| کارت عضویت با استفاده از تصویر خصوصی امن |
موارد استفاده
تصاویر خصوصی امن، امکان استفاده از تصاویری را فراهم میکنند که نیازی به دسترسی عمومی ندارند و بنابراین میتوانند برای مواردی مانند عکس پروفایل استفاده شوند. این امر موارد استفادهای مانند موارد زیر را امکانپذیر میکند، اما محدود به آنها نیست.
- کارت عضویت سالانه
- کارت ویزیت
- مجوز عبور
توجه: تصاویر خصوصی امن برای نمایش گذرنامهها به عنوان مدرک شناسایی دولتی به همراه دستورالعملهای اضافی تعریف شده در سیاست استفاده قابل قبول، در نظر گرفته نشدهاند.
برخی ملاحظات هنگام استفاده از ویژگی کیف پول
- با گذرنامههای عمومی خصوصی قابل استفاده نیست
- فقط میتوان برای ارسال اشیاء (نه کلاسها) اضافه کرد.
- فقط با یک شیء واحد قابل استفاده است
- فقط با ImageModuleData قابل استفاده است (تصاویر دیگر، مانند لوگو و لوگوی هدر عریض قابل استفاده نیستند)
ویژگیهای در حال توسعه
- پشتیبانی وب
- تصاویر خصوصی روی تصاویر قهرمان
مراحل ادغام
- تصویر خصوصی خود را با استفاده از API کیف پول گوگل آپلود کنید تا یک
privateImageIdدریافت کنید. - یک تصویر به شیء ارسالی (pass object) اضافه کنید (برای مثال،
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();
گذرنامه را بهروزرسانی کنید تا تصویر در جلو نشان داده شود
شما میتوانید از تصویر خصوصی امن در هر فیلد imageModulesData استفاده کنید. در زیر مثالی از نحوه استفاده از فیلد imageModulesData برای قرار دادن تصویر در جلوی کارت با استفاده از یک الگوی override آمده است. در اینجا مثالی از درج یک کلاس با الگوی override آمده است:
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 استفاده شده است. یک تصویر خصوصی فقط میتواند با یک شیء استفاده شود. | تلاش برای استفاده از یک تصویر خصوصی یکسان روی بیش از یک شیء. برای استفاده از یک تصویر خصوصی یکسان با بیش از یک شیء، باید آن را دوباره آپلود کنید و یک شناسه تصویر خصوصی جدید دریافت خواهید کرد که میتواند با شیء دوم استفاده شود. |

