יישום הצעות היכרות ב-iOS: משיכת מנויים חדשים

משיכת מנויים חדשים היא משימה מרכזית לכל אפליקציה, ו-Introductory Offers ב-iOS עוזרים לפתור אותה. אנו מגדירים הנחות לתקופת המנוי הראשונה באמצעות StoreKit 2 ו-App Store Connect, והצוות שלנו בודק זכאות כך שההצעה תוצג רק למי שעומד בתנאים. אנו מספקים פתרון turnkey—מההתקנה ועד לתמיכה—ומבטיחים פעילות אמינה של ה-paywall.

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

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 1734 השירותים
יישום הצעות היכרות ב-iOS: משיכת מנויים חדשים
בינוני
~3-5 ימים

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

שאלות נפוצות

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

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

הטמעת הצעות היכרות (הנחה לתקופה ראשונה) באפליקציות מובייל

הצעות היכרות הן כלי עוצמתי של StoreKit למשיכת מנויים חדשים. הנחיות הביקורת של App Store (סעיפים 4.2 ו-5.1) מסדירות את השימוש בהן. ללא הטמעה נכונה, המשתמש לא יראה את ההצעה, וההמרה יורדת. עם הגדרה נכונה, הצעת היכרות יכולה להגדיל את המרת המנויים ב-30–50%. אנו מבטיחים שה-paywall שלך יציג את ההצעה רק למי שבאמת זכאי. במאמר זה נסקור כיצד להגדיר ולבדוק זכאות, לשלב עם paywall, ולהימנע מטעויות נפוצות.

סוגי הצעות היכרות והגדרתן

Apple מציעה שלושה סוגים: freeTrial (חינם), payAsYouGo (הנחה על כל תקופה), ו-payUpFront (תשלום חד-פעמי עבור מספר תקופות). הבחירה תלויה במודל העסקי: freeTrial לניסיונות מוצר, payAsYouGo או payUpFront לרכישת לקוחות לטווח ארוך.

סוג תיאור דוגמה
freeTrial תקופת ניסיון חינם 7 ימים חינם
payAsYouGo הנחה על כל תקופה למשך N תקופות 3 חודשים ראשונים בהנחה
payUpFront תשלום חד-פעמי עבור N תקופות 12 חודשים במחיר מופחת

הצעת היכרות נוצרת ברמת המנוי: App Store Connect → Subscriptions → [מנוי] → Introductory Offers. ציין את הסוג, משך הזמן והמחיר. חשוב: ההצעה חלה רק על משתמשים שמעולם לא היו מנויים בקבוצת מנויים זו. Apple בודקת זאת בצד השרת. טעות נפוצה היא ציון משך זמן שגוי: עבור freeTrial, משך הזמן לא יכול להיות 0 ימים. משכי freeTrial אופייניים הם 3, 7 או 30 ימים.

כיצד לקרוא את ההצעה באמצעות StoreKit 2

ראשית, טען את המוצר ובדוק אם קיימת הצעת היכרות:

import StoreKit

// Загружаем продукт
let product = try? await Product.products(for: ["premium_monthly"]).first

// Проверяем наличие introductory offer
if let intro = product?.subscription?.introductoryOffer {
    switch intro.paymentMode {
    case .freeTrial:
        let days = intro.period.value
        let unit = intro.period.unit
        showFreeTrialBanner(days: days)
    case .payAsYouGo:
        showDiscountedPriceBanner(price: intro.displayPrice, period: intro.period)
    case .payUpFront:
        showUpFrontBanner(price: intro.displayPrice, duration: intro.subscriptionPeriod)
    @unknown default:
        break
    }
}

מדוע בדיקת זכאות היא קריטית

Apple בודקת זכאות בצד השרת — תיעוד המפתחים של Apple. import StoreKit // Загружаем продукт let product = try? await Product.products(for: ["premium_monthly"]).first // Проверяем наличие introductory offer if let intro = product?.subscription?.introductoryOffer { switch intro.paymentMode { case .freeTrial: let days = intro.period.value let unit = intro.period.unit showFreeTrialBanner(days: days) case .payAsYouGo: showDiscountedPriceBanner(price: intro.displayPrice, period: intro.period) case .payUpFront: showUpFrontBanner(price: intro.displayPrice, duration: intro.subscriptionPeriod) @unknown default: break } } קיים על כל מוצר ללא קשר לזכאות. לכן נדרשת בדיקה נוספת. StoreKit 2 מספק גישה להיסטוריית עסקאות:

// Проверяем статус подписки через Transaction
for await result in Transaction.currentEntitlements {
    if case .verified(let transaction) = result {
        if transaction.productID == "premium_monthly" {
            userHasBeenSubscriber = true
        }
    }
}

חלופה היא אימות בצד השרת באמצעות App Store Server API. השרת מחזיר product.subscription?.introductoryOffer והיסטוריה מלאה. זה אמין יותר אך מורכב יותר. כלל הזהב שלנו: החלטות UI בצד הלקוח, אימות זכאות בצד השרת. גישה זו מבטלת ניצול לרעה ושגיאות.

