פיתוח ל-Windows Phone [מדריך למתקדמים]

אם תמיד רציתם, או אפילו כבר פיתחתם אפליקציה ל-Windows Phone ואתם לא מרוצים מאיך שהיא נראית – אנו מציגים לכם את המדריך המלא לשיפור האפליקציה שלכם

מקור: יח"צ

המדריך מתפרסם כחלק מסדרת הפוסטים של Windows Phone App Challenge. יודעים לפתח אפליקציות למובייל? פתחו אפליקציה ל-Windows Phone, הגישו אותה לתחרות ואולי תזכו בפרסים שווים וסקירה של האפליקציה שלכם בניוזגיק. רוצים לשמוע עוד?


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

אריחים חיים

אחת התכונות המושכות של Windows Phone היא האריחים החיים (Live Tiles) – אותם ריבועים שמופיעים במסך הבית כאשר המשתמש בוחר לבצע pinning, כלומר לעגן את האפליקציה שלכם למסך הבית שלו. מרבית המשתמשים עושים זאת לאפליקציות שימושיות ולכאלה שהם מעוניינים גישה זריזה אליהן. כך זה נראה במכשיר הסלולרי:

מקור: צילומסך

כדי לבחור צורה בסיסית לאריח ניתן להשתמש בתפריט Project->Properties מתוך Visual Studio, לאחר מכן בתוך ה-tab שנקרא Application נמצא את האופציות הבאות:

מקור: צילומסך

האופציות מאפשרות לנו לבחור את הטקסט והתמונה, שצריכה להיות בגודל 173X173 פיקסלים, אחרת היא תעבור הגדלה או קיצוץ בהתאם. את התמונה מוסיפים כקובץ PNG או JPG, (רצוי PNG) על ידי לחיצה ימנית על הפרוייקט ובחירת Add Existing Item. לאחר מכן, בוחרים את התמונה הרצויה. אפשר לעשות יותר, אם ניגשים ישירות לקובץ שבו רשומים הדברים האלה, WMManifest.xml. כך הקובץ יראה לכם בשלב זה:

מקור: צילומסך

האלמנט Count מאפשר הוספת מספר בחלק הימני של האריח, שמשמעותו תלויה באפליקציה. בנוסף, הגירסה החדשה של Windows Phone 7, או כפי שידועה – מנגו – מוסיפה יכולת של אריח עם צד אחורי, אותו גם ניתן לקבוע באותו קובץ. WP7 יחליף בין האריח הקדמי לאחורי כל מספר שניות באופן אוטומטי:

מקור: צילומסך

מקור: צילומסך

וזה החלק האחורי:

מקור: צילומסך

שינוי אריח מקוד

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

מקור: צילומסך

הטיפוס ShellTile הוא הדרך הבסיסית לעבוד עם אריחים. המאפיין ActiveTiles מביא רשימה של אריחים שקשורים באפליקציה. איך יכולים להיות יותר מאחד? ניתן לייצר אריחים משניים (Secondary tiles) באופן יזום. בכל מקרה, המתודה ()First תמיד תחזיר את האריח הראשי.

יצירת אריחים משניים

אם רוצים ליצור אריח משני, ניתן לעשות זאת ע”י מילוי אובייקט מטיפוס StandardTileData ואז לקרוא ל-ShellTile.Create:

מקור: צילומסך

ה-URI שניתן להצמיד לאריח יגרום לניווט לדף באפליקציה עם אותו שם, כולל היכולת להוסיף מידע דרך ה-Query String.

אך מה לגבי שינוי התמונה? האם ניתן להחליף לתמונה אחרת? אם מדובר בתמונה שנמצאת באינטרנט, אז אין בעיה. נותנים למאפיין BackgroundImage את ה-URI וזהו. אבל מה אם התמונה מקומית? ומה אם נרצה שהתמונה תשתנה בהתאם למשהו שקורה באפליקציה? כמו למשל, באפליקציה של פתקיות, בה נרצה לראות את התוכן של “פתקית” מסוימת – כלומר תמונה דינמית.

יצירת תמונת אריח דינמית

