מסך ניהול מנויים לאפליקציות מובייל: פיתוח

משתמשים מבטלים לעתים קרובות מנויים מבלי להבין את התנאים, ועסקים מאבדים הכנסות. אנו מפתחים מסך ניהול מנויים שהופך את התהליך לשקוף ועוזר לשמר לקוחות. הצוות שלנו מספק את הפרויקט במפתח מלא—מניתוח תרחישים ועד אינטגרציה עם מערכות תשלום ותמיכה מתמשכת.

פיתוח ותמיכה בכל סוגי היישומים הניידים:

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות B2B, מרקטפלייסים, בורסות מקוונות, שירותי קאשבק, בורסות, פלטפורמות דרופשיפינג, תוכניות נאמנות, משלוחי מזון ומוצרים, מערכות תשלום.
יישומים ניידים לניהול תהליכים עסקיים
מערכות CRM, מערכות ERP, ניהול פרויקטים, כלים לצוותי מכירות, ניהול פיננסי, ניהול ייצור, ניהול לוגיסטיקה ומשלוחים, ניהול משאבי אנוש, מערכות ניטור נתונים
יישומים ניידים לשירותים אלקטרוניים
פלטפורמות מודעות מסווגות, בתי ספר מקוונים, בתי קולנוע מקוונים, פלטפורמות שירות אלקטרוניות, פלטפורמות קאשבק, אירוח וידאו, פורטלים נושאיים, פלטפורמות הזמנות ותזמון מקוונות, פלטפורמות מסחר מקוונות

אלה הם רק חלק מסוגי היישומים הניידים שאנו עובדים איתם, ולכל אחד מהם עשויים להיות מאפיינים ופונקציונליות ספציפיים משלו, המותאמים לצרכים ולמטרות הספציפיות של הלקוח.

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
מסך ניהול מנויים לאפליקציות מובייל: פיתוח
פשוט
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אפליקציית מובייל עבור FEEDME
    פיתוח אפליקציית מובייל עבור FEEDME
    971
  • פיתוח אפליקציית מובייל עבור XOOMER
    פיתוח אפליקציית מובייל עבור XOOMER
    868
  • פיתוח אפליקציית מובייל עבור RHL
    פיתוח אפליקציית מובייל עבור RHL
    1288
  • פיתוח אפליקציית מובייל עבור ZIPPY
    פיתוח אפליקציית מובייל עבור ZIPPY
    1143
  • פיתוח אפליקציית מובייל עבור Affhome
    פיתוח אפליקציית מובייל עבור Affhome
    1076
  • פיתוח אפליקציית מובייל עבור חברת FLAVORS
    פיתוח אפליקציית מובייל עבור חברת FLAVORS
    677

מסך ניהול מנויים מעוצב בצורה גרועה מאיץ ביטולים — עד 40% מהמשתמשים נוטשים מבלי להבין מה הם מפסידים. אנו בונים מסכים שקוראים סטטוס בזמן אמת באמצעות StoreKit 2 ב-iOS ו-Google Play Billing Library 6 באנדרואיד, משלבים תקופת חסד, הצעות שימור וכפתור ניהול מנויים מנוהל על ידי המערכת. הגישה שלנו מפחיתה נטישה ומעלה את שיעורי החידוש. עם ניסיון של 5+ שנים במודלי מנויים ויותר מ-20 מסכים שיושמו עבור אפליקציות עם 10k–500k משתמשים פעילים, אנו מכירים את הניואנסים של הפלטפורמות ועוזרים להימנע מדחיות ב-App Review (הנחיה 3.1.2).

אילו נתונים להציג

קבוצה מינימלית:

  • התוכנית הנוכחית: שם, מחיר, תקופה
  • תאריך החיוב הבא או תאריך התפוגה (אם בוטל)
  • סטטוס: פעיל / מבוטל (גישה עד) / תקופת חסד / ניסיון חיוב חוזר
  • כפתור להחלפת תוכנית (שדרוג/הורדה)
  • קישור למסך הביטול המערכתי של Apple/Google

