SlideShare una empresa de Scribd logo
1 de 73
blending delicious user experiences for windows phone 7
the verysoftware team
menu entrée designing for windows phone 7: our experience main apptracker:the ultimate app for developers  dessert building tech.days app: tips & tricks
designing for windows phone 7: our experience our experience
10ios apps  on the app store
from iphone to windows phone 7
will it blend? :-) source: willitblend.com
oh yes!
your personal translator free trial http://bit.ly/dJYItw
developed in  10hours
polyglot 30+ languages pronunciation history of translations great user experience share by email & sms
gifts  organiser free version http://bit.ly/i2cHRH
gifts organise gifts list check prices track budget sort by recipient share by email & sms
apptracker:  the ultimate app for developers  apptracker
the ultimate tool to keep track of your windows phone 7 appson the marketplace free for a limited time http://bit.ly/hRlfik
apptracker ,[object Object]
follow your favourite
worldwide overview of reviews
detailed review list by region
translate reviews into 30+ languages
share reviews by email or sms
see the rating distributionby region or worldwide
see when new reviews are available,[object Object]
apptracker: 300+ reviews thank you  for your support! “ “ “ “ “ “ “ “ “ truly brilliant app coolest app for developers! perfect for developers! an essential app! simply awesome extremely useful  app for developers excellent design a must have for every WP7 developer ” love it! ” ” ” ” ” ” ” ”
apptracker: our favourite comment “ superb app. why only four stars? because it should be $5. you're letting the rest of us devs down by giving away such great free stuff! ”
apptracker: wp7comp award
building tech.days app: tips & tricks tips & tricks
tips & tricks: tech.days app design
tips & tricks:  tech.days app demo
tips & tricks:  make it blend
tips & tricks:  make it blend gotchas ,[object Object]
exceptions in constructors
database queriesguidelines for creating designer friendly views, msdn http://bit.ly/lRU00l
tips & tricks:  make it blend blend design-time data + dummy data in code
tips & tricks:  make it blend design-time data
tips & tricks:  make it blend dummy data in code
tips & tricks:  make it blend isindesigntool
tips & tricks:  make it blend isindesigntool
tips & tricks:  context menu using  mvvm
tips & tricks:  context menu using mvvm demo
tips & tricks:  context menu using mvvm listbox
tips & tricks:  context menu using mvvm datatemplate
tips & tricks:  context menu using mvvm datatemplate =usercontrol
tips & tricks:  context menu using mvvm usercontrol = view
tips & tricks:  context menu the problem
tips & tricks:  context menu using mvvm parent viewmodel child viewmodel child viewmodel child viewmodel notify selected child
tips & tricks:  context menu using mvvm parent parent viewmodel child viewmodel child viewmodel child viewmodel child
tips & tricks:  context menu using mvvm parent viewmodel child viewmodel child viewmodel child viewmodel proxy service calls children view state
tips & tricks: graphics, try xara designer
tips & tricks: graphics, avoid clip art a la ’97
tips & tricks:  different levels  of details optimise for mobile
tips & tricks:  different levels  of details optimise for mobile
tips & tricks: transitions “ the experience is in the transition between states, not the states themselves. bill buxton, principal researcher microsoft research, mix’09 video ”
tips & tricks: transitions, page navigation
tips & tricks: transitions, page navigation don’t forget to change the rootframe in app.xaml.cs:
tips & tricks: transitions, landscape orientation
tips & tricks:  transitions, animating screen rotation original code by michel salib http://bit.ly/bxQR5V
tips & tricks: transitions,  using fluid move behaviour
tips & tricks:  transitions tech.days app demo
tips & tricks: trial mode
tips & tricks: trial mode, helper code
tips & tricks: trial mode, using it
tips & tricks: getting ratings
tips & tricks: getting ratings, the code
tips & tricks: getting ratings, the dll notificationbox by tomer shamam http://bit.ly/d2IY61
tips & tricks: error reporting
tips & tricks: error reporting, what you get
tips & tricks: error reporting, the code
tips & tricks: user settings, the problem ,[object Object]
users lose and replace their phones
“occasionally” a bug requires an app to be uninstalled/reinstalled
users have to start using the app from scratch:all settings/data lost,[object Object]

