הטמעת מנוי שיתוף משפחתי באפליקציית iOS

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

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

יישומים ניידים למידע ובידור
אפליקציות חדשות, משחקים, מדריכים, קטלוגים מקוונים, אפליקציות מזג אוויר, אפליקציות כושר ובריאות, אפליקציות נסיעות, אפליקציות חינוכיות, רשתות חברתיות ומסנג'רים, חידונים, בלוגים ופודקאסטים, פורומים, אגרגטורים
יישומים ניידים למסחר אלקטרוני
חנויות מקוונות, אפליקציות 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

הטמעת מנוי Family Sharing באפליקציית iOS

אנו מיישמים מנויי Family Sharing באפליקציות iOS באמצעות StoreKit 2, תוך הבטחת בדיקות הרשאות נכונות וטיפול בביטולי גישה. גישת משפחה למנויים היא תכונה הנתמכת על ידי App Store, אך היישום שלה גורם לעיתים קרובות לבעיות. בן משפחה אחד רוכש מנוי, ועד 6 אחרים מקבלים גישה אוטומטית. עם זאת, אם האפליקציה מטפלת בצורה לא נכונה בביטול גישה כאשר משתמש עוזב את המשפחה, הגישה נשארת—מה שגורם לאובדן הכנסות (עד 30% בחלק מהפרויקטים). כמפתחים עם ניסיון של למעלה מ-5 שנים ועשרות רכישות בתוך האפליקציה שיושמו, אנו פותרים בעיה זו במפתח פתוח. במאמר זה, נעבור על התצורה הנכונה של Family Sharing באמצעות StoreKit 2, בדיקות וטעויות אופייניות.