ללא הצגת תקופת החסד אתה מאבד עד 30% מהחידושים — משתמשים פשוט לא מספיקים לעדכן את הכרטיס שלהם. שימור משתמש עולה פי 5 פחות מאשר רכישת משתמש חדש, כך שההשקעה בתהליך הביטול מחזירה את עצמה בתוך החודש הראשון. הצגת סטטוס תקופת החסד עם באנר ייעודי מפחיתה חרדת משתמשים ומעלה את הסבירות לחידוש.

כיצד אנו קוראים את מצב המנוי (StoreKit 2)

import StoreKit

struct SubscriptionInfo {
    let productID: String
    let displayName: String
    let price: String
    let renewalDate: Date?
    let expirationDate: Date?
    let willAutoRenew: Bool
    let state: Product.SubscriptionInfo.RenewalState
    let isInGracePeriod: Bool
}

func loadSubscriptionInfo(productIds: [String]) async -> SubscriptionInfo? {
    guard let product = try? await Product.products(for: productIds).first,
          let status = try? await product.subscription?.status.first else {
        return nil
    }
    let renewalInfo = try? status.renewalInfo.payloadValue
    let transaction = try? status.transaction.payloadValue
    return SubscriptionInfo(
        productID: product.id,
        displayName: product.displayName,
        price: product.displayPrice,
        renewalDate: renewalInfo?.renewalDate,
        expirationDate: transaction?.expirationDate,
        willAutoRenew: renewalInfo?.willAutoRenew ?? false,
        state: status.state,
        isInGracePeriod: status.state == .inGracePeriod
    )
}

import StoreKit struct SubscriptionInfo { let productID: String let displayName: String let price: String let renewalDate: Date? let expirationDate: Date? let willAutoRenew: Bool let state: Product.SubscriptionInfo.RenewalState let isInGracePeriod: Bool } func loadSubscriptionInfo(productIds: [String]) async -> SubscriptionInfo? { guard let product = try? await Product.products(for: productIds).first, let status = try? await product.subscription?.status.first else { return nil } let renewalInfo = try? status.renewalInfo.payloadValue let transaction = try? status.transaction.payloadValue return SubscriptionInfo( productID: product.id, displayName: product.displayName, price: product.displayPrice, renewalDate: renewalInfo?.renewalDate, expirationDate: transaction?.expirationDate, willAutoRenew: renewalInfo?.willAutoRenew ?? false, state: status.state, isInGracePeriod: status.state == .inGracePeriod ) } מציין האם חידוש אוטומטי פעיל או מבוטל. אם renewalInfo.willAutoRenew, הגישה נמשכת עד false.

השוואה: StoreKit 2 לעומת Play Billing 6

