Biniş Kartınızı Huawei Cüzdanınıza Ekleyin

Ömer Akkuş
Huawei Developers - Türkiye
5 min readApr 29, 2022
Huawei Wallet

Herkese merhabalar,

Bu yazımda Huawei Wallet Kit’i kullanarak oluşturacağımız biniş kartını Huawei Wallet uygulamamıza nasıl ekleyebileceğimizi anlatacağım.

Huawei Wallet servisi sadece Biniş kartı değil, loyalty card, hediye kartı, kupon, etkinlik biletleri, sinema biletleri, transit geçişler vb. bir çok bileti oluşturmanıza imkan sağlar. Daha sonrasında oluşturulan bu biletler Huawei Wallet uygulamasında saklanarak ihtiyaç olunması durumunda hızlıca bu biletlere ulaşmanıza imkan sağlar.

Entegrasyon aşamaları

Öncelikle Huawei Developer hesabı açarak ilgili projeyi Console tarafında oluşturmak gerekmektedir. Tüm bu adımları aşağdaki linkteki yönlendirmeler ile tamamlayabilirsiniz.

Wallet Kit Aşamaları

  1. Console tarafına erişim sağlandıktan sonra Project Settings sayfasında Manage API tabına girerek Wallet servisinin durumunu kontrol etmelisiniz. Eğer servis kullanılabilirliği kapalı ise aktif hale getirmelisiniz.
  2. Daha sonrasında ise soldaki menüde Earn tabı altında Wallet Kit’e tıklayarak Wallet Kit’in konfigürasyon ayarlarını yapacağımız sayfaya ulaşıyoruz.
Wallet configuration page

Yukarıdaki görselde görüleceği gibi, service type yi Wallet Kit ile oluşturacağınız bilet türünü seçebilir ve gerekli alanları doldurduktan sonra Next dedikten sonra NFC özelliği kullanılmayacaksa seçim yapılmasına gerek yoktur. Tekrar Next butonuna tıkladıktan sonra Wallet Kit’in Console üzerindeki işlemleri tamamlanmış olacak, artık client tarafta kodlamaya başlamaya hazırsınız.

Öncelikle biz projemizde uçak bileti case’si kullanacağımız için uçak biletinin modelini oluşturmalıyız. Bunu da rest api üzerinden gerçekleştireceğiz.

Boarding Pass Modeli oluşturmak için aşağıdaki endpoint kullanılmalıdır.

https://wallet-passentrust-dre.cloud.huawei.eu/hmspass/v1/flight/model

Yukarıdaki endpoint Avrupa region’ı için kullanılmaktadır. Diğer bölgelerin endpointlere buradan ulaşabilirsiniz.

Biniş Bileti Modeli Oluşturma

Öncelikle resmi dokümanı incelemeniz açısından ilgili sayfaya buradan ulaşabilirsiniz.

Resmi dokümanda görüleceği gibi, ilk olarak biniş kartının modelini oluşturmamızı sağlayan URL’e istek atarken Header kısmına content-type ve Authorization gibi bilgileri eklememiz gerekmektedir. Authorization kısmına Bearer + access_token bilgisini eklemeniz gerekmektedir. Bunun için öncelikle access token’ı elde edeceğimiz endpoint’e istek atmalı ve buradan alacağımız token bilgisini biniş kartı modelini oluşturmak için gideceğimiz endpoint’in Authorization header kısmına ekleyeceğiz.

Access token bilgisini elde etmek için request yapacağımız endpoint için resmi dokümana buradan ulaşabilirsiniz. Gidilecek olan endpoint aşağıdaki gibidir;

Access Token Bilgisini Elde Etmek

POST: https://oauth-login.cloud.huawei.com/oauth2/v3/token

AccessTokenService interface

Yukarıdaki retrofit servimiz öncesinde field’ları açıklamak isterim.

grant_type = “client_credentials”

client_id = App ID değerine karşılık gelir.

client_secret = AppGalleryConnect Console tarafında proje detay sayfasındaki client secret bilgisine karşılık gelir.

client_secret

Yapmış olduğumuz request sonucunda dönen response da servisten alacağımız bilgiler yukarıdaki gibi olacaktır.

Yukarıdaki örnek kodda görüleceği gibi ilgili bilgileri map leme yaptıktan sonra request yaptığımız endpoint’in response’da access_token bilgisini alabilirsiniz.

Biniş Bileti Model Oluşturma

Biniş biletimizi oluşturmak için öncelikle olarak biniş biletinin modelini oluşturmak zorundayız. Bu servis için gerekli request’i yapmadan önce bize gerekli olan access_token bilgisini elde ettik. Bundan sonraki adımda biniş modelini oluşturmak için ilgili endpoint’e gideceğiz.

Biniş biletinin modelini oluşturmamız için aşağıdaki endpoint’e POST isteği atmalıyız.

POST: https://wallet-passentrust-dre.cloud.huawei.eu/hmspass/v1/flight/model

Öncelikle bu isteği yapmadan önce nelere ihtiyacımız var ve neleri hazırlamalıyız bunlara değinmek isterim. İlk olarak isteğimizin Header kısmında Authorization kısmına Bearer + access_token bilgisini, content-type kısmına ise application/json;charset=utf-8 bilgisini eklemeliyiz. Body kısmına ise JSON objesi olarak oluşturacağımız bilgileri ekleyeceğiz.

Aşağıdaki dokümandaki JSON formatını örnek olması açısından ekliyorum. Buradaki değişkenler biniş biletinin oluşturulmasında kullanılmaktadır. İlgili dokümana buradan ulaşabilirsiniz.

