בעיות עם חתימת Google Play: איך להימנע מהן
אתה מעלה את ה-APK שלך ל-Play Console, הוא עובר בדיקה—ושעתיים אחר כך אתה מקבל דחייה: "ה-APK שלך לא חתום עם מפתח ההעלאה." או שהבנייה מתקבלת, אבל שבוע לאחר מכן משתמשים מדווחים שאנדרואיד מבקש "להסיר את הגרסה הישנה לפני ההתקנה" כי ה-keystore השתנה בין גרסאות ו-Play App Signing לא הופעל בזמן. שגיאה זו נובעת מ-keystore שהוגדר לא נכון או משלב הפעלת Play App Signing שהוחמץ. טיפלנו בשני המקרים בעשרות פרויקטים, כולל העברת משחקים גדולים עם מיליוני התקנות. חסכנו עד 30% מגודל החבילה באמצעות AAB ו-PAD. הצוות שלנו, עם ניסיון של 10+ שנים בגיימדב (40+ פרויקטים), פיתח pipeline ברור שמבטל שגיאות אלה. אנו מגדירים בנייה וחתימה turnkey—קבל ייעוץ, נעריך את הפרויקט שלך.
Keystore לעומת Play App Signing: מה ההבדל
לפני Play App Signing (כיום חובה לאפליקציות חדשות), מפתחים חתמו APK עם המפתח שלהם—וזה המפתח שמשתמשים ראו. אובדן ה-keystore פירושו חוסר יכולת קבוע לשחרר עדכונים (תיעוד רשמי של Google).
עם Play App Signing, הסכימה היא דו-שכבתית: מפתח העלאה (שמוחזק על ידי המפתח) חותם על ה-APK בעת ההעלאה ל-Play Console; Google מאמתת אותו וחותמת מחדש על ה-APK הסופי עם מפתח חתימת האפליקציה שלה לפני המסירה למשתמשים. אובדן מפתח ההעלאה ניתן לשחזור—Google מאפשרת בקשת איפוס. אובדן מפתח חתימת האפליקציה אינו ניתן לשחזור, אבל הוא מאוחסן אצל Google.
עבור אפליקציות חדשות, Play App Signing מופעל אוטומטית. עבור אפליקציות קיימות, עליך להפעיל אותו במפורש על ידי העלאת המפתח הנוכחי. ההבטחה שלנו: אנו עוזרים בהעברת מפתחות ללא אובדן תאימות לאחור.
איך להגדיר Play App Signing לפרויקט קיים
עבור אפליקציות שכבר פורסמו ללא Play App Signing, התהליך דורש זהירות. עבור ל-Play Console, בחר את האפליקציה, נווט אל Release > Setup > App Signing. לאחר מכן העלה את ה-keystore הנוכחי שלך (או רק את התעודה) לרישום. לאחר ההפעלה, כל הגרסאות החדשות ייחתמו על ידי Google—המפתח הישן הופך למפתח ההעלאה. השלמנו מעבר זה עבור 15+ פרויקטים; זמן ממוצע הוא 1–2 ימים כאשר ה-keystore מוכן.
בניית AAB במקום APK
מזה מספר שנים, Google Play דורשת Android App Bundle (.aab) לאפליקציות חדשות. Unity מייצרת AAB דרך BuildSettings עם BuildAppBundle = true. AAB קטן יותר מ-APK ומאפשר ל-Play Console ליצור APK מותאם למכשיר (פיצול ABI, פיצול דחיסת טקסטורה). זה חוסך עד 30% בתעבורת משתמשים.
ניואנס חשוב למשחקי Unity: בעת שימוש ב-IL2CPP ו-AAB, ודא ש-Split Application Binary מופעל ב-Player Settings—אחרת ה-AAB עשוי לחרוג ממגבלת ההורדה של 150 MB. נכסים נוספים (Addressables, StreamingAssets) צריכים להימסר דרך Play Asset Delivery (PAD), לא להיכלל ישירות בחבילה.
Play Asset Delivery חיוני למשחקים עם משאבים גדולים. שלושה מצבי מסירה:
| מצב | גודל | זמן מסירה |
|---|---|---|
| install-time | עד 1 GB | עם ההתקנה |
| fast-follow | ללא הגבלה | מיד לאחר ההתקנה |
| on-demand | ללא הגבלה | לפי בקשה במהלך המשחק |
אינטגרציה עם Unity דרך חבילת Google.Play.AssetDelivery דורשת עיבוד מחדש של מערכת טעינת הנכסים אם היא לא תוכננה ל-PAD מההתחלה. זה כלול בהתקנה המלאה שלנו.
למה אוטומציה עם Fastlane חוסכת זמן
פעולת supply (נתיב Fastlane ל-Google Play) יכולה להעלות AAB למסלולים ספציפיים (פנימי, alpha, beta, production), לנהל אחוזי שחרור, ולעדכן רישומי חנות. תוך 2–5 ימים, אנו יוצרים pipeline שמטפל בפעולות אלה ללא התערבות ידנית.
אימות: דרך Service Account JSON עם תפקיד "Release Manager" ב-Play Console. זה אמין יותר מ-OAuth—ה-token לא פג ולא דורש הרשאה אינטראקטיבית ב-CI.
דוגמה ל-Fastfile מינימלי:
# fastlane/Fastfile
lane :upload_internal do
gradle(task: 'assembleRelease')
sign(keystore_path: ENV['KEYSTORE_PATH'], keystore_password: ENV['KEYSTORE_PASSWORD'], key_alias: ENV['KEY_ALIAS'], key_password: ENV['KEY_PASSWORD'])
supply(track: 'internal')
endה-keystore מאוחסן מוצפן ב-CI (GitHub Secrets, GitLab CI Variables, Vault). לעולם אל תעלה קבצי # fastlane/Fastfile lane :upload_internal do gradle(task: 'assembleRelease') sign(keystore_path: ENV['KEYSTORE_PATH'], keystore_password: ENV['KEYSTORE_PASSWORD'], key_alias: ENV['KEY_ALIAS'], key_password: ENV['KEY_PASSWORD']) supply(track: 'internal') end או .jks למאגר—אפילו פרטי. למידע נוסף על פרמטרי .keystore, ראה תיעוד Fastlane.
ניהול גרסאות
versionCode באנדרואיד חייב לעלות באופן מונוטוני. ב-Unity, זה PlayerSettings.Android.bundleVersionCode. אנו מגדילים אוטומטית דרך סקריפט pre-build hook או דרך increment_version_code של Fastlane. לבניית CI, השתמש במספר בניית ה-pipeline כחלק מה-versionCode: baseVersion * 1000 + buildNumber. שגיאה כאן היא סיבה נפוצה לדחיית פרסום.
מה כלול בעבודה שלנו
- ביקורת על סכמת החתימה הנוכחית וה-keystore.
- הגדרת Play App Signing (הפעלה, העברת מפתחות).
- בניית AAB עם אופטימיזציות (Split Binary, PAD).
- אינטגרציה של Fastlane עם CI (GitHub Actions, GitLab CI, Jenkins).
- ניהול גרסאות והגדלה אוטומטית.
- תיעוד התהליך והגישה.
- תמיכה במהלך השחרור הראשון.
לוחות זמנים
| משימה | לוח זמנים |
|---|---|
| בניית AAB חד-פעמית והעלאה למסלול פנימי | 0.5–1 יום |
| הגדרת Play App Signing + מפתחות ל-CI | 1–2 ימים |
| Pipeline מלא (Fastlane supply + מסלולים) | 2–5 ימים |
| אינטגרציה של Play Asset Delivery | 1–3 שבועות |
| העברת אפליקציה קיימת ל-Play App Signing | 1–2 ימים |
העלות מחושבת באופן אישי לאחר ניתוח מבנה הפרויקט ומצב מפתח החתימה שלך. קבל ייעוץ—נעריך את המקרה שלך.
טעויות נפוצות ואיך להימנע מהן
- שינוי keystore בין גרסאות → גורם לאי-התאמת חתימה למשתמשים. פתרון: השתמש תמיד במפתח העלאה אחד.
- חריגה ממגבלת AAB → אם
Split Application Binaryמושבת, החבילה יכולה לחרוג מ-150 MB. בדוק את הגדרות Unity לפני בנייה. - אי שימוש ב-PAD → טעינת כל הנכסים ב-AAB מאטה את ההתקנה ועלולה לגרום ל-ANR. מצב on-demand פותר את הבעיה.
אנו מבטיחים שה-pipeline שלך יפעל בצורה חלקה והפרסומים יעברו ללא דחיות. צור קשר כדי לדון בפרטים.