פרמטר iOS (StoreKit 2) אנדרואיד (Play Billing 6)
קריאת סטטוס expirationDate (SubscriptionInfo.state, .subscribed וכו') .inGracePeriod + BillingClient.queryPurchasesAsync()
תקופת חסד אוטומטית דרך purchaseState דורש בדיקת .inGracePeriod ו-acknowledgementState
שדרוג/הורדה purchaseTime Product.subscription?.update() עם SKU מעודכן
מסך מערכתי BillingClient.launchBillingFlow() Deeplink ל-Google Play
הצעה שיווקית AppStore.showManageSubscriptions מסוג SubscriptionOffer או .introductory .promotional

דוגמת רכיב SwiftUI

struct SubscriptionManagementView: View {
    @StateObject private var viewModel = SubscriptionManagementViewModel()
    var body: some View {
        ScrollView {
            VStack(alignment: .leading, spacing: 24) {
                if let info = viewModel.subscriptionInfo {
                    CurrentPlanCard(info: info)
                    if info.state == .inGracePeriod {
                        GracePeriodWarning()
                    }
                    if info.willAutoRenew, let date = info.renewalDate {
                        Text("Следующее списание: \(date.formatted(.dateTime.day().month().year()))")
                            .foregroundStyle(.secondary)
                    } else if let date = info.expirationDate {
                        Text("Доступ активен до: \(date.formatted(.dateTime.day().month().year()))")
                            .foregroundStyle(.secondary)
                    }
                    PlanPickerSection(currentPlan: info.productID)
                }
                ManageButton()
            }
            .padding()
        }
        .task {
            await viewModel.load()
        }
    }
}

מדוע כפתור ניהול המנויים המערכתי נדרש

Apple מחייבת גישה למסך המערכתי (הנחיה 3.1.2). בלעדיו — דחייה. השתמש ב-showManageSubscriptions כדי לפתוח את מסך ניהול המנויים המערכתי — תיעוד המפתחים של Apple. היישום פשוט:

Button("Управление подпиской в App Store") {
    Task {
        try? await AppStore.showManageSubscriptions(in: windowScene)
    }
}

באנדרואיד — deeplink ל-Google Play:

val intent = Intent(Intent.ACTION_VIEW).apply {
    data = Uri.parse("https://play.google.com/store/account/subscriptions?sku=premium_monthly&package=${packageName}")
}
startActivity(intent)

כיצד אנו מעצבים את תהליך הביטול

שיטות השימור הטובות ביותר בעת ניסיון ביטול:

  1. לפני הפנייה למסך המערכתי, הצג רשימת תכונות שהמשתמש יפסיד.
  2. אם המנוי פעיל זמן רב (3+ חודשים), הצע השהיה (נתמך באופן טבעי באנדרואיד).
  3. למשתמשים עם היסטוריה ארוכה, הצג הצעה שיווקית עם הנחה.

זו לא תבנית אפלה — זו תזכורת כנה. אל תגזים: לכל היותר מסך אישור אחד. הסטטיסטיקות שלנו: שימור לאחר הצעה שיווקית הוא 60%. הצעות שיווקיות יכולות לייצר עד 15% הכנסה נוספת. אם המשתמש עדיין עוזב, תעד את הסיבה באמצעות אנליטיקה כדי לשפר את המוצר.

השוואה: מסך בסיסי לעומת מסך שימור

פרמטר מסך בסיסי מסך עם שימור
קריאת סטטוס StoreKit 2 / Play Billing + תקופת חסד + ניסיון חיוב חוזר
תצוגה תוכנית, תאריך, סטטוס + רשימת תכונות, הצעה שיווקית
תהליך ביטול רק מסך מערכתי מסך מערכתי + מסך שני עם בחירת השהיה/הנחה
זמן פיתוח 2–3 ימים 4–5 ימים
משתמשים שנשמרו 10–15% 40–60%

מה כלול בעבודה

  • קריאת סטטוס באמצעות StoreKit 2 / Google Play Billing Library 6
  • רכיב תצוגה: תוכנית, תאריך, סטטוס, תקופת חסד
  • מחליף תוכניות (שדרוג/הורדה) עם תיאור תנאים
  • שילוב של BillingFlowParams.SubscriptionUpdateParams / Play Store deeplink
  • תהליך ביטול אופציונלי עם הצעת שימור
  • תיעוד לרכיבים ולארכיטקטורת מסך המנויים
  • תמיכה ל-14 יום לאחר המסירה

לוח זמנים ועלות

2–3 ימים למסך בסיסי עם סטטוס בזמן אמת. עם תהליך ביטול מורכב והצעות שימור — עד 5 ימים. העלות מחושבת באופן אישי. קבל ייעוץ — נעריך את הפרויקט שלך.

צור קשר כדי לדון בצרכי ניהול המנויים שלך. נתאים פתרון ללוגיקה העסקית שלך.