יצירה ועדכון של כרטיסי טיסה ב-Apple Wallet
כאשר קובץ .pkpass נכשל באימות, הבעיה היא לעיתים קרובות .pkpass שגוי או שדות חובה חסרים כגון transitType. אנו עוזרים לנפות באגים בכל חלק ולהגדיר את היצירה כך ש-Apple Wallet יקבל את הכרטיס בניסיון הראשון. הניסיון שלנו: 5 שנים בתחום זה, מעל 30 פרויקטים לחברות תעופה ואגרגטורים, יותר מ-50,000 נוסעים בחודש מקבלים כרטיסים דרך Wallet. רשימת הבדיקות המאומתת שלנו והבדיקות האוטומטיות מקצרות את זמן האינטגרציה ב-40%. אנו מבטיחים עמידה בבדיקות App Store Review וציות מלא להנחיות Apple.
הכרחיות של כרטיסים דיגיטליים ב-Apple Wallet לחברות תעופה
המשתמשים מקבלים את הכרטיס על מסך הנעילה שלהם אוטומטית—15–30 דקות לפני ההמראה (באמצעות primaryFields) או בעת כניסה לאזור הגיאוגרפי של שדה התעופה. עדכוני push של Apple Wallet מעובדים פי 3 מהר יותר מאשר דרך אפליקציה ניידת ואינם דורשים פתיחתה. התראות על עיכובים ושינויי שער מגיעות ללא פתיחת האפליקציה. זה מגביר נאמנות ומפחית את העומס על דלפקי הצ'ק-אין: חיסכון של עד 90% בהדפסת כרטיסי נייר. עבור חברת תעופה בינונית, זה שווה ערך לחיסכון של עד $15,000 בחודש בעלויות הדפסה.
יתרונות של עדכוני push לחברות תעופה
עדכוני push עם מטען relevantDate ריק גורמים ל-Wallet להביא קובץ .pkpass חדש ללא אינטראקציה של המשתמש. זה מאפשר עדכון פרטי טיסה תוך פחות מ-2 שניות (בדרך כלל פחות מ-500ms לשינויי שער), עם עומס מינימלי על השרת. תהליך הרישום עוקב אחר Apple Wallet Developer Guide.
נתונים נדרשים וסוגי תחבורה
ב-.pkpass, עליך לכלול passTypeIdentifier, serialNumber, teamIdentifier ו-boardingPass.transitType. האחרון קובע את סמל התחבורה בכותרת:
| סוג | ערך | מקרה שימוש |
|---|---|---|
| Air | PKTransitTypeAir |
מטוסים |
| Rail | PKTransitTypeTrain |
רכבות |
| Bus | PKTransitTypeBus |
אוטובוסים, מיניבוסים |
| Boat | PKTransitTypeBoat |
מעבורות, ספינות |
| Generic | PKTransitTypeGeneric |
תחבורה אחרת |
שדות חובה ב-primaryFields: origin ו-destination. auxiliaryFields מכילים טיסה, מושב, שעה. הברקוד משתמש ב-barcode עם פורמט PKBarcodeFormatAztec לתעופה (ראה IATA 2D Barcode Standard).
השוואת פורמטי ברקוד
| פורמט | מהירות קריאה | קיבולת | תקן |
|---|---|---|---|
| Aztec | 1.5 שניות | 375 בתים | IATA 2D |
| QR | 2 שניות | 7089 תווים | ISO 18004 |
| PDF417 | 2.5 שניות | 2710 בתים | ISO 15438 |
Aztec נקרא הכי מהר בתאורה חלשה, דבר קריטי בשדות תעופה.
החשיבות הקריטית של עדכוני push לחברות תעופה
Apple Wallet תומך בעדכוני push דרך APNs. התהליך מתואר ב-Apple Wallet Developer Guide:
- כאשר כרטיס מתווסף, המכשיר נרשם דרך
POST /v1/devices/{deviceLibraryIdentifier}/registrations/{passTypeIdentifier}/{serialNumber}. - השרת מאחסן את
pushTokenמהתשובה. - בשינוי נתונים (עיכוב, שינוי שער), השרת שולח push ריק של APN (מטען מתחת ל-4 KB):
{ "aps": {} } - Wallet מקבל את ה-push, מבקש
{ "aps": {} }חדש עבור אותו.pkpass, ומחליף את הכרטיס הישן.
ה-serialNumber הריק מספיק—אין צורך בהתראה טקסטואלית. זה מעדכן מידע תוך פחות מ-2 שניות ללא עומס על הערוצים.
בפרויקט אחד, נתקלנו בתעודת WWDR מיושנת—כרטיסים לא נחתמו. החלפתה בתעודה העדכנית פתרה את הבעיה, והאינטגרציה הושלמה תוך יומיים.
שגיאות .pkpass נפוצות ותיקונים
- transitType שגוי: הכרטיס לא מוצג ב-Wallet. ודא עם התיעוד של Apple. - שדות חובה חסרים ב-boardingPass: גורם לשגיאת "Invalid format". השתמש ברשימת הבדיקות שלנו. - חתימה שגויה: הארכיון לא נטען. ודא שתעודת WWDR עדכנית (RSA של 2048 סיביות). - רישום push פגום: עדכונים לא נשלחים. אמת אחסון של pushToken.כיצד להימנע משגיאות יצירת .pkpass טיפוסיות
מלכודות נפוצות: aps שגוי מונע הצגת כרטיס ב-Wallet; שדות חובה חסרים ב-transitType גורמים לשגיאת "Invalid format"; חתימה שגויה הופכת את הארכיון לבלתי ניתן לטעינה; רישום push פגום משאיר עדכונים שלא נשלחו. אנו עוזרים לך להימנע מאלה: יש לנו רשימת בדיקות מוכחת על עשרות פרויקטים. קבל ייעוץ על אינטגרציה—נעריך את boardingPass הנוכחי שלך ונשפר אותו לדרישות Apple.
כיצד אנו מיישמים אינטגרציה
יצירת הכרטיס מתבצעת בצד השרת עבור כל נוסע. .pkpass הוא ייחודי לכל שילוב של טיסה + נוסע. הארכיון נחתם עם תעודות סוג כרטיס ו-WWDR. אנו משתמשים ב-serialNumber על Node.js (גודל קובץ כרטיס בדרך כלל 10-20 KB):
import { PKPass } from "passkit-generator";
const pass = await PKPass.from({
model: "./models/boarding-pass.pass",
certificates: {
wwdr: fs.readFileSync("./certs/wwdr.pem"),
signerCert: fs.readFileSync("./certs/pass.pem"),
signerKey: fs.readFileSync("./certs/pass.key"),
},
overrides: {
serialNumber: `FLIGHT-SU123-${passengerId}`,
description: `Посадочный талон ${flightNumber}`,
},
});
pass.setBarcodes({
message: bcbpData,
format: "PKBarcodeFormatAztec",
messageEncoding: "iso-8859-1",
});
const buffer = pass.getAsBuffer();
אנו מגדירים CI/CD ליצירה ופריסה אוטומטית. אנו גם משלבים רישום מכשירים וערוץ push.
תהליך העבודה שלנו
- ניתוח—לימוד לוחות טיסות, API של חברת התעופה, דרישות שדות.
- עיצוב—בחירת מחסנית שרת (Node.js / Python / Go), עיצוב מודל כרטיס.
- יישום—כתיבת מחולל, חתימה, רישום מכשירים, טיפול ב-push.
- בדיקות—אימות על מכשירים אמיתיים דרך TestFlight ו-App Store Connect.
- פריסה—השקת שרת, הגדרת ניטור, מסירת תיעוד.
מה כלול בעבודה
- הכנה והנפקה של תעודות סוג כרטיס + WWDR.
- יצירת
passkit-generatorבצד השרת עם שדות דינמיים. - רישום מכשירים ועדכוני push לסטטוס טיסה.
- אינטגרציה עם מערכת הקצה של חברת התעופה (REST API / WebSocket).
- בדיקות על מכשירי iOS כולל קודי גישה וביומטריה.
- תיעוד תפעולי ותמיכה לאחר פריסה.
לוחות זמנים ועלות
אינטגרציה בסיסית (יצירה, חתימה, push) אורכת 2–3 ימים. לוח הזמנים עשוי להתארך עבור לוגיקה לא סטנדרטית (מספר טיסות בכרטיס אחד, תצוגה דינמית). העלות מתחילה ב-$2,000 ומחושבת באופן אישי לאחר הערכת היקף. בקש הערכה מוקדמת—נדון בפרטים ונספק הצעה מסחרית.







