ארכיון

רשומות עם התג ‘AS3’

AS3 Facebook API 2

11 אפריל, 2009 gadi_sr 2 תגובות

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

  • Share/Save/Bookmark
קטגוריות:AIR, Flash CS4, Flash Player 10, Flex, כללי תגיות:,

Save Image As for Flash

10 אפריל, 2009 gadi_sr 4 תגובות

So this post is in English for a global usage, since it relevant to much wider audience.
One of the things not implemented in swf files is the ability to right-click an image and download it to a specific library just as done in HTML pages. this ability is very nice-to-have and there are no technology barrirers (except issue that I will mention later) for most of the standard functionality.

My goal was to create a menu similar to HTML Image right-click menu with the following functionality:

1. View Image - open the image in external window/tab
2. Copy Image - copy image content to clipboard for paste in paint etc.
3. Copy Image Location - copy url to clipboard for paste in browser address bar
4. Save Image As - open browse window to save image locally.

I couldn't manage to do 2. since flash access to clipboard is for string data only, although maybe using Alchemy might solve this issue, so data will be delivered to clipboard by C/C++ code, you are most welcome to try.

View Image mission was accomplished by using Loader.contentLoaderInfo.url as path to the image. Copy Image part was made by setting clipboard data as the same url of the previous part and Save Image as has done using 2 steps:

1. Creating encoded data as PNG/JPG using standard Adobe libraries for encoding
2. Using FP 10 FileReference.save ability to save data from byteArray created by the application on the client Desktop without requiring server side scripting development.

The Implementation class is a Decorator for Loader Class and use in the following manner:

import il.flashdev.common.Downloadable;

var loader:Loader = new Loader();
loader.load(new URLRequest(myImagePath));
addChild(loader);
loader = new Downloadble(loader);

here is the result:

download example

Parameters available for the Downloadable constructor:
loader:Loader - Loader instance
viewImageItem:Boolean - should display View Image in Context menu
copyImageLocationItem:Boolean - should display Copy Image Location in Context menu
saveImageAsItem:Boolean - should display Save Image As in Context menu
imageFormat:String - in case not mentioned in Loader object, what is the image format to be saved
imageName:String - in case not mentioned in Loader object, what is the image name to be saved

defaults are: new Downloadable(loader, true, true, true, "", "");

you can use swc files here, or from inside fla

enjoy

  • Share/Save/Bookmark

שימוש ב-FileReference במידע לוקאלי ב-FP10

18 מרץ, 2009 gadi_sr אין תגובות

עד היום, בפלאש 9 היה ניתן להעלות קבצים לשרת באמצעות FileReference אבל ניתנה אליהם גישה מצומצמת מאוד, שאיפשרה רק לקרוא את של הקובץ שמעלים לשרת ותו לא. גישה כזו באה מטעמי Security כך שלא ניתן יהיה לפלאש לשנות את מאפייני הקובץ לפני שהוא עולה לשרת, אבל ישנם הרבה מקרים בהם נרצה להשתמש במידע הזה בצד הלקוח ורק לאחר מכן להעלות אותו לשרת. לדוגמא: העלאת תמונת פרופיל שנותנת ללקוח לעשות preview לפני שמירה על השרת. החסכון הוא כמובן כפול, מצד אחד הזמן שלוקח ללקוח לראות את התמונה הוא מינימלי, מאחר שהפעולה מתבצעת בצד שלו, ומצד שני אין צורך בניהול קבצים זמניים בצד השרת.

פונקציה חדשה בשם load לאובייקט FileReference מאפשרת לטעון את המידע לצד ה-client לתוך אובייקט byteArray לשימוש על ידי ה-player. הגודל הרשמי שנתמך על ידי הפלאש הוא 100MB. כאשר הפונקציה מופעלת ב-Flash player חייבת לבוא לפניה פונקציית Browse של FileReference, מה שלא צריך כאשר מדובר באפליקציית AIR.

ישנם מספר סוגי Events שיכולים להתרחש תוך כדי הטעינה:

open- תחילת טעינה
progress- תוך כדי תהליך הטעינה (ניתן להוציא כמה מתוך כמה נטען)
complete- סיום טעינה
ioerror - שגיאה ב-IO תוך כדי טעינה

בנוסף יכולות להיות שתי שגיאות חיצוניות:
IllegalOperationError - פתוח חלון browse במקביל או שיש בעיה בהרשאות תקשורת
Memory- הקובץ גדול מדי או הקצאת הזכרון אינה מספיקה.

ולעסק…

והקוד

מאפיין data של ה-fileReference מכיל byteArray שניתן לשימוש על ידי אובייקט כדוגמת Loader, Sound וכדו'

אחלה פיצ'ר :)

  • Share/Save/Bookmark

קבצים של המצגת מההרצאה האחרונה ב-AS3

27 יוני, 2008 gadi_sr 2 תגובות

הי,

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

מצגת וקבצי מקור

תהנו.גדי

  • Share/Save/Bookmark
קטגוריות:AS3 תגיות:,

קורס AS3 ב-16-17/7 במכללת היי טק

23 יוני, 2008 gadi_sr אין תגובות

אהלן. אני ממשיך בענייני הקורסים.
בתאריכים 16-17 בחודש הבא אני מעביר קורס AS3 hands-on למתכנתים. הקורס יהיה מבוסס על המון תרגול ולכן מומלץ מאוד להביא מחשב נייד לעבודה בכיתה יהיו מחשבים בכיתת הלימוד לעבודה תוך כדי ההרצאות. חלק מהנושאים שיועברו הם:

  1. Classes
  2. Working with display list
  3. RegEx
  4. Video
  5. Storage on client side
  6. E4X
  7. Binary sockets

ועוד נושאים רבים וטובים. הקורס יועבר במכללת הייטק דרך חברת DSP-IP שדרכם אני גם מבצע את ההרצאות ב-Adobe.

לפרטים ושאלות אתם יכולים לפנות לתמרה וב-8850956 09, או בתגובה לפוסט הזה

נשתמע
גדי

  • Share/Save/Bookmark
קטגוריות:AS3, Flex תגיות:, ,

סמינר AS3 ב-ADOBE ישראל ב-26/6

18 יוני, 2008 gadi_sr אין תגובות

כהמשך להדרכות ב-Adobe ישראל, אני מעביר סמינר נוסף ביום חמישי הבא 26/6, בנושא פיתוח ב-AS3. הסמינר הוא הקדמה לקורס של מספר ימים שאותו אעביר באותה מסגרת. הסמינר יתחלק לשני חלקים, כמו בפעם הקודמת. החלק הראשון יתמקד בתאוריה ויכלול הסברים לגבי הארכיטקטורה של הפלאש, שינויים מ-AS2 הסברים על הפיצ'רים החדשים של AS3 ומעבר על אלמנטים בסיסיים בשפה.

החלק השני של הסמינק יכלול דוגמאות קוד וקצת hands on של נושאים מעניינים ב-AS3

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

  • Share/Save/Bookmark
קטגוריות:AS3, Flash Player, Flex תגיות:,