יצירת תמונה דינמית מתבצעת בשני שלבים, הראשון הוא ייצור התמונה הדינמית והשני הוא למקם אותה במקום הנכון ולהפנות אל אותו המקום URI.

כדי לייצר את התמונה הדינמית נשתמש בטיפוס WriteableBitmap, שמאפשר, בין השאר, לצייר לתוכו כל פקד שברשותינו. הכי נוח יהיה ליצור פקד מטיפוס UserControl, לתוכו נוכל להכניס שילוב כלשהו בין פקדים שנתמכים ב-Windows Phone. כדי לעשות זאת, עלינו לבחור מהתפריט בלחיצה ימנית בתוך הפרויקט את האופציה Add New Item ולאחר מכן לבחור את Windows Phone User Control – בתוכו נוכל לשים מה שבא לנו, למשל:

מקור: צילומסך

כדי לצייר אל תוך התמונה, נשתמש בקוד הבא:

מקור: צילומסך

השלב השני שעלינו לבצע, הוא שמירת התמונה במקום שניתן לכוון אליו את המאפיין BackgroundImage של ה-ShellTile. המקום הנכון הוא חלק מהאחסון המופרד (Isolated Storage), שהוא מקום אחסון הקיים בכל אפליקציה, דרכו ניתן לשחזר את המידע בריצה הבאה שלה -למשל, מאפיינים של בחירת משתמש, שיאים של משחק וכו. ספציפית למקרה זה, הנתון חייב להישמר בתיקיה בשם Shared/ShellContent. קטע הקוד שעושה את העבודה עבורנו:

מקור: צילומסך

הקידומת isostore: בשם התמונה מוביל למקום הנכון. וככה זה נראה:

מקור: צילומסך

גישה למידע בטלפון

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

מקור: צילומסך

הפרמטר הראשון ל-SearchAsync מאפשר לחפש שמות או מאפיינים מסוימים. שימוש ב-string.Empty מביא את כל המידע. אנחנו נאלצים לחפש כאן בצורה אסינכרונית, כלומר המתודה חוזרת מיד, כדי שממשק המשתמש לא ייתקע ונקבל קריאה בהמשך לארוע אליו נרשמנו (SearchCompleted). כאן, התוצאה זמינה דרך המאפיין Results על אובייקט ה-Args (נקרא e בקוד). מי שתוהה מה זה החץ המצחיק (=>), הרי שמדובר ב”ביטוי למבדה” (Lambda expression), שהוא למעשה תחליף למתודה רגילה. למשל, אם ניקח את התוצאה ונחבר אותה למשהו כמו ListBox (זהו המשתנה _contacts בקוד שלמעלה) נוכל לראות גם תוצאות:

מקור: צילומסך

אני מציג כאן את השם ואת מספר הטלפון הראשון, במידה ויש, של איש הקשר. ככה זה נראה באמולטור: (לנוחיות הבדיקות, האמולטור מכיל מספר אנשי קשר).

מקור: צילומסך

גישה לחומרה

כל מכשיר מבוסס Windows Phone 7 חייב לתמוך במספר מאפיינים חומרתיים, כגון מצלמה, מיקרופון, מד תאוצה ו-GPS. כל האביזרים הללו נגישים לאפליקציות. למשל, מד התאוצה (Accelerometer) מאפשר לדעת את כיוון ועצמת התנועה המרחבית של הטלפון. כדי לגשת למידע זה, צריך לייצר אובייקט מסוג Accelerometer ולהתחבר לארוע שנקרא ReadingChanged:

מקור: צילומסך

הקוד נראה קצת יותר מסובך ממה שהוא צריך להיות, אבל הוא נדרש כדי שהשינויים בממשק המשתמש יתבצעו ב-thread הנכון, כשההנחה כאן היא ש-_x, _y, _z הם פקדים – למשל מסוג TextBlock.

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

כתיבת משחקים

