Tüm makaleler
Deep dive7 dk okuma

Uygulamanız uygulama içi bir iade talebi sayfası gösterebilir, işte müşteri gönder'e dokunduktan sonra Apple ne yapıyor

Apple'ın uygulama içi iade talebi, müşterinin uygulamanızdan çıkmadan, Apple'ın oluşturup incelediği bir sayfada iade istemesine olanak tanır. İşte beginRefundRequest'in döndürdükleri, sunucunuzda başlattığı CONSUMPTION_REQUEST ve 48 saat sayaçları ve bu düğmeyi yayınlamaya değip değmeyeceği.

Bir kâğıt fişin ve bir madeni paranın yanında hesap ayarları ekranını gösteren bir akıllı telefon tutan bir el, müşterinin uygulamadan çıkmadan başlatabileceği uygulama içi bir iade talebini gösteriyor

Önemli noktalar

  • Apple'ın beginRefundRequest'i, Apple'ın kendi iade sayfasını uygulamanızın içinde sunan bir StoreKit 2 yöntemidir. Müşteri satın alma ayrıntılarını ve bir neden kodları listesini görür, birini seçer ve talep Apple'a gider. Formu siz oluşturmazsınız ve sonuca siz karar vermezsiniz.
  • Çağrı success ya da userCancelled durumu döndürür veya duplicateRequest ya da failed fırlatır. success durumu, App Store'un talebi aldığı anlamına gelir, onayladığı değil. success'te asla arayüzünüzde onaylanmış bir iade göstermeyin.
  • Müşteri gönderdikten sonra Apple onaylamak veya reddetmek için en fazla 48 saat alır. Tüketilebilir satın almalar için önce sunucunuza bir CONSUMPTION_REQUEST gönderir ve müşteri onay verdiyse kullanım verisiyle yanıt vermek için her zamanki 12 saatiniz vardır.
  • Sonuç, sunucunuza zaten aldığınız aynı akış olan bir App Store Server Notification olarak gelir. Onay bir REFUND bildirimidir, ret ise REFUND_DECLINED. Uygulama içi talep, tam olarak Apple'ın reportaproblem sayfasında başlatılan bir iade gibi bu akışa yönlenir.
  • Düğme iOS 15 ve iPadOS 15, Mac Catalyst 15 ve visionOS 1 sürümlerinden itibaren kullanılabilir, dolayısıyla bu sürümleri hedefleyen herhangi bir uygulama onu bugün sunabilir.
  • Finansal gerekçe şudur: itiraz edebileceğiniz bir iade, edemeyeceğiniz bir chargeback'ten iyidir. Müşteriyi Apple'ın akışında tutmak, kesin olan ve ücret taşıyan bir banka chargeback'i yerine yanıtlayabileceğiniz bir CONSUMPTION_REQUEST tetikler.
  • Apple'ın konumlandırma tavsiyesi, onu bir satın alma ekranından değil, hesap ayarlarından veya bir yardım menüsünden çağırmaktır, böylece mutsuz bir müşteri onu bulur ama iadeleri herkese duyurmamış olursunuz.

Apple, müşterinin uygulamanızdan hiç çıkmadan iade talep etmesine izin verir. Tek bir StoreKit çağrısı, beginRefundRequest, Apple'ın kendi iade sayfasını doğrudan arayüzünüzün içinde sunar, müşteri bir neden seçer ve talep inceleme için Apple'a gider. Formu siz oluşturmazsınız, paraya siz dokunmazsınız ve sonuca siz karar vermezsiniz. Elde ettiğiniz şey, hayal kırıklığına uğramış bir müşteriyi bankasına kaptırmak yerine, iade yolunu zaten bulunduğu yere koyabilmenin bir yoludur. Bu, uygulama içi iade talebidir ve düğmeyi yayınlayıp yayınlamayacağınıza karar vermeden önce anlamaya değer.

