עדכונים לפלאש ול-AIR
שני עדכונים בסוף השבוע:
פלאש: Adobe Flash Player version 10.0.32.18
לרשימת התיקונים והפיצ'רים
ועדכון חדש ל-AIR
לרשימת התיקונים והפיצ'רים
שני עדכונים בסוף השבוע:
פלאש: Adobe Flash Player version 10.0.32.18
לרשימת התיקונים והפיצ'רים
ועדכון חדש ל-AIR
לרשימת התיקונים והפיצ'רים
למעשה, כל אפליקציה שעובדת על בסיס virtual machine ניתנת לפריצה, אבל ישנם קווי יסוד שניתן ללכת לפיהם על מנת לחשוף כמה שפחות מידע, ובודאי שלא מידע שניתן לשינוי שיגרום לפריצת האפליקציה וחשיפת נתונים "חסויים", כמו שניתן לראות במאמר המצויין הזה שעוקב אחרי תהליך פריצה של אפליקציית AIR והפיכתה ל-timeless trial version.
אז אמנם המאמר מכוון פרסומת לחברה שמבצעת את ה-encryption וה-licensing management, אבל בכל מקרה צריך לזכור כמה כללי יסוד:
1. שימוש בתוכנות encrypt מונעות ברוב המקרים חשיפה של קוד המקור. לדוגמא: SWF Encrypt, Secure SWF
2. לא לשמור נתונים קריטיים (שם משתמש, ססמאות) ב-swf עצמו אלא לקבל פרמטרים מהשרת.
3. להמנע כמה שאפשר משימוש בלינקים סטטיים, אלא לקבל את המידע מהשרת ב-runtime.
4. שימוש ב-https, rtmpe ובפרוטוקולים מאובטחים אחרים להעברת מידע קריטי.
אז עובדים עם ה-AS3 Facebook API החדש? מה יש ומה עדיין חסר?
נתחיל בדברים הטובים: קל לעבוד עם הספריה. אמנם הדוגמאות שבאות איתה מגיעות רק כ-Flex אבל אין בעיה לעבור גם לפלאש וגם לאפליקציות AIR עם שמירה על העקרונות שמצויינים.
אז איך זה עובד:
השלב הראשון הוא יצירת session של Facebook. ניתן ליצור מספר סוגים של Session.
WebSession- חיבור על ידי אפליקציית פלאש דרך עמוד אינטרנט
DesktopSession- חיבור ל-Facebook באמצעות אפליקציית AIR
JSSession - שימוש ב-bridge של Javascript לחיבור ל-Facebook.
כאן אני אשתמש ב-DesktopSession להדגמה.
השלב השני הוא חיבור המשתמש לאפליקציית Facebook שנועדה להיות ה-backend של אפליקציית הפלאש, פעולת login של המשתמש ל-Facebook אם אין לו session פתוח כבר, ואישור שימוש באפליקצייה, אם לא אושרה עדיין. אם יש אישור המשתמש מקבל חלון שאומר שהוא מחובר והוא ניתן לסגירה ולעבודה מול האפליקציה בלבד מכאן ולהבא.
יצירת האפליקצייה היא באמצעות אפליקציית developer ב-Facebook, שם ניתן ליצור שפליקציות ושם גם מקבלים שני קודים לשימוש. קוד ל-API וקוד סודי לחיבור של האפליקציה. בשניהם יש צורך על מנת לבצע את החיבור הראשוני של השלב הראשון.
חיבור שני השלבים נראה כך:
fb = new Facebook(); desktopSession = new DesktopSession(API_KEY, SECRET_KEY); //Start the session with Facebook fb.startSession(desktopSession); //login to client session fb.login(false);
בשלב הזה נפתח חלון ה-html לחיבור לאפליקציה, ומתבצע החיבור. באותו הזמן נזרק Event מסוג FacebookEvent.WAITING_FOR_LOGIN. והנה הבעיה הראשונה: אין אישור login לאחר החיבור. ניתן להבין את זה, מכיוון שהדבר מצריך תקשורת בין עמוד ה-html שנפתח לאפליקציה, וניתן לקיים את זה רק אם קיים bridge בין הפלאש ל-javascript. במקרה כמו שלנו שבו האפליקצייה היא AS3 נטו, אין תקשורת כזו. איך פותרים בעיה זו? באמצעות הפונקציה refreshSession, שבמקרה שיש התחברות, האובייקט Facebook יזרוק את ה-Event הבא: FacebookEvent.CONNECT.
וזה נראה כך (בהמשך לקוד למעלה):
fb.addEventListener(FacebookEvent.WAITING_FOR_LOGIN, onWaitingForLogin);
fb.addEventListener(FacebookEvent.CONNECT, onFacebookConnect);
private function onWaitingForLogin(evt:FacebookEvent):void
{
connectionIv = setInterval(function():void
{
fb.refreshSession();
}, 1000);
}
private function onFacebookConnect(evt:FacebookEvent):void
{
clearInterval(connectionIv);
//do something after connection
}
אחרי שיש חיבור ניתן לבצע כל פעולה שקשורה במשתמש, הדוגמא כאן תהיה קבלת רשימת ה-facebook id של כל החברים שלו. עבור כל אובייקט שליחה של בקשה יש אובייקט שיודע לקבל אותה ואת פורמט המידע שנמצא בתוכו, במקרה שלנו שני האובייקטים הם: GetFriends ו-GetFriendsData.
השלב הראשון הוא שליחת הבקשה, בשביל זה אנחנו משתמשים באובייקט BatchCollection מהספריה של ה-API שמאפשר לשלוח מספר בקשות במקביל, אנחנו נעשה זאת עם בקשה אחת:
private function getFriendsList():void
{
var batch:BatchCollection = new BatchCollection();
batch.addItem(new GetFriends());
var batchRun:BatchRun = fb.post(new BatchRun(batch)) as BatchRun;
batchRun.addEventListener(FacebookEvent.COMPLETE, handleComplete);
function handleComplete(evt:FacebookEvent):void
{
var results:Array = (evt.data as BatchResult).results;
var gfd:GetFriendsData = results[0] as GetFriendsData;
}
}
בשלב הזה אובייקט gfd מכיל אבייקט בשם friends שמכיל רשימת אובייקטים שבכל אחד מהם נמצא משתנה בשם uid שמכיל את ה-id של החבר ב-Facebook. כך רצים על הרשימה:
for (var i:int = 0; i < gfd.friends.length; i++)
{
trace(gfd.friends.getItemAt(i).uid
}
לאחר מכן ניתן להשתמש באובייקטים מסוג GetInfo וכו' על מנת למצוא פרטים נוספים על כל אחד מהחברים, למשוך תמונות וכו' אבל זה הבסיס… בהצלחה
אפליקציית AIR חדשה של Benjamin Dobler לעריכת קבצי flv, שילוב קבצי flv נוספים, שילוב אודיו, עריכה והכנסה של metadata, cuepoints ו-keyframes. מבחינת אפליקציית UI והישומים שלה היא כרגע היחידה שכתובה ב-flex על AIR שמבצעת את הפעולות האלה.
כמובן שישנם כלים אחרים כמו flvmdi , flvtool2 ו- ffmpeg שגם מאפשרים עריכה ושילוב קבצים נוספים, אבל מבחינת עבודת עריכה פרטנית לסרט ספיציפי (אין תמיכה ל-batch ול-command line) אני מעריך שזו אחלה אפליקציה.
ביום חמישי ה-12.6 אני מעביר סמינר של 3-4 שעות בנושא AIR במרכז Adobe ישראל (quicksoft.co.il) ברעננה.
הנושאים בסמינר יהיו:
לפרטים נוספים
יהיה מעניין, בואו בהמוניכם
תגובות אחרונות