Más contenido relacionado

Similar a Blending Delicious User Experiences For Windows Phone 7 (by VerySoftware)

Dev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guideDev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guide
TrioBlack Trioblack
 

Similar a Blending Delicious User Experiences For Windows Phone 7 (by VerySoftware) (20)

Construir Aplicações Silverlight para Windows Phone 7
Construir Aplicações Silverlight para Windows Phone 7Construir Aplicações Silverlight para Windows Phone 7
Construir Aplicações Silverlight para Windows Phone 7
 
Mobile_Portfolio_new
Mobile_Portfolio_newMobile_Portfolio_new
Mobile_Portfolio_new
 
The Future of Web Apps
The Future of Web AppsThe Future of Web Apps
The Future of Web Apps
 
Achieving quality contraints
Achieving quality contraintsAchieving quality contraints
Achieving quality contraints
 
App Economy
App EconomyApp Economy
App Economy
 
Snapchat - Google Docs.pdf
Snapchat - Google Docs.pdfSnapchat - Google Docs.pdf
Snapchat - Google Docs.pdf
 
Progressive Web Apps - Goto Chicago 2017
Progressive Web Apps - Goto Chicago 2017Progressive Web Apps - Goto Chicago 2017
Progressive Web Apps - Goto Chicago 2017
 
Dev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guideDev windows phone_apps_getting_started_guide
Dev windows phone_apps_getting_started_guide
 
Mobile App Basics for Beginners
Mobile App Basics for BeginnersMobile App Basics for Beginners
Mobile App Basics for Beginners
 
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
iPhone & iPad App Cash - The *COMPLETE GUIDE* to create iPhone app and how to...
 
How We Make Apps And Services
How We Make Apps And ServicesHow We Make Apps And Services
How We Make Apps And Services
 
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.comPhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
PhoenixGMN - How To Go About An App Idea - Guide by SuperHitApps.com
 
Android app development guide for freshers by ace web academy
Android app development guide for freshers  by ace web academyAndroid app development guide for freshers  by ace web academy
Android app development guide for freshers by ace web academy
 
Event App 101
Event App 101Event App 101
Event App 101
 
CEE the Mobile Activation Platform
CEE the Mobile Activation PlatformCEE the Mobile Activation Platform
CEE the Mobile Activation Platform
 
Google App Inventor
Google App InventorGoogle App Inventor
Google App Inventor
 
10 Growth Hacks for Mobile Apps
10 Growth Hacks for Mobile Apps10 Growth Hacks for Mobile Apps
10 Growth Hacks for Mobile Apps
 
5 Easy Steps To Create An App for Your Business.pdf
5 Easy Steps To Create An App for Your Business.pdf5 Easy Steps To Create An App for Your Business.pdf
5 Easy Steps To Create An App for Your Business.pdf
 
Marketing your app on a shoestring - tips on PR, marketing, ASO and self-pub...
Marketing your app on a shoestring  - tips on PR, marketing, ASO and self-pub...Marketing your app on a shoestring  - tips on PR, marketing, ASO and self-pub...
Marketing your app on a shoestring - tips on PR, marketing, ASO and self-pub...
 
Mobile App Development V_S Software Development_ 7 Key Differences.pdf
Mobile App Development V_S Software Development_ 7 Key Differences.pdfMobile App Development V_S Software Development_ 7 Key Differences.pdf
Mobile App Development V_S Software Development_ 7 Key Differences.pdf
 

Último

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Safe Software
 

Último (20)

Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 AmsterdamDEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
DEV meet-up UiPath Document Understanding May 7 2024 Amsterdam
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, AdobeApidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
Apidays New York 2024 - Scaling API-first by Ian Reasor and Radu Cotescu, Adobe
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
Biography Of Angeliki Cooney | Senior Vice President Life Sciences | Albany, ...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ..."I see eyes in my soup": How Delivery Hero implemented the safety system for ...
"I see eyes in my soup": How Delivery Hero implemented the safety system for ...
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemkeProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
ProductAnonymous-April2024-WinProductDiscovery-MelissaKlemke
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 