İşte gelirininiz için önemli olan kısım. Düğme kendi başına hiçbir şey iade etmez. Bir talep açar, Apple onaylamak veya reddetmek için en fazla 48 saat alır ve tüketilebilir satın almalar için önce sunucunuza bir CONSUMPTION_REQUEST gönderir. Yani bu sayfa bir bağış değildir. Zaten etkileyebileceğiniz o tam iade incelemesine giden bir hunidir ve bir anlaşmazlığı, itiraz edemeyeceğiniz bir chargeback'e dönüşmeden önce kart ağından geri çekebilir.

Uygulama içi iade talebi sayfası aslında nedir

beginRefundRequest, bir pencere sahnesindeki bir işlem için iade talebi sayfasını sunan bir StoreKit 2 yöntemidir. İmza kısadır: func beginRefundRequest(in scene: UIWindowScene) async throws -> Transaction.RefundRequestStatus. Onu çağırdığınızda sistem, müşterinin satın alma ayrıntılarını ve seçmeleri için bir neden kodları listesini içeren bir sayfa gösterir. O arayüzü Apple oluşturur ve kontrol eder. Siz sahneyi ve işlemi verirsiniz, başka bir şey değil.

Apple'ın onu nereye koyacağınıza dair rehberliği açıktır. Bu işlevi hesap ayarlarından veya bir yardım menüsünden çağırın, böylece iade isteyen bir müşteri onu destek arayacağı yerde bulur. iOS 15 ve iPadOS 15, Mac Catalyst 15 ve visionOS 1 ile geldi, dolayısıyla bu sürümleri hedefleyen herhangi bir uygulama onu bugün sunabilir.

Sayfayı açmanın iki yolu

İki giriş noktası vardır. Zaten elinizde tuttuğunuz belirli bir işlem üzerinde beginRefundRequest(in:) çağırabilirsiniz, bu da sayfayı yalnızca o satın almayla sınırlar. Müşterinin belirli bir ürünün satın alımını iade etmesini istediğinizde sayfayı ürün tanımlayıcısına göre de açabilirsiniz. Her iki durumda da sayfa, neden listesi ve karar Apple'a aittir. Sizin işiniz onu sunmak ve sonucu okumakla biter.

Çağrı ne döndürür ve neler ters gidebilir

Yöntem async throws olduğu için ya bir durum döndürür ya da bir hata fırlatır. İkisi de kısa listelerdir ve sayfa kapandıktan sonra arayüzünüzün doğru bir şey söylemesi için ikisini de ele almaya değer.

SonuçTürNe anlama gelir
successRefundRequestStatusApp Store iade talebini aldı. Gönderildi, onaylanmadı
userCancelledRefundRequestStatusMüşteri sayfayı göndermeden kapattı. Hiçbir şey gönderilmedi
duplicateRequestRefundRequestErrorApp Store'da bu satın alma için zaten bir iade talebi var
failedRefundRequestErrorGönderimin kendisi başarısız oldu. Müşterinin tekrar denemesine izin verin

Müşteri gönder'e dokunduktan sonra sunucunuzda ne olur

Sayfanın kapanması sürecin sonu değil, başlangıcıdır. Apple talebi inceler ve onaylamak veya reddetmek için en fazla 48 saat alır. Tüketilebilir bir uygulama içi satın alma için, karar vermeden önce App Store, kullanım verisi isteyen bir CONSUMPTION_REQUEST bildirimini sunucunuza gönderir. Müşteri bu veriyi paylaşmaya onay verdiyse Send Consumption Information uç noktası üzerinden yanıt verirsiniz. Onay vermediyse, Apple'ın kendi talimatı bildirime hiç yanıt vermemektir.

Apple karar verdiğinde sonuç, sunucunuza bir App Store Server Notification olarak iner. Bu, zaten aldığınız aynı akıştır ve uygulama içi talep, tam olarak bir müşterinin Apple'ın reportaproblem sayfasında başlattığı bir iade gibi bu akışa yönlenir. Talep uygulamanızın içinde başladı diye ele alışta hiçbir şey değişmez.