JSON dosyamızı da projemize ekledikten sonra key’lere karşılık gelecek olan değerleri isterseniz mock data olarak direkt olarak json dosyanıza ekleyebilirsiniz veya aşağıdaki örnekte olacağı gibi modelleri oluşturarak json dosyasına değerleri setleyebilirsiniz. Biz demo projemizde mock data kullanarak ilerleyeceğiz ve bu json dosyasındaki bilgileri JsonObject olarak body’e ekleyeceğiz. Modelleri oluşturarak kullanmak isterseniz aşağıdaki dokümanı takip ederek Json objenizi oluşturabilirsiniz.

İlk olarak servis tarafındaki geliştirmelerimiz şu şekilde olacaktır;

Retrofit tarafındaki geliştirmelerimizden sonra Huawei Wallet sunucusuna json objemizi aşağıdaki gibi göndereceğiz.

Biniş kartı oluşturma

Yukarıdaki request sonucunda sunucudan String türünde response alıyoruz.

Huawei Wallet sunucusunda biniş kartı modelimizi oluşturduktan sonra, ilgili uçuşa içerik bilgisini de eklememiz gerekmektedir. Uçuşa ait instance bilgisinin içeriğinde uçuşa ait ek bilgiler, örnek vermek gerekirse; yolcu adı, soyadı, koltuk bilgisi vb. gibi uçuşa ait bilgilerden oluşmaktadır.

Instance oluşturulurken önemli parametreler vardır. Bu parametreler sayesinde oluşturulan biniş kartı modeli ile instance eşleştirilir. Örnek vermek gerekirse, aşağıdaki görselde de görüleceği gibi “passStyleIdentifier” değeri oluşturulan modelin bir uniqueId değeridir ve instance ile modelin ilişkilendirilmesini sağlayan parametre olarak düşünebilirsiniz. Aynı şekilde organizationPassId ve serialNumber değerleri de uniqueId olarak belirlenmesi gereken parametrelerdir. Bir diğer önemli parametre ise, passTypeIdentifier değeri ise Console tarafında Wallet kit konfigrasyon sayfasında serviceID değeridir.

Uygulamamızda kullandığım biniş kartımın model ve instance bilgilerini kapsayan json dosyamın görselleri aşağıda bulabilirsiniz;

FlightModel.json file

Instance bilgilerini içeren json dosyası da aşağıdaki gibidir;

FlightInstance.json

Yukarıdaki görsellerde görüldüğü gibi, model ve instance bilgilerini passStyleIdentifier parametresi ilişkilendirmektedir. OrganizationPassId ve serialNumber her biniş kartının unique instance değerleridir ve iki parametre aynı değeri alabilmektedir. Her yeni biniş kartında bu 3 önemli parametre güncellenmelidir.

Rest api’ler ile Huawei Wallet serverında oluşturmuş olduğumuz modelimize ulaşmak için instance bilgilerimizi içeren json dosyasını aynı şekilde JsonObject türüne dönüştürerek bir JWE değeri oluşturmalıyız. Bu JWE değeri ile uzaktaki sunucudan oluşturmuş olduğumuz biniş kartı modelimizi elde edeceğiz ve Huawei Cüzdan uygulamamıza bu bileti ekleyebileceğiz.

JWE bilgisini elde edebilmemiz için server tarafında direkt olarak aşağıdaki linkteki dokümandaki örnek kodları kullanmalısınız.

FlightInstance.json dosyamızdaki JSONObject değerimizi direkt olarak Huawei wallet serverına göndererek bir JWE bilgisi elde ediyoruz. Örnek kullanımı aşağıdaki gibidir;

Daha sonra elde edilen JWE bilgisi ile oluşturulan biniş kartımız eklenilmek üzere Huawei Cüzdan uygulaması içerisinde gösteriliyor. Eğer Huawei cüzdan uygulaması yüklü ise direkt olarak ilgili biniş kartı intent ile yönlendirilerek gösterilir. Eğer yüklü değilse burada cüzdan uygulamasının AppGallery linki verilerek AppGallery’e yönlendirme yapılabilir. Huawei wallet uygulamasının package name bilgisi: com.huawei.wallet

Yukarıdaki kodda gözüken parametrelerden biri olan jweSignPrivateKey değeri, Wallet kit konfigurasyon sayfasında oluşturulan public key değeridir. Tüm bu adımlardan sonra Cüzdan uygulaması içinde gösterien uzak sunucudaki biniş kartımızı Ekle butonuna tıkladıktan sonra Huawei Cüzdan uygulamasına eklenmiş olacaktır. Uygulamanın ekran görüntüleri aşağıdaki gibidir;

Uygulama çıktısı

Wallet BoardingPassDemo

Ek olarak biniş kartınızın gösterildiği uçuş detay sayfasını isteğinize göre json dosyasını güncelleyerek customize edebilirsiniz. İlgili dokümana buradan ulaşabilirsiniz.

Sonuç

Bu yazımda Huawei Cüzdan servisi sayesinde biniş kartı oluşturmayı ve oluşturulan bu biniş kartlarının Huawei Cüzdan uygulamasına eklenmesi casesini makalemde anlatmaya çalıştım. Umarım herkes için faydalı olmuştur. Vakit ayırıp okuduğunuz için teşekkürler. Uygulamanın tamamına aşağıdaki repo’dan ulaşabilirsiniz.

İyi kodlamalar!

Referanslar

--

--