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

Arka plan

Güvenli özel resimler özelliğiyle, kartlarda herkese açık bir URL'den erişilmesi gerekmeyen (normal resimleri kartlarda düzgün oluştururken gereklidir) resimleri tanımlayabilirsiniz. Cüzdan API'si ile resim yükleyebilir ve bu resme Cüzdan kartı nesnesinde referans vermek için kullanılabilecek bir tanımlayıcı alabilirsiniz.

Desteklenen kart türleri:

  • 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 resim kullanılan üyelik kartı

Kullanım Alanları

Güvenli özel resimler özelliğiyle, herkese açık olması gerekmeyen resimleri, profil fotoğrafı gibi amaçlarla kullanılabilirsiniz. Böylece, aşağıdakiler dahil ancak bunlarla sınırlı olmayan alanlarda kullanılabilirsiniz:

  • 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, resmi kimlik belgesi kartları olarak 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
  • Hero resimlerindeki özel resimler

Entegrasyon Adımları

  1. privateImageId almak için Google Wallet API'sini kullanarak özel resminizi yükleyin.
  2. Kart nesnesine resim ekleyin (örneğin, ImageModuleData). sourceUri alanını resimde ayarlamak yerine, privateImageId alanını önceki adımdan elde edilen değerle ayarlayın.

Adım Sırası Diyagramı

Güvenli resim adım sırası diyagramı
Özel resim adım sırasını güvenli hale getirme

Örnek Kod

Resmi yükleme

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

Özel resmi kart nesnesinde 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();

Resmi ön tarafta göstermek için kartı güncelleme

Güvenli özel görüntüyü her imageModulesDatafield üzerinde kullanabilirsiniz. Şablon geçersiz kılma kullanarak imageModulesData alanı ile resmin, kartın ön tarafına yerleştirilmesi aşağıda gösterilmiştir. Şablon geçersiz kılma kullanarak sınıf ekleme örneği aşağıdadır:

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'sinin yanlış kullanımıyla ilgili olası hatalar şunlardır:

Mesaj Neden
Resimde hem source_uri hem de private_image_id olamaz Yayıncının tek bir resimde ayarlamaya çalıştığı source_uri ve private_image_id işlemine izin verilmez
%s sağlayıcısı için %s kimlikli özel resim bulunamadı Bir nesnede, mevcut olmayan özel resim kimliği ayarlama
%s kimlikli özel resim, %s nesnesiyle kullanıldığından %s sağlayıcısı için %s nesnesine eklenemedi. Özel resim, yalnızca bir nesneyle kullanılabilir. Aynı özel resmi birden fazla nesnede kullanma. 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