Blending Delicious User Experiences For Windows Phone 7 (by VerySoftware)

Notas del editor

  1. Code:private static bool? cachedIsTrialMode = null;public static bool IsTrialMode(){ return IsTrialMode(false);} public static bool IsTrialMode(bool forceFromCache) { // If this code is being run buy VS/Blend design tool, we don't want to MessageBox if (DesignerProperties.IsInDesignTool) return false; if ((forceFromCache) || (cachedIsTrialMode == null)) {#if DEBUGMessageBoxResult result = MessageBox.Show("Click ok to simulate paid version", "Simulate paid version?", MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) {cachedIsTrialMode = false; } else {cachedIsTrialMode = true; }#elseLicenseInformationlicenseInfo = new LicenseInformation();cachedIsTrialMode = licenseInfo.IsTrial();#endif } return cachedIsTrialMode.Value; }
  2. Code:using Microsoft.Phone.Tasks;using Tomers.Phone.Controls;private static bool PerformedRatingPromptCheck = false;private void PhoneApplicationPage_Loaded(object sender, System.Windows.RoutedEventArgs e){ if (!PerformedRatingPromptCheck) {PerformedRatingPromptCheck = true;intnumAppLaunches = 0;IsolatedStorageSettings.ApplicationSettings.TryGetValue<int>("Rating_numAppLaunches", out numAppLaunches);intnumNextRatingPrompt = 0; if (!IsolatedStorageSettings.ApplicationSettings.TryGetValue<int>("Rating_numNextRatingPrompt", out numNextRatingPrompt)) {numNextRatingPrompt = 5; } if (numAppLaunches >= numNextRatingPrompt) {IsolatedStorageSettings.ApplicationSettings["Rating_numNextRatingPrompt"] = numNextRatingPrompt * 2;NotificationBox.ShowAgain("Enjoying the app?", "Would you like to rate this app now?", "Ask me later", false,Surpressed => { }, "Rating_MsgPrompt", new NotificationBoxCommand("Yes", () => { new MarketplaceReviewTask().Show(); }), new NotificationBoxCommand("No", () => { })); }IsolatedStorageSettings.ApplicationSettings["Rating_numAppLaunches"] = numAppLaunches + 1; }}
  3. Code:NotificationBox.ShowAgain("Enjoying the app?", "Would you like to rate this app now?", "Ask me later", false,Surpressed => { }, "Rating_MsgPrompt", new NotificationBoxCommand("Yes", () => { new MarketplaceReviewTask().Show(); }), new NotificationBoxCommand("No", () => { }));
  4. Code:// Code to execute on Unhandled Exceptionsprivate void Application_UnhandledException(object sender, ApplicationUnhandledExceptionEventArgs e){ if (System.Diagnostics.Debugger.IsAttached) { // An unhandled exception has occurred; break into the debuggerSystem.Diagnostics.Debugger.Break(); } else {var result = MessageBox.Show("Would you like to email the details of this error to the Developer?\\n\\n(No personal information, other than your email address, will be sent to the Developer)", "An error has occurred!",MessageBoxButton.OKCancel); if (result == MessageBoxResult.OK) {var task = new EmailComposeTask();task.To = "contact@DeveloperEmailAddress.com";task.Subject = "Error Report: TechDays 2011 App";task.Body = String.Format("An unhandled exception occurred in TechDays 2011 App:\\n\\n{0}", e.ExceptionObject.ToString());task.Show(); } }}
  5. Code:void BackgroundLoadFavouriteSessions(object sender, DoWorkEventArgs e){varfavIDs = LoadFavouriteSessionsFromFile(); if (favIDs == null) { // We failed when loading from file so check the cloud storeCloudUserDataServiceClient client = new CloudUserDataServiceClient();client.GetStoredTechDaysUserDataCompleted += client_GetStoredTechDaysUserDataCompleted;client.GetStoredTechDaysUserDataAsync(HelperFuncs.UserID); } else { // Loaded from file successfully so use this dataSetFavourites(GetSessionListFromIDs(favIDs)); }}void client_GetStoredTechDaysUserDataCompleted(object sender, GetStoredTechDaysUserDataCompletedEventArgs e){ if ((e.Error == null) && (e.Result != null) && (!String.IsNullOrEmpty(e.Result.FavouriteIDs))) { if (MessageBox.Show("Would you like to restore your settings for this app?", "No settings found", MessageBoxButton.OKCancel) == MessageBoxResult.OK) {varfavouriteSessionList = GetSessionListFromIDString(e.Result.FavouriteIDs);SetFavourites(favouriteSessionList); } }}
  6. Code:private static string cachedUserID = null;public static string UserID{ get { if (cachedUserID == null) { string anid = UserExtendedProperties.GetValue("ANID") as string; if (anid != null) {cachedUserID = anid.Substring(2, 32); } else {cachedUserID = "EMULATOR_USER"; } } return cachedUserID; }}private void SaveFavouritesToCloud(string favIDString){TechDaysUserDatasaveData = new TechDaysUserData() {UserID = HelperFuncs.UserID,FavouriteIDs = favIDString };CloudUserDataServiceClient client = new CloudUserDataServiceClient();client.StoreTechDaysUserDataAsync(saveData);}
  7. Code:public class TechDaysDataEntryContext : TableServiceContext{ public static string TableName = "TechDaysDataEntrys"; public TechDaysDataEntryContext(CloudStorageAccount account) : base(account.TableEndpoint.ToString(), account.Credentials) { } public IQueryable<TechDaysDataEntry> TechDaysDataEntrys { get { return this.CreateQuery<TechDaysDataEntry>(TableName); } } public void AddTechDaysDataEntry(TechDaysDataEntrynewEntry) {this.AddObject(TableName, newEntry);this.SaveChanges(); }}public class TechDaysDataEntry : TableServiceEntity{ public string UserID { get { return PartitionKey; } set { RowKey = value; PartitionKey = value; } } public string FavouriteIDs { get; set; } public TechDaysDataEntry() { } public TechDaysDataEntry(string UserID, string inFavouriteIDs) {PartitionKey = UserID;RowKey = UserID;FavouriteIDs = inFavouriteIDs; }}
  8. Code:public TechDaysUserDataGetStoredTechDaysUserData(string userID){varstorageAccount = GetStorageAccount();vartddeContext = new TechDaysDataEntryContext(storageAccount);tddeContext.IgnoreResourceNotFoundException = true;var result = (from entry in tddeContext.TechDaysDataEntrys where entry.PartitionKey == userID && entry.RowKey == userID select entry).ToList(); if (result.Count == 1) {var entry = result.First();varuserData = new TechDaysUserData() {UserID = entry.UserID,FavouriteIDs = entry.FavouriteIDs }; return userData; } return null;}public void StoreTechDaysUserData(TechDaysUserDatauserData){varstorageAccount = GetStorageAccount();vartddeContext = new TechDaysDataEntryContext(storageAccount);tddeContext.IgnoreResourceNotFoundException = true;var result = (from entry in tddeContext.TechDaysDataEntrys where entry.PartitionKey == userData.UserID && entry.RowKey == userData.UserID select entry).ToList(); if (result.Count == 0) {var entry = new TechDaysDataEntry(userData.UserID, userData.FavouriteIDs);tddeContext.AddTechDaysDataEntry(entry); } else {var entry = result.First();entry.FavouriteIDs = userData.FavouriteIDs;tddeContext.UpdateObject(entry);tddeContext.SaveChanges(); }}[DataContract]public class TechDaysUserData{ [DataMember] public string UserID{ get; set; } [DataMember] public string FavouriteIDs { get; set; }}