יישום שלב אחר שלב

  1. הפעלת Family Sharing ב-App Store Connect – עבור מוצר המנוי שלך, הפעל את Family Sharing בהגדרות רכישה בתוך האפליקציה.
  2. בדיקת הרשאות בעת ההפעלה – השתמש ב-ownershipType כדי לעבור על עסקאות מאומתות ולבדוק .purchased.
  3. הגדרת מאזין רציף – צור משימה שמאזינה ל-.familyShared כדי לטפל בביטולי גישה באופן מיידי.
  4. הענקת או ביטול גישה – בהתבסס על Transaction.currentEntitlements ו-for await verificationResult in Transaction.currentEntitlements { switch verificationResult { case .verified(let transaction): if transaction.productID == "com.app.premium" { switch transaction.ownershipType { case .purchased: grantAccess(source: .directPurchase) case .familyShared: grantAccess(source: .familySharing) @unknown default: break } } case .unverified: // не доверяем транзакции — логируем, не даём доступ break } } , עדכן את מצב ההרשאות של האפליקציה שלך.
  5. בדיקה עם חשבונות Sandbox – צור מספר מזהי Apple לבדיקה, קבץ אותם למשפחה, ובדוק תרחישים של רכישה, גישה ויציאה.

כיצד פועלת בדיקת Family Sharing באמצעות StoreKit 2?

ב-StoreKit 2, כל עסקה מכילה שדה .familyShared: revocationDate (נרכש על ידי המשתמש) או Transaction.currentEntitlements (התקבל דרך המשפחה). האפליקציה חייבת לבדוק את שתי האפשרויות בעת ההפעלה ולהאזין ברציפות לעדכונים. הנה בדיקה בסיסית באמצעות Transaction.updates:

for await verificationResult in Transaction.currentEntitlements {
    switch verificationResult {
    case .verified(let transaction):
        if transaction.productID == "com.app.premium" {
            switch transaction.ownershipType {
            case .purchased:
                grantAccess(source: .directPurchase)
            case .familyShared:
                grantAccess(source: .familySharing)
            @unknown default:
                break
            }
        }
    case .unverified:
        // не доверяем транзакции — логируем, не даём доступ
        break
    }
}

כדי להפעיל Family Sharing עבור מנוי, עליך להפעיל אותו ב-App Store Connect. בהגדרות רכישה בתוך האפליקציה, מצא את המוצר והפעל את המתג "Family Sharing" → "מופעל לכל החברים". פעולה זו מתבצעת פעם אחת ואינה מבטלת מנויים שכבר נרכשו.

מדוע מתרחשת חוסר סנכרון בגישה לאחר יציאה ממשפחה?

הטעות העיקרית היא שמירת סטטוס המנוי במטמון ללא בדיקת תקפותו. כאשר משתמש עוזב קבוצת משפחה, עסקת func listenForTransactionUpdates() { Task { for await verificationResult in Transaction.updates { if case .verified(let transaction) = verificationResult { if transaction.revocationDate != nil { revokeAccess() } else { await transaction.finish() grantAccess() } } } } } מקבלת currentEntitlements. .familyShared מפסיק להחזיר אותה, אך אם האפליקציה שומרת את סטטוס הפרימיום ב-UserDefaults או Keychain, הגישה נשארת. הניסיון שלנו מראה שעד 30% ממקרי הגישה המשפחתית מכילים בעיה זו. יישומים קודמים עם StoreKit 1 דרשו אימות בצד השרת, מה שהכפיל את העלות.

הפתרון הנכון הוא להאזין ל-ownershipType ברציפות, לא רק בעת הפעלת האפליקציה:

func listenForTransactionUpdates() {
    Task {
        for await verificationResult in Transaction.updates {
            if case .verified(let transaction) = verificationResult {
                if transaction.revocationDate != nil {
                    revokeAccess()
                } else {
                    await transaction.finish()
                    grantAccess()
                }
            }
        }
    }
}

קוד זה רץ בעת הפעלת האפליקציה ונשאר פעיל לכל משך חיי התהליך. בלעדיו, אפילו בדיקת in_app[].is_in_family_sharing בכל פתיחה עלולה לפספס ביטול גישה אם האפליקציה לא מופעלת מחדש.

מה חשוב בבדיקת Family Sharing?

בדיקה ב-Xcode Sandbox דורשת מספר מזהי Apple לבדיקה המקובצים למשפחה. ב-App Store Connect → משתמשים וגישה → בודקי Sandbox, צור לפחות שני משתמשים, ולאחר מכן הגדר Family Sharing ב-Sandbox שם. ללא שלב זה, לא תוכל לדמות עסקאות ownershipType. אנו מבטיחים כיסוי מלא—אנו בודקים תרחישים: רכישה על ידי המשתמש הראשי, גישה על ידי בני משפחה, יציאה מהמשפחה וכניסה חוזרת.

לשם הבהירות, התרחישים מסוכמים בטבלה:

תרחיש פעולה תוצאה צפויה
המשתמש הראשי רוכש מנוי רכישה באמצעות StoreKit 2 עסקה עם ownershipType == .purchased
בן משפחה מקבל גישה אוטומטית באמצעות Family Sharing עסקה עם ownershipType == .familyShared
בן משפחה עוזב את הקבוצה יציאה דרך הגדרות Apple ID revocationDate מוגדר, הגישה מבוטלת
כניסה חוזרת למשפחה חזרה לקבוצה עסקת familyShared חדשה (אם המנוי עדיין פעיל)

StoreKit 1 לעומת StoreKit 2: מה לבחור?

ה-API הישן (SKPaymentTransaction) אינו מספק Transaction.updates. כדי לבדוק עסקאות משותפות למשפחה ב-StoreKit 1, יש צורך באימות קבלה בצד השרת—נתח את שדה ownershipType. זה מסבך את הארכיטקטורה ומגדיל את זמן הפיתוח. StoreKit 2 מהיר פי 2-3 ליישום ואמין פי 5 בשל טיפול מובנה בביטולי גישה.

היבט StoreKit 1 StoreKit 2
בדיקת ownershipType אימות קבלה בצד השרת שדה Transaction.updates בעסקה
מורכבות גבוהה (נדרש צד שרת) נמוכה (צד לקוח, ללא שרת)
תגובה לביטול גישה דורש מאזין נפרד + סנכרון שרת Transaction.updates מובנה
תמיכה ב-Swift Concurrency לא (רק @escaping) כן (async/await)

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

שאלות נפוצות

כיצד להפעיל Family Sharing עבור מנוי?

ב-App Store Connect, בהגדרות רכישה בתוך האפליקציה, הפעל את מתג Family Sharing עבור המוצר. לאחר השמירה, המוצר הופך לזמין לשיתוף משפחתי. לא ניתן לבטל פעולה זו עבור מנויים שכבר נרכשו.

מדוע המנוי נעלם לאחר יציאה ממשפחה?

כאשר משתמש עוזב קבוצת משפחה, עסקת .familyShared מקבלת revocationDate. Transaction.currentEntitlements מפסיק להחזיר אותה. כדי למנוע גישה לא מורשית, עליך להאזין ברציפות ל-Transaction.updates ולהגיב מיד לביטול הגישה.

כיצד לבדוק Family Sharing ב-Sandbox?

צור מספר מזהי Apple לבדיקה ב-App Store Connect וקבץ אותם למשפחה דרך בודקי Sandbox. לאחר מכן התחבר במכשיר עם חשבונות שונים כדי לבדוק תרחישי רכישה וגישה.

מה ההבדל בין StoreKit 1 ל-StoreKit 2 עבור Family Sharing?

ל-StoreKit 1 חסר שדה ownershipType; הוא דורש אימות קבלה בצד השרת ובדיקת שדה is_in_family_sharing. StoreKit 2 מספק ownershipType ישירות בעסקה, מפשט את הלוגיקה ותומך ב-async/await. המעבר מפחית מורכבות ומשפר אמינות.

מה אם משתמש לא מקבל גישה למנוי?

בדוק ש-Family Sharing מופעל ב-App Store Connect עבור המוצר. ודא שהאפליקציה מעבדת כראוי Transaction.currentEntitlements ו-Transaction.updates. כמו כן, ודא שחשבונות ה-Sandbox מוגדרים כראוי והמשתמש נמצא באותה קבוצת משפחה.

מה כוללת העבודה שלנו

  • הגדרת Family Sharing עבור מוצרים ב-App Store Connect
  • יישום בדיקת ownershipType באמצעות StoreKit 2
  • טיפול בביטול גישה בעת יציאה מקבוצת משפחה
  • מאזין רציף עבור Transaction.updates לאורך כל חיי האפליקציה
  • בדיקה עם משפחת Sandbox (עד 6 חברים, תרחישים מרובים)
  • תיעוד לצד השרת (אם נדרש אימות backend)
  • אחריות לפעולה תקינה למשך 30 יום לאחר המסירה

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

לוח זמנים משוער: 3–5 ימים, כולל הגדרת App Store Connect ובדיקות עם חשבונות Sandbox. עלות אופיינית נעה בין $1500 ל-$3000, תלוי במורכבות. צור קשר לקבלת הצעת מחיר. הזמן ביקורת על הקוד שלך לטיפול ב-Family Sharing—זה לוקח שעה וחוסך שבועות של עבודה חוזרת.