HMS In-App Purchase Kit Kullanımı
Merhabalar arkadaşlar, bu yazımda sizler için, Huawei In-App Purchases Servisi nedir? Ne işe yarar? Desteklenen ödeme yöntemleri nelerdir? Satın alma işlemi için nasıl bir algoritma izlenmeli? Sorularının cevaplarını derledim. Şimdiden keyifle okumalar dilerim
Hazırsanız başlayalım.
Huawei In-App Purchases Nedir ?
Huawei In-App Purchases kit, dijital içeriklerin uygulamalar aracılığıyla satın alınmasını sağlayan servistir. Bu servis sayesinde kullanıcılar doğrudan uygulamayı kullanarak çeşitli dijital ürünleri satın alabilirler ve çeşitli aboneliklere dahil olabilirler.
Huawei In- App Purchase Kullanarak Ne Tür Hizmetler Satın Alınabilir ?
Huawei In- App Purchases kullanarak consumable ürünler, non-consumable ürünler ve abonelikler olmak üzere üç tür satın alma işlemi gerçekleştirilebilir.
Consumable Product: Bu öğeleri her ihtiyaç duyduğunuzda satın almanız gerekir. Örneğin oyunda ek can puanları, mücevher ve oyun paraları vb.
Non-Consumable: Bir defa satın alındıktan sonra her zaman kullanılabilir ürünlerdir. Örneğin reklamları kaldırma veya pro sürümüne yükseltme gibi.
Subscription: Belirli periyotta yeniden satın alınması gereken ürünlerdir. Aylık veya haftalık abonelikleri buna örnek verebiliriz. İptal edilmediği sürece çoğu abonelik otomatik olarak yenilenir.
Desteklenen Ödeme Yöntemleri Nelerdir?
Huawei In-App Purchases hizmeti, birden fazla ödeme yöntemini desteklemektedir. Bu ödeme yöntemleri; banka kartıyla ödeme, operatör faturalandırması ve Huawei puanlarıdır.
Huawei In- App Purchase Nasıl Kullanılır?
Huawei In-App Purchase kit ’ini kullanmaya başlamadan önce yapılması gerekenler vardır:
Huawei In-App Purchase kit ve daha fazlası için öncelikle Huawei Developer hesabı açmanız gerekmektedir.
Hesabınız zaten var ise Huawei Developer Web sitesine giriş yaptıktan sonra sağ üst köşedeki console butonuna tıklayınız.
AppGallery Connect Card’a tıklayınız.
Açılan AppGallery Connect sayfasında My apps ‘i seçiniz.
En sağdaki New app butonuna tıklayarak, yeni bir uygulama oluştunuz.
Uygulamayı oluşturduktan sonra sırasıyla Develop -> Overview -> App Information sekmelerine tıklayınız. Ardından açılan sayfadan agconnect-services. json dosyasını tıklayarak indiriniz.
İndirilen Agconnect-services. json isimli dosyayı, Android Studio’da oluşturduğunuz projedeki app dizininin altına kopyalayınız.
Android studio’da root dizinde bulunan build.gradle dosyasını açın ve sırayla allprojects -> repositories kısmına giderek HMS SDK için gerekli ayarlamaları yapınız.
Buildscript -> dependencies kısmına aşağıdaki gibi gerekli yapılandırmaları ekleyiniz.
App dizininde bulunan build.gradle dosyasında gerekli yapılandırmaları yapınız ve implementation depencies ekleyiniz. { version } kısmını güncel SDK sürüm numarası ile değiştiriniz. Örneğin, com.huawei.hms:iap:4.0.4.301.
Root dizinine AppGallery Connect plug-in bağımlılığını eklemeyi unutmayınız.
Şimdi sırada In–App purchases servisini aktif hale getirmek var. Sırasıyla, My Projects -> Your app -> Project settings -> Manage Api sekmelerine tıklayınız. Ardından görselde belirtildiği gibi In–App purchases servisini aktif hale getiriniz.
Son olarak ekranın sol kısmından sırasıyla, Earning -> In-App Purchases sekmesine gidiniz. IAP hizmetini ilk kez yapılandırıyorsanız sözleşmeyi imzalamanız için bir iletişim kutusu görüntülenecektir.
Ürün Yapılandırması
Huawei Developer console yardımıyla kullanıcılara sunacağınız ürün veya ürünleri eklemelisiniz. Ürün ekleme işleminin nasıl yapılacağını ve daha fazlasını burada bulabilirsiniz. Sizler, kullanıcılara sunmak istediğiniz ürün ve ürün özelliklerine uygun olan üç farklı ürün tipinden istediğinizi seçebilirsiniz.
Tüm bu adımlardan sonra nihayet kodlamaya başlayabiliriz.
Uygulama içi Satın alma Süreçleri
Öncelikle ödeme yapmadan önce telefonunuzdaki Huawei kimliğinizi kullanarak oturum açmış olmanız gerekmektedir. Aksi halde 60050 hata kodu döner ve geçerli bir Huawei kimliği ile oturum açılmadığı anlamına gelir
Huawei IAP Desteğini Kontrol Etme
Oturum açma işlemini gerçekleştirdiyseniz simdi belli kontrollerin yapılması gerekmektedir. Peki nedir bu kontroller?
Şu anda oturum açılmış olan Huawei hesabında Huawei IAP aktif mi ?
Kullanıcının bulunduğu ülke veya bölgede Huawei IAP servisi kullanılabilir mi ?
Tüm bu kontrolleri isEnvReady Api’ sini kullanarak yapabilirsiniz.
Geçerli bir Huawei kimliği ile oturum açılmadıysa sistem kullanıcıdan oturum açmasını ister ve login sayfasına yönlendirir.
Ürün ve Ürün Bilgisi Sorgulama
İlk olarak satın alınabilecek ürün bilgilerinin kullanıcıya gösterilmesi gerekiyor. Bu aşamada devreye obtainProductInfo Api’si giriyor. Bu api bizim için daha önce Huawei app gallery’ye eklediğimiz ürün ve ürün bilgilerini getirir. Bu işlemi Api ‘i aldığı productInfoReq parametresine göre yapıyor. Nasıl mı ?
Burada en önemli husus productInfoRequest parametresine set ettiğimiz değerlerdir. ProductID ve PriceType olmak üzere toplamda iki parametreyi set etmemiz gerekmektedir.
Yazımın başında sizlere Huawei’ in kullanıcılara 3 farklı satın alma seçeneği sunduğundan bahsetmiştim. İşte burada sorgulamak istediğimiz ürün tipine PriceType set etmelisiniz.
Consumable ürünler için sorgulama yapmak istiyorsanız, IapClient.PriceType.INAPP_CONSUMABLE parametresini, NonConsumable ürünler için sorgulama yapmak istiyorsanız IapClient.PriceType.INAPP_NONCONSUMBLE parametresini ve abonelikler için ise IapClient.PriceType.IN_APP_SUBSCRIPTION parametresini kullanmalısınız. Product id, AppGallery Connect’te ürün eklerken verdiğiniz id ile aynıdır.
Uygulama İçi Ürün Satın Almayı Başlatma
Şimdi hazırsanız sırasıyla satın alma işlemini ve aşamalarını ele alalım. Satın alma işlemi nasıl başlar? aşamaları nelerdir? nasıl sonlandırılır?
Bir kullanıcı ürünü satın almak için sayfadaki butona tıkladığında, satın alma işlemi başlar.başlaması için ilk olarak PurchaseIntentResult tipinde bir task oluşturularak createPurchaseIntent api’si çağrılır.
Api istek sonucu için iki olasılık vardır. Başarı ve başarısızlık durumu. Bu iki durumu işleyebilmek için OnSuccessListener ve OnFailureListener’ı kullanılmalıdır.
Api çağrısının başarılı olması durumunda PurchaseIntentResult nesnesi tipinde bir sonuç döner ve startResolutionForResult metodu kullanılarak Huawei in-app purchase ödeme sayfası görüntülenir.
Ödeme sayfasında gerekli bilgiler girilerek ödeme işlemi başarıyla gerçekleştirilse veya ödeme işlemi iptal edilirse ödeme sonucunu içeren PurchaseResultInfo tipinde bir nesne onActivityResult’a döner. Burada ödeme sonucunu içeren PurchaseResultInfo nesnesini elde etmek için IapClient’in parsePurchaseResultInfoFromIntent yöntemi kullanılır.
Tüm sonuçlar için ayrı bir returnCode döndürülür. Ödeme işlemi tamamlanmadan iptal edilmesi durumunda returnCode 60000 olur. Bu ödemenin kullanıcı tarafından iptal edildiği anlamına gelir. Ödeme işlemi başarıyla tamamlanırsa yani kullanıcı bir ürünü başarıyla satın almayı başarırsa returCode 0 olur.
Başarı durumunda yanıtın değiştirilip değiştirilmediğini kontrol edilmelidir. Kontrol işlem için imza dizesinin doğrulanması gerekmektedir.
Hata senaryosunda ise bir exception nesnesi döndürülür. Nesne bir Iap ApiException nesnesiyse, hata kodunu almak için getStatusCode() metodu kullanılır.
Satın Alınan Ürünü Tüketilmesi
Ürün başarıyla satın alındıktan ve kullanıcıya başarıyla teslim edildikten sonra satın alınan ürünün tüketilmesi gerekmektedir. Bu işlem için consumeOwnedPurchase api’si kullanılır. Api çağrısı başarılı olursa Huawei IAP sunucusu ürün durumunu satın alınabilecek şekilde sıfırlar. Bu işlem sayesinde kullanıcı daha sonra ürünü tekrar satın alabilmektedir.
Olası ORDER_PRODUCT_OWNED hatalarını en aza indirgemek adına onCreate metodunda deliverConsumablePurchases metotunu çağırabilirsiniz. Bu metotda obtainOwnedPurchases api’si kullanılarak teslim edilmemiş ürün var mı diye kontrol ediliyor ve ardından ürün teslim ediliyor.
Aksi halde kullanıcı bu ürünü tekrar satın almak isterse 60051 hata kodu dönecektir. Bu hata kodu, kullanıcı zaten ürüne sahibi olduğu için yeni bir ürün satın alamayacağı anlamına gelir. Ürün NonConsumable olsada deliverNonConsumablePurchase metotu çağrılmalıdır ancak nonConsumable ürünler tekrar satın alınamaz.
Daha önce tüketilen bir ürün tekrar tüketilmeye çalışılırsa 60053 hata kodu döner. Bu durumda ürünün tüketim kaydı olup olmadığını kontrol etmek için acquOwnedPurchaseRecord Api’sini kullanmanız gerekir.
Abonelik Hizmeti Sunma
Abonelik işlemlerine başlamadan önce mevcut abonelik durumu kontrol edilmelidir. obtainOwnedPurchases api’sini kullanarak yapabilirsiniz. InApppurchaseData.purchaseState 0 ise, abonelik zaten satın alınmış durumdadır.
Bir abonelik satın alınmış durumdaysa ve aboneliğin süresi hala devam ediyorsa abonelikle ilgili hizmetler kullanıcıya sağlanmalıdır ve yeniden satın alınamaz.
InApppurchaseData.purchaseTime ile InApppurchaseData.expirationDate değerleri bize abonelik başlangıç ve bitiş değerlerini verir.
Kullanıcıların daha önce dahil olmadığı abonelikleri sıfırdan satın alabilmesi için projenize aşağıdaki kod parçacığını eklenmelidir.
Tüm abonelikler için aynı şekilde hizmet verilip verilmeyeceği kontrol edilmelidir.
Bu yazımda sizlere In-App Purchases kullanımıyla ilgili gerekli açıklamaları kod üzerinden anlatmaya çalıştım. Umarım sizler için yararlı olmuştur.
Bir başka blog yazımda görüşmek üzere. Sağlıkla kalın.