AşamaNe tetiklenirSizin hamlenizSayaç
Müşteri sayfayı gönderirbeginRefundRequest success döndürürKaydedin, iade edildi değil beklemede gösterinAnında
Yalnızca tüketilebilir, Apple önce sorarCONSUMPTION_REQUEST bildirimiMüşteri onay verdiyse tüketim verisini gönderin, yoksa sessiz kalınYanıtlamak için 12 saat
Apple onaylarREFUND bildirimiO işlem için erişim hakkını geri alınKarar için en fazla 48 saat
Apple reddederREFUND_DECLINED bildirimiSatışı koruyun, hiçbir şey değiştirmeyinKarar için en fazla 48 saat
An hourglass beside a smartphone and a paper receipt, illustrating the up-to-48-hour wait after a customer submits an in-app refund request to Apple

Düğme size neye mal olur ve neyi kurtarabilir

İtiraz edebileceğiniz bir iade, edemeyeceğiniz bir chargeback'ten iyidir

Uygulamanızın içinde bir iade yolu bulamayan bir müşteri pes etmez. Bankasına gider. Bir kart chargeback'i bankayla kesindir, bir anlaşmazlık ücreti taşır ve kararı hem sizin hem de Apple'ın elinden alır. Uygulama içi bir iade talebi aynı müşteriyi Apple'ın sisteminde tutar, orada tüketilebilir bir satın alma yanıtlayabileceğiniz bir CONSUMPTION_REQUEST ve etkileyebileceğiniz bir karar tetikler. İtiraz edilemeyen bir chargeback'i itiraz edilebilir bir Apple incelemesiyle takas etmek, düğme lehine olan tüm finansal argümandır.

Bir iadenin sürtünmesini azaltıyorsunuz

Dürüst karşı ağırlık şudur: görünür, tek dokunuşluk bir iade yolu, gömülü bir destek e-postasından daha fazla iade talebi üretir. Bunların bir kısmı asla gerçekleşmeyecekti. Bu gerçek bir maliyettir ve Apple'ın giriş noktasını satın alma ekranı yerine hesap ayarlarına veya bir yardım menüsüne koymanızı söylemesinin nedeni budur. Onu, yalnızca merak eden müşterinin değil, zaten mutsuz olan müşterinin bulmasını istersiniz.

Baştan sona işleyen maliyet, iade edilmiş bir hesaba hizmet vermektir

Karar hangi yönde çıkarsa çıksın, siz sonuca göre harekete geçene kadar teslimattaki sayaç dönmeye devam eder. İade edilmiş bir erişim hakkının canlı kaldığı her saat, arkasındaki gerçek maliyetleri ödemeyi sürdürürsünüz: hesaplama, model API çağrıları, depolama ve o müşterinin kullanımına bağlı herhangi bir içerik üreticisi veya ortak ödemesi. Uygulama içi talep bunu değiştirmez. REFUND bildiriminde hızlıca geri alma değiştirir. Düğme, sonunda ürettiği bildirimi ele alışınız kadar ucuzdur.

Uygulama içi iade talebini yayınlamalı mısınız

Onu satışın değil, desteğin yaşadığı yere koyun

Apple'ın konumlandırma rehberliğini izleyin. Hesap ayarları ve bir yardım menüsü doğru yuvalardır. Bir ödeme duvarının yanındaki bir iade bağlantısı, insanlara paralarını geri beklemeyi öğretir ve hiç sunmanız gerekmeyen o merak iadesini davet eder.

Ona güvenmeden önce tüm akışı sandbox'ta test edin

Tüm yolu sandbox'ta ve Xcode'un StoreKit testinde simüle edebilir, bir talebi beklemeden onaylandıya veya reddedildiye taşıyabilirsiniz. Bir onay sunucunuza bir REFUND bildirimi iletir ve bir ret REFUND_DECLINED iletir, böylece gerçek bir müşteri gönder'e dokunmadan önce işleyicinizin doğru tepki verdiğini kanıtlayabilirsiniz.

Her sonucu ele alın ve asla abartmayın

