Bazı işletmeler, bir hizmete erişmek veya hizmete yeniden erişim kazanmak için hızlı ödeme yapabilmeyi gerektirir (örneğin: mobil veri planları, ev faturaları, hizmet yükseltmeleri veya daha önce reddedilen ödemeler). İşletmeler, çoğu zaman kullanıcıları mobil cihazlarında bu etkinlikler hakkında bilgilendirir. Ancak gerçek bir ödeme yapmak için kullanıcının bağlamı değiştirmesi ve zaman alan formlarda gezinmesi gerekir. Bu durum, ödemenin tamamlanma olasılığını önemli ölçüde azaltır.
Bu kalıp, doğrudan bildirime ödeme işlemi eklemenize yardımcı olur. Böylece kullanıcılar hemen işlem yapabilir ve ödemeleri yalnızca iki dokunuşla gerçekleştirebilir. Bu kılavuzda, Android uygulamanızda benzer bir deneyim oluşturmayı öğreneceksiniz.
Şartlar
Bu kılavuzda, Android uygulamanızda etkin bir Google Pay entegrasyonu olduğu varsayılmaktadır. Henüz entegrasyon eklemediyseniz eğitimimizden veya adım adım açıklamalı codelab'imizden yararlanarak başlayabilirsiniz.
Yapı taşları
Google Pay düğmesini bildirimlerinize eklemek için Android'de iki temel yapı taşı gerekir:
Özel bildirim düzenleri
Android'deki normal bildirimler, birden fazla görsel bağlama uyum sağlayan iyi tanımlanmış bir yapıya sahiptir. Standart şablonu kullanarak, cihazın yönü, biçim faktörü ve işletim sistemi sürümünden bağımsız olarak bildirimlerinizin doğru şekilde gösterilmesini sağlayabilirsiniz. Bu nedenle, kullanıcıları dikkatlerini çekmesi gereken etkinlikler hakkında bilgilendirmek için bu şablonu kullanmanız önerilir.
Standart düzenlerin ihtiyaçlarınızı karşılamadığı durumlarda özel bildirim düzenlerini kullanarak kendi düzeninizi sağlayabilirsiniz. Bu kılavuzda, bildiriminize Google Pay düğmesi eklemek ve kullanıcılarınızın doğrudan bildirimden ödeme başlatmasına izin vermek için özel bir düzenden yararlanacaksınız.
Etkinlikler
Etkinlikler uygulamanızdaki işlevleri kullanıcılarınıza sunmanıza yardımcı olur. Etkinlikler genellikle ilişkili bir kullanıcı arayüzüne sahiptir ve uygulamanızdaki göz atılabilir ekran hiyerarşisini oluşturur.
Kullanıcı Google Pay düğmesine bastığında Google, işlemi tamamlamaları için kullanıcılara mevcut ödeme yöntemlerinin bir listesini döndürür. Bu ödeme sayfası, bir barındırma etkinliğinden başlatılmalıdır. Ödeme sayfasının doğrudan bildirimin üzerinde gösterildiği izlenimini oluşturmak için şeffaf bir etkinlik kullanabilirsiniz.
Bildiriminiz için bir düzen tanımlayın
Bildirim düzeni oluşturma süreci, normal bir etkinlik için kullanıcı arayüzünü tanımlama sürecine çok benzer. Bildirimler, düzeninizdeki öğeleri yönetmek için widget'lar gibi RemoteViews sınıfını kullanır. Bu durum, normal düzenlere kıyasla desteklenen görünüm listesini azaltır.
Başlamak için res/layout/ klasörünüzde, bildiriminizi nasıl göstermek istediğinizi açıklayan bir düzen kaynak dosyası oluşturun. Referans için örnek uygulamadaki
notification_account_top_up.xml bölümüne göz atın.
Google Pay düğmesini ekleme
Düzeniniz hazır olduğunda son adım, Google Pay düğmesini eklemektir. Bunu yapmak için önceden oluşturulmuş Google Pay öğeleri koleksiyonundan uygun düğme kaynağını düzen XML dosyanıza eklemeniz yeterlidir. Bu öğeler, birden fazla ekran boyutu ve çözünürlüğün yanı sıra dile uyum sağlayan ve Google Pay markalama kurallarına uyan düğme için grafik kaynakları içerir. Bu öğeleri doğrudan marka kuralları bölümünden indirebilirsiniz.
<include android:id="@+id/googlePayButton" layout="@layout/buy_with_googlepay_button" android:layout_width="wrap_content" android:layout_height="48sp" />
Artık düzeninizin tasarım görünümüne baktığınızda Google Pay düğmesini görebilirsiniz:
Bildirimi tetikleme
Uygulamanızdaki veya hizmetinizdeki etkileşim akışına bağlı olarak, bildirimi farklı etkinliklere yanıt olarak gönderebilirsiniz. Yaygın bir yöntem, mesajlaşma hizmeti kullanarak arka uç sunucularınızdan anlık bildirim göndermektir. Android uygulamanıza henüz push işlevini eklemediyseniz Firebase Cloud Messaging ve nasıl başlayacağınızla ilgili bu harika eğitime göz atın.
Görünümü oluşturma ve ayarlama
Bildirim düzenini ve içerdiği görünümleri başlatmak için süreç, normal etkinliklerden biraz farklı işler. Hem görünümlerin oluşturulmasını hem de kullanıcı etkileşimine verilen yanıtı ayrı ayrı yapılandırın. Durum her güncellendiğinde bildirimi yeniden çizmeniz gerekir.
İlk olarak, düzen hiyerarşisini tutacak bir RemoteViews nesnesi oluşturun:
Kotlin
val notificationLayout = RemoteViews(packageName, R.layout.large_notification)
Java
RemoteViews notificationLayout = new RemoteViews(packageName, R.layout.large_notification);
Artık temel görünümlerde (düğmeler, metinler, resimler vb.) değişiklik yapmak için notificationLayout nesnesini kullanabilirsiniz. Örneğin, bu nesnelerin stilini değiştirebilir veya kullanıcı etkileşimine yanıt verecek şekilde yapılandırabilirsiniz. Bu örnekte, ödeme akışını başlatmak için Google Pay düğmesi dokunma etkinliklerini yakalar:
Kotlin
val selectOptionIntent = Intent(context, PaymentNotificationIntentService::class.java) selectOptionIntent.action = ACTION_SELECT_PREFIX + option notificationLayout.setOnClickPendingIntent(buttonId, PendingIntent.getService( context, 0, selectOptionIntent, PendingIntent.FLAG_UPDATE_CURRENT))
Java
Intent payIntent = new Intent(context, PaymentTransparentActivity.class); payIntent.setAction(ACTION_PAY_GOOGLE_PAY); payIntent.putExtra(OPTION_PRICE_EXTRA, OPTION_PRICE_CENTS.get(selectedOption)); notificationLayout.setOnClickPendingIntent( R.id.googlePayButton, pendingIntentForActivity(context, payIntent));
Bu örnekte, ödeme sayfasını gösteren Intent, Intent'nın amacını belirleyen ve seçilen öğenin fiyatı gibi ek bilgiler içeren bir işlem içerir. Ayrıca, Intent, bir etkinliği Google Pay düğmesiyle ilişkilendirir. Böylece, kullanıcı düğmeye her dokunduğunda Intent yürütülür ve ödeme etkinliği ön plana çıkarılır.
Bildirimi göster
Bildirimi oluşturup yapılandırdıktan sonraki son adım, bildirimi kullanıcıya göstermektir. Bunu yapmak için yukarıda tanımlanan parametrelerle ve nasıl davranacağını belirlemek üzere ek yapılandırmayla bir bildirim nesnesi oluşturun:
Kotlin
val notification = NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(context.getString(R.string.notification_title)) .setContentText(context.getString(R.string.notification_text)) .setCustomBigContentView(notificationLayout) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setAutoCancel(false) .setOnlyAlertOnce(true) .build()
Java
Notification notification = new NotificationCompat.Builder(context, NOTIFICATION_CHANNEL_ID) .setSmallIcon(R.mipmap.ic_launcher) .setContentTitle(context.getString(R.string.notification_title)) .setContentText(context.getString(R.string.notification_text)) .setCustomBigContentView(notificationLayout) .setPriority(NotificationCompat.PRIORITY_DEFAULT) .setAutoCancel(false) .setOnlyAlertOnce(true) .build();
Bu yapılandırmadaki bazı özellikler bu bildirimin nasıl çalıştığını gösterirken diğerleri, tercihinize ve kullanım alanlarınıza bağlı olarak uygulamalarınızda farklılık gösterebilir. Bu alanlardan bazıları şunlardır:
| Alan | Değer | Açıklama |
|---|---|---|
| Bildirim kanalı | NOTIFICATION_CHANNEL_ID |
Android 8.0 (API düzeyi 26) sürümünden başlayarak, tüm bildirimleri bir kanala atamanız gerekir. Kanallar, bildirimleri kullanıcıların yönetebileceği kategorik konular halinde gruplandırır. Android dokümanlarından bildirim kanalları hakkında daha fazla bilgi edinebilirsiniz. |
| Özel büyük içerik görünümü | notificationLayout |
Daha önce hazırladığınız düzen, bildirimle burada bağlanır. |
| Otomatik iptal | false |
Bildiriminizi etkileşimli hale getirirseniz (örneğin, bu örnekte kullanılan bildirim gibi) kullanıcının içindeki görünümlerden herhangi birine dokunduğunda bildirimin otomatik olarak kapatılmaması için otomatik iptal parametresini false olarak ayarlayabilirsiniz. |
| Yalnızca bir kez uyar | true |
Bu bildirim, kullanıcı girişine göre tepki verir. Bildirim güncellendiğinde ses, istem ve titreşim olmaması için bu parametreyi true olarak ayarlayın. |
Bildirimlerle ilgili diğer yapılandırmalar ve genel kavramlar hakkında bilgi edinmek için Android dokümanlarındaki özel bildirimler ve genel bakış bölümlerine göz atın.
Son olarak, bildirimi tetiklemek ve görüntülemek için daha önce oluşturulan notification nesnesini iletmek üzere notify yöntemini kullanın:
Kotlin
NotificationManagerCompat.from(context).notify(NOTIFICATION_ID, notification)
Java
NotificationManagerCompat.from(context).notify(NOTIFICATION_ID, notification);
NOTIFICATION_ID, bildirimi tanımlayan rastgele bir tam sayıdır ve daha sonra güncellemek veya kaldırmak için gereklidir.
Ödeme yapın
Kullanıcı Google Pay düğmesine dokunduğunda, ödeme sayfasını gösterin. Böylece kullanıcılarınız işlemi tamamlamak için bir ödeme yöntemi seçebilir. Google Pay API'lerini kullanarak ödeme sayfasını bir etkinliğin üzerinde gösterebilirsiniz.
Bildirim yeni bir ödeme süreci başlattığı için bu etkinliği şeffaf hale getirin. Böylece kullanıcılar, işlemin uygulamanızı açmadan tamamlandığı izlenimine kapılır. Bu etkinlik için onCreate yöntemine göz atın:
Kotlin
override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) // Dismiss the notification UI if the activity was opened from a notification if (Notifications.ACTION_PAY_GOOGLE_PAY == intent.action) { sendBroadcast(Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)) } // Initialise the payments client startPayment() }
Java
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Dismiss the notification UI if the activity was opened from a notification if (Notifications.ACTION_PAY_GOOGLE_PAY.equals(getIntent().getAction())) { sendBroadcast(new Intent(Intent.ACTION_CLOSE_SYSTEM_DIALOGS)); } // Initialise the payments client startPayment(); }
Gördüğünüz gibi, bu etkinlikte henüz pek bir şey olmuyor. ACTION_CLOSE_SYSTEM_DIALOGS sabitini kullanarak yayın yapıldığında bildirim menüsü kapatılır. Bu etkinliğe yalnızca bildirimdeki Google Pay düğmesi üzerinden erişildiğini ve yayın olmadan bildirim iletişim kutusunun açık kaldığını unutmayın.
Bunun dışında, bu etkinliğin tek ihtiyacı olan işlem, ödeme sayfasını göstermektir. Bu işlem, showPaymentsSheet yöntemiyle başlatılır. Ardından, Google Pay API'sinde loadPaymentData yöntemini çağırmanız yeterlidir. Etkinlikteki tüm mantığı keşfetmek için örnek uygulamadaki
PaymentTransparentActivity.java
dosyasına göz atın.