Bildirimden ödeme yapma

Hızlı ödemeler demo entegrasyonu

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.

Örnek özel bildirim düzeni
Şekil 1. Örnek özel bildirim düzeni.

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:

Google Pay düğmesi içeren örnek özel bildirim
Şekil 2. Google Pay düğmesi içeren örnek özel bildirim.

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.