success'te beklemede gösterin, failed'de tekrar deneme sunun, userCancelled'da hiçbir şeyin değişmediğini söyleyin ve duplicateRequest'i müşterinin daha önceki talebinin hâlâ geçerli olduğuna dair sessiz bir not olarak ele alın. Zarar veren tek hata, elinizde yalnızca gönderilmiş bir talep varken müşteriye iadesinin tamamlandığını söylemektir.

RefundHalt sonrasını nasıl ele alır

Uygulama içi sayfa Apple'ındır. Ondan sonra geleni sizindir ve RefundHalt'un yürüttüğü kısım budur. Bir müşteri uygulamanızın içinden bir iade gönderdiğinde, RefundHalt tüketilebilir satın almalar için CONSUMPTION_REQUEST'i yakalar ve Apple'ın karar vermesine yardımcı olan kullanım kanıtıyla 12 saatlik pencere içinde yanıt verir. Apple karar verdiğinde, REFUND'da erişimi geri alır ve REFUND_DECLINED'da erişimi el değmemiş tutar, her biri tam işleme bağlıdır. İncelemeyi, kanıtı veya geri almayı elle bir telaşa bırakmadan, daha dostane uygulama içi iade yolunu sunma imkânı elde edersiniz.

Sık sorulan sorular

beginRefundRequest ne yapar?
Belirli bir işlem için Apple'ın iade talebi sayfasını uygulamanızın içinde sunar. Müşteri satın alma ayrıntılarını ve bir neden kodları listesini görür, birini seçer ve talep Apple'a gider. Yöntem success ya da userCancelled durumu döndürür veya duplicateRequest ya da failed fırlatır. Satın almanın kendisini iade etmez, çünkü Apple talebi inceler ve karar vermek için en fazla 48 saat alır.
Uygulama içi iade talebi parayı hemen iade eder mi?
Hayır. Bir success sonucu, App Store'un talebi aldığı anlamına gelir, onayladığı değil. Apple onaylamak veya reddetmek için en fazla 48 saat alır ve tüketilebilirler için önce bir CONSUMPTION_REQUEST bildirimi aracılığıyla sunucunuzdan kullanım verisi ister. Müşteriye success'te bir beklemede durumu gösterin, asla onaylanmış bir iade değil.
Hangi iOS sürümü uygulama içi iade talebini destekler?
iOS 15 ve iPadOS 15, Mac Catalyst 15 ve visionOS 1. StoreKit 2 yöntemi beginRefundRequest(in:) bu sürümlerden itibaren kullanılabilir, dolayısıyla iOS 15 veya sonrasını hedefleyen herhangi bir uygulama Apple'ın iade sayfasını uygulamanın içinden sunabilir.
Uygulama içi iade düğmesini nereye koymalıyım?
Apple'ın rehberliği, onu bir satın alma veya ödeme duvarı ekranından değil, hesap ayarlarından veya bir yardım menüsünden çağırmaktır. Bu, iade yolunu mutsuz bir müşterinin destek aradığı yere yerleştirir, üstelik zaten istemeyecek olan müşterilere iadeleri duyurmadan.
Uygulama içi bir iade, müşterinin bankasıyla iletişime geçmesinden daha mı iyi?
Genellikle evet, gelirininiz için. Bir banka chargeback'i kesindir ve bir ücret taşır, ayrıca hem Apple'ı hem de sizi karardan çıkarır. Uygulama içi bir iade talebi müşteriyi Apple'ın akışında tutar, orada tüketilebilir bir satın alma yanıtlayabileceğiniz bir CONSUMPTION_REQUEST ve etkileyebileceğiniz bir inceleme tetikler. İtiraz edilebilir bir iade, itiraz edilemeyen bir chargeback'ten iyidir.

Kaynaklar ve ek okumalar

RefundHalt

App Store ve Google Play için geri ödeme otomatik pilotu

Okumaya devam edin

Bir sonraki geri ödeme talebi şimdiden yolda.

İtiraz edemediğiniz bir geri ödemeyle ilgili başka bir destek e-postasını okumak için gereken sürede RefundHalt'ı kurun.