Özel Görüntüleri Güvenceye Alma

Arka plan

Güvenli özel resimler özelliği, kartlarda herkese açık bir URL'den erişilmesi gerekmeyen (normal resimlerin kartlarda düzgün şekilde oluşturulması için gerekli) resimleri tanımlamanıza olanak tanır. Resim yüklemek ve bu resme Cüzdan kartı nesnesinde referans vermek için kullanılabilecek bir tanımlayıcı almak üzere Cüzdan API'sini kullanırsınız.

Aşağıdaki kart türleri desteklenir:

  • Etkinlik Bileti
  • Uçuş kartı
  • Toplu taşıma kartı
  • Fırsat kartı
  • Hediye kartı
  • Bağlılık kartı
  • Genel kart

Özellik örneği

Güvenli Özel Resim Örneği
Güvenli özel görüntü kullanan üyelik kartı

Kullanım Alanları

Güvenli özel resimler, herkese açık olması gerekmeyen ve bu nedenle profil fotoğrafı gibi amaçlarla kullanılabilecek resimlerin kullanılmasını sağlar. Bu sayede aşağıdakiler gibi kullanım alanları mümkün olur ancak bunlarla sınırlı değildir:

  • Yıllık üyelik kartı
  • Kartvizit
  • Toplu taşıma kartı

Not: Güvenli özel resimler, kabul edilebilir kullanım politikasında tanımlanan ek yönergelerle birlikte, devlet tarafından verilmiş kimlik olarak kartları temsil etmek için kullanılmak üzere tasarlanmamıştır.

Cüzdan özelliğini kullanırken dikkat edilmesi gereken bazı noktalar

  • Genel özel kartlarla kullanılamaz.
  • Yalnızca kart nesnelerine (sınıflara değil) eklenebilir.
  • Yalnızca tek bir Nesne ile kullanılabilir.
  • Yalnızca ImageModuleData ile kullanılabilir (logo ve geniş başlık logosu gibi diğer resimlerle kullanılamaz).

Geliştirme Aşamasındaki Özellikler

  • Web Desteği
  • Lokomotif resimlerdeki özel resimler

Entegrasyon adımları

  1. privateImageId almak için Google Cüzdan API'sini kullanarak kişisel resminizi yükleyin.
  2. Kart nesnesine resim ekleyin (örneğin, ImageModuleData). Resimde sourceUri alanını ayarlamak yerine, önceki adımdan elde edilen değerle privateImageId alanını ayarlarsınız.

Adım Sırası Diyagramı

Güvenli görüntü dizisi diyagramı
Özel resim dizisini güvenli hale getirme

Örnek Kod

Resmi yükleyin

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();

Kart nesnesinde özel resim kullanma

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

Ön tarafta resmi göstermek için kartı güncelleyin.

Güvenli özel görüntüyü herhangi bir imageModulesDatafield üzerinde kullanabilirsiniz. Aşağıda, şablon geçersiz kılma kullanarak resmi kartın ön tarafına yerleştirmek için imageModulesData alanının nasıl kullanılacağına dair bir örnek verilmiştir. Şablon geçersiz kılma ile sınıf ekleme örneğini aşağıda bulabilirsiniz:

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

İstisna işleme

Wallet FeatureAPI'nin yanlış kullanımıyla ilgili olası hatalar şunlardır:

Mesaj Neden
Resimde hem source_uri hem de private_image_id olamaz Yayıncı, tek bir resimde source_uri ve private_image_id ayarlamaya çalıştı. Bu işleme izin verilmez.
%s yayıncısı için %s kimlikli özel resim bulunamadı Bir nesnede mevcut olmayan bir özel resim kimliği ayarlama
%s kimlikli özel resim, %s veren için %s nesnesine eklenemedi. Çünkü bu resim zaten %s nesnesiyle kullanılıyor. Özel resimler yalnızca bir nesneyle kullanılabilir. Aynı özel resmi birden fazla nesnede kullanmaya çalışıyorsanız. Aynı özel resmi birden fazla nesneyle kullanmak için resmin yeniden yüklenmesi gerekir. Bu durumda, ikinci nesneyle kullanılabilecek yeni bir özel resim kimliği alırsınız.