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 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ı
privateImageIdalmak için Google Cüzdan API'sini kullanarak kişisel resminizi yükleyin.- Kart nesnesine resim ekleyin (örneğin,
ImageModuleData). ResimdesourceUrialanını ayarlamak yerine, önceki adımdan elde edilen değerleprivateImageIdalanını ayarlarsınız.
Adım Sırası 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. |