כיצד להטמיע הצעת היכרות: שלב אחר שלב

  1. צור את ההצעה ב-App Store Connect. ציין סוג, משך זמן ומחיר. בדוק את משך הזמן — עבור freeTrial הוא לא יכול להיות 0.
  2. טען את המוצר וקרא את ההצעה בקוד. השתמש ב-// Проверяем статус подписки через Transaction for await result in Transaction.currentEntitlements { if case .verified(let transaction) = result { if transaction.productID == "premium_monthly" { userHasBeenSubscriber = true } } } ובדוק את isInBillingRetryPeriod.
  3. בדוק זכאות. באמצעות Product.products(for:) או API של השרת. עבור iOS 15+, השתמש ב-introductoryOffer.
  4. בנה את ממשק ה-paywall. הצג באנר עם תנאי ההצעה אם המשתמש זכאי.
  5. בדוק. השתמש בקובץ תצורת StoreKit ב-Xcode כדי לדמות תרחישים ללא המתנה של 24 שעות.
  6. תעד והעבר לתמיכה. ציין אילו הצעות פעילות וכיצד הן מוצגות.

שימוש ב-RevenueCat

RevenueCat מטפל בבדיקת הזכאות. הקוד הופך לפשוט יותר:

Purchases.shared.getOfferings { offerings, error in
    if let intro = offerings?.current?.monthly?.product.introductoryDiscount {
        Purchases.shared.checkTrialOrIntroductoryPriceEligibility(
            productIdentifiers: ["premium_monthly"]
        ) { eligibilityDict in
            let eligible = eligibilityDict["premium_monthly"]?.status == .eligible
        }
    }
}

לפי הנתונים שלנו, מעבר ל-RevenueCat מקצר את זמן פיתוח לוגיקת המנויים פי 2–3 ומפחית שגיאות ב-70%. RevenueCat גם מטפל אוטומטית בשחזור רכישות והודעות.

הצגה בממשק ה-paywall

paywall טיפוסי מציג את ההצעה בתנאי:

struct PaywallView: View {
    let product: Product
    @State private var isEligibleForIntro = false

    var body: some View {
        VStack {
            if let intro = product.subscription?.introductoryOffer, isEligibleForIntro {
                IntroOfferBanner(offer: intro)
                    .transition(.opacity)
            }
            SubscriptionButton(product: product)
        }
        .task {
            await checkEligibility()
        }
    }

    func checkEligibility() async {
        isEligibleForIntro = await checkIntroEligibility()
    }
}

השוואת שיטות בדיקת זכאות

שיטה מורכבות אמינות המלצה
StoreKit 2 (Transaction.currentEntitlements) בינונית גבוהה (iOS בלבד) לאפליקציות פשוטות
App Store Server API גבוהה מקסימלית לפרויקטים מורכבים
RevenueCat נמוכה גבוהה פתרון אוניברסלי

טעויות נפוצות בהגדרת הצעות היכרות

  • משך freeTrial שגוי (לדוגמה, 0 ימים) — ההצעה לא תוחל.
  • התעלמות מזכאות — ההצעה מוצגת לכולם, מה שגורם לשגיאות רכישה.
  • חוסר בדיקות באמצעות קובץ תצורת StoreKit — דורש המתנה של 24 שעות לבדיקה חוזרת.
  • התעלמות מגרסת iOS: Transaction.currentEntitlements זמין רק מ-iOS 15. עבור גרסאות ישנות יותר, השתמש ב-API של השרת או בספרייה כמו RevenueCat.
  • שכחת עדכון ה-paywall כאשר מצב המנוי משתנה (לדוגמה, לאחר שחזור).

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

  • קריאה והצגה של הצעת ההיכרות מאובייקט eligibleForIntroOffer (StoreKit 2)
  • בדיקת זכאות באמצעות Purchases.shared.getOfferings { offerings, error in if let intro = offerings?.current?.monthly?.product.introductoryDiscount { Purchases.shared.checkTrialOrIntroductoryPriceEligibility( productIdentifiers: ["premium_monthly"] ) { eligibilityDict in let eligible = eligibilityDict["premium_monthly"]?.status == .eligible } } } או אימות שרת
  • רכיב UI ל-paywall עם הצגת הצעה מותנית
  • בדיקות באמצעות קובץ תצורת StoreKit ב-Xcode (sandbox ללא המתנה של 24 שעות)
  • רישום אנליטיקה: הצגת הצעה, המרה, סוג הצעה
  • תיעוד והעברת ידע לצוות שלך

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

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

יש לנו ניסיון של למעלה מ-5 שנים בפיתוח פתרונות מנויים ל-iOS ו-Android. המפתחים המוסמכים שלנו מבטיחים עמידה בהנחיות הביקורת של App Store.

מדוע לא ניתן להציע הצעת היכרות שוב?Apple בודקת זכאות בצד השרת: אם המשתמש כבר היה מנוי בקבוצת מנויים זו, ההצעה לא תוחל. זה מגן מפני ניצול לרעה ועומד בדרישות App Store.