ואם אנחנו מדברים על משחקים, ומשחקים מדברים אליכם, תרצו לוותר על Silverlight, בעיקר אם מדובר במשחק גרפי מאד או קצבי מאד ולעבור לאלטרנטיבה – XNA, ספריה שקיימת גם ל-PC וגם ל-XBOX 360 ומאפשרת לכתוב משחקים בקלות וביעילות, תוך ניצול מקסימלי של יכולות החומרה (ול-WP7 מחוייב שיהיה עם כרטיס מסך חזק). XNA מאפשרת לכתוב משחק עם קוד כמעט זהה לשלוש הפלטפורמות הנ”ל.

XNA הוא מחוץ ליריעת הכתבה הזו, אבל ניתן למצוא מידע רב באינטרנט ובתיעוד הרשמי – למשל סדרת פוסטים שכתבתי (באנגלית) על פיתוח עם XNA, אמנם הם לא ייעודיים לפיתוח ל-WP7, אבל אותם עקרונות תופסים. מי שחולם לכתוב את ה-Angry Birds הבא – XNA הוא בשבילו.

לסיכום

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


תחרות Windows Phone App Challenge בחסות מיקרוסופט


בכמה הזדמנויות אתה מוזמן להיות שותף במערכת הפעלה שהולכת להוביל את השוק? מיקרוסופט ו – Newsgeek מכריזים על תחרות פיתוח אפליקציות ל – Windows Phone. במהלך התחרות אתה מוזמן לפתח ולהעלות אפליקציה/ות לMarketplace (חנות האפליקציות של Windows Phone) ולהגיש אותם לתחרות. בכל שבוע, מידי יום שני, יוכרז ב – Newsgeek המנצח השבועי שיזכה בסקירה של האפליקציה ובמתנה שבועית מתחלפת. אחת לחודש, יוכרז המנצח של החודש שיקבל מכשיר Windows Phone. בתום שלושת חודשי התחרות נכריז על המנצח שיזכה ב-Xbox 360 SLIM 4GB + Kinect.

Windows Phone מביא חווית משתמש ייחודית בחיבור לרשתות חברתיות, תחביבים, משפחה ועבודה ושם את האנשים במרכז. גרסת Windows Phone 7.5 (מנגו) מוסיפה כ – 500 יכולות חדשות למשתמשים ועם יותר מ – 1500 APIs חדשים למפתחים.

כדי להתחיל לעבוד כל מה שצריך לעשות זה להוריד את סביבת הפיתוח מהאתר הרשמי של המפתחים ב–App Hub. ניתן למצוא פרטים נוספים ומדריך פיתוח בעברית בקישור הבא.

הצטרפו לקצב שסוחף את המפתחים בעולם כולו. 

פבל יוסיפוביץ'

פבל משמש כיום כ-CTO בתחום פיתוח תוכנה ומרצה בג'ון ברייס הי-טק, והוא בעל תואר MVP של מייקרוסופט. בעבר הקים עם שותפים סטארטאפ בשם Quiksee שנמכר ל-google בספטמבר 2010.

הגב

2 תגובות על "פיתוח ל-Windows Phone [מדריך למתקדמים]"

avatar
Photo and Image Files
 
 
 
Audio and Video Files
 
 
 
Other File Types
 
 
 

* היי, אנחנו אוהבים תגובות!
תיקונים, תגובות קוטלות וכמובן תגובות מפרגנות - בכיף.
חופש הביטוי הוא ערך עליון, אבל לא נוכל להשלים עם תגובות שכוללות הסתה, הוצאת דיבה, תגובות שכוללות מידע המפר את תנאי השימוש של Geektime, תגובות שחורגות מהטעם הטוב ותגובות שהן בניגוד לדין. תגובות כאלו יימחקו מייד.

סידור לפי:   חדש | ישן | הכי מדורגים
גיא
Guest

תודה רבה!

איל
Guest

אני לא מסכים עם הכותרת “מדריך למתקדמים”. מה שנתתם פה הוא סה”כ כמה נקודות ושורות קוד על כל נושא.
אם כבר הולכים על מדריך למתקדמים, תנסו לתת פרקים שלמים על נושאים חשובים כמו ביצועים וכל מה שקשור ל UI thread… או על דטהבייס מקומי וכו.

wpDiscuz

תגיות לכתבה: