Projelere dön

iOS

RenewExit

  • App Store’da
RenewExit Abonelikler ekranında aylık maliyet özeti, aktif planlar ve ücretsiz deneme bilgileri.

Genel bakış

RenewExit, abonelikleri ve ücretsiz denemeleri manuel olarak takip etmeyi; yenileme, iptal ve kalan erişim sürecini tek bir akış içinde yönetmeyi amaçlayan bir iOS uygulaması.

Problem

Abonelikler yalnızca yenileme tarihlerini takip etmekten ibaret değil. Ücretsiz denemeler, farklı iptal yöntemleri, iptal sonrasında devam eden erişim süreleri ve sürecin gerçekten tamamlanıp tamamlanmadığı farklı yerlerde takip edilmek zorunda kalabiliyor.

RenewExit, bu süreci tek bir yerde daha anlaşılır ve takip edilebilir hale getirme fikriyle ortaya çıktı.

Yaklaşım

Uygulamayı otomatik abonelik algılayan bir servis yerine, kullanıcının kontrolünde çalışan manuel ve local-first bir takip aracı olarak tasarladım.

Abonelik kaydı yalnızca başlangıç noktası. Kullanıcı bir abonelikten ayrılmak istediğinde Çıkış Planı adı verilen stateful bir süreç başlıyor. İptal veya yönetim yönteminin seçilmesi, ilgili rotanın açılması, sonucun kaydedilmesi ve varsa kalan erişim süresinin takip edilmesi birbirinden ayrı adımlar olarak ele alınıyor.

Seçili özellikler

  1. Abonelik ve Deneme Takibi

    Aboneliklerin ve ücretsiz denemelerin yenileme bilgilerini manuel olarak kaydetmeyi ve takip etmeyi sağlar.

  2. Çıkış Planları

    Bir abonelikten ayrılma sürecini tek seferlik bir aksiyon yerine adım adım ilerleyen bir süreç olarak takip eder.

  3. İptal / Yönetim Yöntemi Seçimi

    Aboneliğin nasıl yönetileceğine veya iptal edileceğine uygun rotanın seçilmesini sağlar.

  4. Sonuç ve Kalan Erişim Takibi

    İptal işleminin sonucunu ve aboneliğin erişime açık kalacağı süreyi ayrıca kaydetmeye imkân verir.

  5. Yerel Hatırlatıcılar

    Yaklaşan yenilemeler veya takip edilmesi gereken abonelikler için cihaz üzerinde hatırlatıcılar oluşturur.

Teknolojiler

  • Swift
  • SwiftUI
  • SwiftData
  • StoreKit
  • UserNotifications
  • LocalAuthentication

Geliştirme kararları

  1. Otomatik algılama yerine manuel giriş

    Banka hesabı veya e-posta gibi harici kaynaklara erişmek yerine aboneliklerin kullanıcı tarafından girilmesini tercih ettim. Böylece ürünün kapsamını daha basit tutarken kişisel verilere gereksiz erişim ihtiyacını da ortadan kaldırmayı hedefledim.

  2. İptal rotası ve iptal sonucu ayrı state’ler

    Bir iptal sayfasının açılması, aboneliğin gerçekten iptal edildiği anlamına gelmiyor. Bu nedenle “iptal yöntemine ulaşıldı” ile “iptal sonucu kaydedildi” durumlarını birbirinden ayırdım.

    Bu ayrım, uygulamanın gerçekleşmeyen bir işlemi yanlışlıkla tamamlanmış kabul etmesini önlüyor.

  3. Çıkış Planı kalıcı bir lifecycle olarak tutuluyor

    Çıkış Planlarını yalnızca iptal anında kullanılan geçici kayıtlar yerine kalıcı bir lifecycle ve timeline olarak ele aldım.

    Böylece iptal sonrasında devam eden erişim süresi ve daha önce tamamlanan süreçler de uygulama içinde takip edilebiliyor.

Öğrendiklerim

RenewExit üzerinde çalışırken teknik olarak çalışan bir uygulamanın tek başına yeterli olmadığını daha net gördüm. App Store süreci, ürünün farklılaşmasının ve kullanıcıya sunduğu akışın teknik uygulama kadar açık olması gerektiğini gösterdi.

Ayrıca local-first veri modeli, lifecycle tabanlı state yönetimi ve App Store review süreci konusunda daha fazla deneyim kazandım.

Proje bağlantısı

App Store’da görüntüle