ایمن کردن تصاویر خصوصی

پس‌زمینه

ویژگی تصاویر خصوصی ایمن به شما امکان می‌دهد تصاویری را در مجوزها تعریف کنید که نیازی به دسترسی ازطریق نشانی وب عمومی ندارند (الزامی برای تصاویر معمولی برای ارائه صحیح آن‌ها در مجوزها). از Wallet API برای بارگذاری تصویر و دریافت شناسه‌ای استفاده می‌کنید که می‌تواند برای ارجاع به آن تصویر در شیء مجوز «کیف پول» استفاده شود.

انواع مجوزهای زیر پشتیبانی می‌شود:

  • بلیت رویداد
  • کارت پرواز
  • کارت بلیت
  • کارت پیشنهاد ویژه
  • کارت هدیه
  • مجوز وفاداری
  • مجوز عمومی

نمونه ویژگی

نمونه تصویر خصوصی ایمن
کارت عضویت بااستفاده از تصویر خصوصی ایمن

موارد استفاده

تصاویر خصوصی ایمن امکان استفاده از تصاویری را فراهم می‌کند که لازم نیست به‌طور عمومی دردسترس باشند و بنابراین می‌توانند برای مواردی مانند عکس نمایه استفاده شوند. این امر موارد استفاده‌ای مانند، اما نه محدود به، موارد زیر را ممکن می‌سازد؛

  • بلیت عضویت سالانه
  • کارت کسب‌وکار
  • کارت بلیت

توجه: تصاویر خصوصی ایمن برای استفاده به‌عنوان مدرک شناسایی دولتی درنظر گرفته نشده‌اند و دستورالعمل‌های تکمیلی در خط‌مشی استفاده مجاز تعریف شده است.

برخی‌از ملاحظات هنگام استفاده از «تصاویر خصوصی ایمن»

  • نمی‌توان از آن با «مجوزهای شخصی عمومی» استفاده کرد
  • فقط به «اشیاء» مجوز (نه «کلاس‌ها») می‌تواند اضافه شود
  • فقط با یک Object قابل‌استفاده است
  • فقط با ImageModuleData قابل‌استفاده است (تصاویر خصوصی را نمی‌توان به فیلدهای تصویر دیگر، مثل heroImage، logo، یا wideLogo اختصاص داد)
  • مجوزهایی که از تصاویر خصوصی امن در ImageModuleData استفاده می‌کنند همچنان می‌توانند تصاویر قهرمان و نشان‌واره استاندارد (میزبانی‌شده در نشانی‌های وب با دسترسی عمومی) را به‌طور هم‌زمان نمایش دهند. افزودن تصویر خصوصی باعث محدود شدن یا مسدود شدن نمایش تصاویر قهرمان یا نشان‌واره استاندارد در مجوز نمی‌شود.

ویژگی‌های درحال توسعه

  • پشتیبانی وب
  • پشتیبانی از تصاویر خصوصی در فیلد heroImage (بااستفاده از privateImageId به‌عنوان نگاره اصلی)

مراحل یکپارچه‌سازی

  1. تصویر خصوصی‌تان را بااستفاده از Google Wallet API بارگذاری کنید تا privateImageId دریافت کنید.
  2. تصویری به شیء مجوز اضافه کنید (برای مثال، 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();

استفاده از Private Image در شیء مجوز

// 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))));
}

رسیدگی به استثنا

ممکن است درصورت استفاده نادرست از Google Wallet API خطاهای احتمالی رخ دهد، ازجمله:

ارسال پیام دلیل
تصویر نمی‌تواند هم source_uri و هم private_image_id داشته باشد صادرکننده سعی کرد source_uri و private_image_id را روی یک تصویر تنظیم کند که مجاز نیست
تصویر خصوصی با شناسه %s برای صادرکننده %s پیدا نشد تنظیم شناسه تصویر خصوصی غیرموجود روی شیء
تصویر خصوصی با شناسه %s برای صادرکننده %s به شیء %s اضافه نشد چون قبلاً با شیء %s استفاده شده است. تصویر خصوصی را فقط می‌توان با یک شیء استفاده کرد. تلاش برای استفاده از یک تصویر خصوصی در بیش‌از یک شیء. برای استفاده از یک تصویر خصوصی با بیش‌از یک شیء، باید آن را دوباره بارگذاری کنید و شناسه تصویر خصوصی جدیدی دریافت خواهید کرد که می‌توان از آن برای شیء دوم استفاده کرد