SlideShare a Scribd company logo
1 of 45
• 
• 
• 
•
 
 
 
 
 
 
 
 
 

 
 
 
 

 

Um Código-fonte 
Um Projeto 
Um Binário 
Múltiplas Platformas!
Perspectiva do Usuário: 
“Compro a app apenas uma vez, e 
posso usá-la em todos os meus 
dispositivos Windows. Configurações e 
compras “in-app” migram entre meus 
dispositivos" reuso 
“A app tem tema e funcionalidades 
similares nos dois dispositivos" reuso 
“Mas a experiência e recursos são 
adaptados ao dispositivo” com 
adaptações
Definição da Store: 
Use o mesmo Package Full Name (PFN) 
ao fazer o upload nas duas Stores (Windows Phone e 
Windows) 
• O “badge universal” aparecerá nas listagens das Stores 
• Compre a app em uma store, e o mesmo PFN contará 
como comprado na outra 
• Compre um item durável em uma store, e o mesmo 
contará como comprado na outra 
• Dados poderão migrar entre apps em múltiplos 
dispositivos desde que as mesmas compartilhem o PFN
 
 

 
 
 
 
 
 
 
 

Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Shared Projects 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
App.xaml 
App1_Windows81 
References 
App1_PCL 
App.xaml 
App1_PCL 
Class1.cs 
Page1.xaml 
Asset1.png 
.NET PCLs 
compartilhando binários 
Solution 'App1' 
App1_Phone81 
MyData.cs 
App1_Windows81 
MyData.cs 
MyWebservice 
MyData.cs 
Linked files 
compartilhando código
Solution 'App1' 
App1_Phone81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
App1_Windows81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Solution 'App1' 
App1_Phone81 
MyData.cs 
App1_Windows81 
MyData.cs 
MyWebservice 
MyData.cs 
Linked files 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Shared Projects 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
App.xaml 
App1_Windows81 
References 
App1_PCL 
App.xaml 
App1_PCL 
Class1.cs 
Page1.xaml 
Asset1.png 
.NET PCLs 
compartilhando binários
Solution 'App1' 
App1_Phone81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
App1_Windows81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Solution 'App1' 
App1_Phone81 
MyData.cs 
App1_Windows81 
MyData.cs 
MyWebservice 
MyData.cs 
Linked files 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Shared Projects 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
App.xaml 
App1_Windows81 
References 
App1_PCL 
App.xaml 
App1_PCL 
Class1.cs 
Page1.xaml 
Asset1.png 
.NET PCLs 
compartilhando binários
Solution 'App1' 
App1_Phone81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
App1_Windows81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Solution 'App1' 
App1_Phone81 
MyData.cs 
App1_Windows81 
MyData.cs 
MyWebservice 
MyData.cs 
Linked files 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Shared Projects 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
App.xaml 
App1_Windows81 
References 
App1_PCL 
App.xaml 
App1_PCL 
Class1.cs 
Page1.xaml 
Asset1.png 
.NET PCLs 
compartilhando binários
Solution 'App1' 
App1_Phone81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
App1_Windows81 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Solution 'App1' 
App1_Phone81 
MyData.cs 
App1_Windows81 
MyData.cs 
MyWebservice 
MyData.cs 
Linked files 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
Page1.xaml 
App.xaml 
Asset1.png 
Shared Projects 
compartilhando código 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
App.xaml 
App1_Windows81 
References 
App1_PCL 
App.xaml 
App1_PCL 
Class1.cs 
Page1.xaml 
Asset1.png 
.NET PCLs 
compartilhando binários
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared/PCL 
Class1.cs 
private void OnSuspending(object sender, SuspendingEventArgs e) 
{ 
// TODO: Save application state and stop any background activity 
ApplicationData.Current.RoamingSettings.Values["IsBurnt"] = model.IsBurnt; 
ApplicationData.Current.RoamingSettings.Values["Velocity"] = model.Velocity; 
} 
// TODO: Load state from previously suspended application 
model.IsBurnt = (bool?)ApplicationData.Current.RoamingSettings.Values["IsBurnt"] 
?? false; 
model.Velocity = (double?)ApplicationData.Current.RoamingSettings.Values["Velocity"] 
?? 1.0;
Dentro do meu código comum, preciso 
“ajustá-lo” com uma chamada específica 
de um dispositivo. 
Como fazer isto?
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
#if block 
fácil e rápido 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
PhoneImpl.cs 
App1_Windows81 
References 
App1_PCL 
WinImpl.cs 
App1_PCL 
Class1.cs 
IAbstraction.cs 
Inversion of Control (IOC) 
pattern que também funciona com PCL 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
ViewModel.cs 
App1_Windows81 
References 
App1_Shared 
ViewModel.cs 
App1_Shared 
Class1.cs 
ViewModel.cs 
Partial classes 
mais organizado
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
ViewModel.cs 
App1_Windows81 
References 
App1_Shared 
ViewModel.cs 
App1_Shared 
Class1.cs 
ViewModel.cs 
Partial classes 
mais organizado 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
PhoneImpl.cs 
App1_Windows81 
References 
App1_PCL 
WinImpl.cs 
App1_PCL 
Class1.cs 
IAbstraction.cs 
Inversion of Control (IOC) 
pattern que também funciona com PCL 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
#if block 
fácil e rápido 
#if WINDOWS_PHONE_APP 
StatusBar.GetForCurrentView().HideAsync(); 
Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareBackPressed; 
#endif 
#if WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP 
StatusBar::GetForCurrentView()->HideAsync(); 
#endif
// I can provide my own implementation of the missing APIs !!! 
namespace Windows.UI.ViewManagement 
{ 
Solution 'App1' 
public class StatusBar 
{ 
App1_Phone81 
References 
App1_Shared 
ViewModel.cs 
App1_Windows81 
References 
App1_Shared 
ViewModel.cs 
App1_Shared 
Class1.cs 
ViewModel.cs 
Partial classes 
mais organizado 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
PhoneImpl.cs 
App1_Windows81 
References 
App1_PCL 
WinImpl.cs 
App1_PCL 
Class1.cs 
IAbstraction.cs 
Inversion of Control (IOC) 
pattern que também funciona com PCL 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
#if block 
fácil e rápido 
#if WINDOWS_PHONE_APP 
StatusBar.GetForCurrentView().HideAsync(); 
#endif 
static StatusBar dummy = new StatusBar(); 
public static StatusBar GetForCurrentView() { return dummy; } 
public async Task HideAsync() {} 
} 
}
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
ViewModel.cs 
App1_Windows81 
References 
App1_Shared 
ViewModel.cs 
App1_Shared 
Class1.cs 
ViewModel.cs 
Partial classes 
mais organizado 
// PhoneViewModel.cs 
public partial class ViewModel 
{ 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
PhoneImpl.cs 
App1_Windows81 
References 
App1_PCL 
WinImpl.cs 
App1_PCL 
Class1.cs 
IAbstraction.cs 
Inversion of Control (IOC) 
pattern que também funciona com PCL 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
#if block 
fácil e rápido 
// WindowsViewModel.cs 
public partial class ViewModel 
{ 
async Task HideStatusBarAsync() { } 
} 
async Task HideStatusBarAsync() 
{ 
await StatusBar.GetForCurrentView() 
.HideAsync(); 
} 
} 
// SharedClass1.cs 
await viewModel.HideStatusBarAsync();
// PhonePhoneImpl.cs 
public class PhonePAL : IPlatformAbstractionLayer 
{ 
async Task HideStatusBarAsync() 
{ 
Solution 'App1' 
await StatusBar.GetForCurrentView() 
App1_Phone81 
.HideAsync(); 
References 
App1_Shared 
ViewModel.cs 
App1_Windows81 
} 
} 
// WindowsWinImpl.cs 
References 
public class WindowsPAL: IPlatformAbstractionLayer 
App1_Shared 
{ 
ViewModel.cs 
async Task HideStatusBarAsync() { } 
App1_Shared 
Class1.cs 
ViewModel.cs 
} 
// Shared 
public interface IPlatformAbstractionLayer 
{ 
Task HideStatusBarAsync(); 
Partial classes 
mais organizado 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
PhoneImpl.cs 
App1_Windows81 
References 
App1_PCL 
WinImpl.cs 
App1_PCL 
Class1.cs 
IAbstraction.cs 
Inversion of Control (IOC) 
pattern que também funciona com PCL 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
#if block 
} 
fácil e rápido 
await pal.HideStatusBarAsync();
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
App1_Windows81 
References 
App1_Shared 
App1_Shared 
Class1.cs 
#if block 
fácil e rápido 
Solution 'App1' 
App1_Phone81 
References 
App1_PCL 
PhoneImpl.cs 
App1_Windows81 
References 
App1_PCL 
WinImpl.cs 
App1_PCL 
Class1.cs 
IAbstraction.cs 
Inversion of Control (IOC) 
pattern que também funciona com PCL 
Solution 'App1' 
App1_Phone81 
References 
App1_Shared 
ViewModel.cs 
App1_Windows81 
References 
App1_Shared 
ViewModel.cs 
App1_Shared 
Class1.cs 
ViewModel.cs 
Partial classes 
mais organizado
 
 
 
 
 

 
 
 
 
 
 
 
 

<Page.BottomAppBar> 
<CommandBar> 
<AppBarButton Icon="Accept" Label="Accept" /> 
<AppBarButton Icon="Cancel" Label="Cancel" /> 
<CommandBar.SecondaryCommands> 
<AppBarButton x:Uid="AboutAppBarButton" Icon="Help" /> 
<AppBarButton x:Uid="HomeAppBarButton" Icon="Home" /> 
</CommandBar.SecondaryCommands> 
</CommandBar> 
</Page.BottomAppBar>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Construindo Universal Apps para Windows e Windows Phone
Construindo Universal Apps para Windows e Windows Phone

More Related Content

What's hot

Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11
ColdFusionConference
 
Selenium interview Q&A
Selenium interview Q&ASelenium interview Q&A
Selenium interview Q&A
Pavan Kumar
 
Revisions
RevisionsRevisions
Revisions
swat_kh
 
(Christian heilman) firefox
(Christian heilman) firefox(Christian heilman) firefox
(Christian heilman) firefox
NAVER D2
 

What's hot (17)

Codename one
Codename oneCodename one
Codename one
 
Selenium interview questions
Selenium interview questionsSelenium interview questions
Selenium interview questions
 
Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021Appium Mobile Testing: Nakov at BurgasConf - July 2021
Appium Mobile Testing: Nakov at BurgasConf - July 2021
 
Developing better debug_components
Developing better debug_componentsDeveloping better debug_components
Developing better debug_components
 
Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11Developing html5 mobile applications using cold fusion 11
Developing html5 mobile applications using cold fusion 11
 
Selenium
SeleniumSelenium
Selenium
 
Introduction to Titanium and how to connect with a PHP backend
Introduction to Titanium and how to connect with a PHP backendIntroduction to Titanium and how to connect with a PHP backend
Introduction to Titanium and how to connect with a PHP backend
 
Migrating from JSF1 to JSF2
Migrating from JSF1 to JSF2Migrating from JSF1 to JSF2
Migrating from JSF1 to JSF2
 
An Overview of Selenium
An Overview of SeleniumAn Overview of Selenium
An Overview of Selenium
 
Selenium interview Q&A
Selenium interview Q&ASelenium interview Q&A
Selenium interview Q&A
 
Best Strategy for Developing App Architecture and High Quality App
Best Strategy for Developing App Architecture and High Quality AppBest Strategy for Developing App Architecture and High Quality App
Best Strategy for Developing App Architecture and High Quality App
 
Appium basics
Appium basicsAppium basics
Appium basics
 
Revisions
RevisionsRevisions
Revisions
 
Selenium test automation
Selenium test automationSelenium test automation
Selenium test automation
 
Android programming-basics
Android programming-basicsAndroid programming-basics
Android programming-basics
 
(Christian heilman) firefox
(Christian heilman) firefox(Christian heilman) firefox
(Christian heilman) firefox
 
Hybrid framework
Hybrid frameworkHybrid framework
Hybrid framework
 

Viewers also liked

Viewers also liked (7)

Loja de aplicativos e portal do desenvolvedor
Loja de aplicativos e portal do desenvolvedorLoja de aplicativos e portal do desenvolvedor
Loja de aplicativos e portal do desenvolvedor
 
Homo Appiens - O ser humano que desenvolve Apps. Você é um?
Homo Appiens - O ser humano que desenvolve Apps. Você é um?Homo Appiens - O ser humano que desenvolve Apps. Você é um?
Homo Appiens - O ser humano que desenvolve Apps. Você é um?
 
Nokia Asha App Development - Part 1
Nokia Asha App Development - Part 1Nokia Asha App Development - Part 1
Nokia Asha App Development - Part 1
 
Como a Microsoft faz software: Desgerenciando Pessoas
Como a Microsoft faz software: Desgerenciando PessoasComo a Microsoft faz software: Desgerenciando Pessoas
Como a Microsoft faz software: Desgerenciando Pessoas
 
O que há de novo no Windows Phone
O que há de novo no Windows PhoneO que há de novo no Windows Phone
O que há de novo no Windows Phone
 
La place des dispositifs médicaux dans la stratégie nationale de santé
La place des dispositifs médicaux dans la stratégie nationale de santéLa place des dispositifs médicaux dans la stratégie nationale de santé
La place des dispositifs médicaux dans la stratégie nationale de santé
 
Microsoft & Internet of Things
Microsoft & Internet of ThingsMicrosoft & Internet of Things
Microsoft & Internet of Things
 

Similar to Construindo Universal Apps para Windows e Windows Phone

Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説
shinobu takahashi
 
android training_material ravy ramio
android training_material ravy ramioandroid training_material ravy ramio
android training_material ravy ramio
slesulvy
 
Classification of the document
Classification of the documentClassification of the document
Classification of the document
think_cloud
 
Btb017 David
Btb017 DavidBtb017 David
Btb017 David
Rohit Ray
 
Lecture 4 display_principles
Lecture 4 display_principlesLecture 4 display_principles
Lecture 4 display_principles
moduledesign
 
Windows phone 8 overview
Windows phone 8 overviewWindows phone 8 overview
Windows phone 8 overview
codeblock
 

Similar to Construindo Universal Apps para Windows e Windows Phone (20)

Construindo Universal apps para Windows e Windows Phone
Construindo Universal apps para Windows e Windows PhoneConstruindo Universal apps para Windows e Windows Phone
Construindo Universal apps para Windows e Windows Phone
 
Deeper into Windows 10 Development
Deeper into Windows 10 DevelopmentDeeper into Windows 10 Development
Deeper into Windows 10 Development
 
Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説Windows Phone 8.1 アプリ開発徹底解説
Windows Phone 8.1 アプリ開発徹底解説
 
android training_material ravy ramio
android training_material ravy ramioandroid training_material ravy ramio
android training_material ravy ramio
 
Classification of the document
Classification of the documentClassification of the document
Classification of the document
 
Ng2 cli
Ng2 cliNg2 cli
Ng2 cli
 
Embedded c lab and keil c manual
Embedded  c  lab  and keil c  manualEmbedded  c  lab  and keil c  manual
Embedded c lab and keil c manual
 
echo-o & Adobe Air App Dev - BarCamp Saigon 1
echo-o & Adobe Air App Dev - BarCamp Saigon 1echo-o & Adobe Air App Dev - BarCamp Saigon 1
echo-o & Adobe Air App Dev - BarCamp Saigon 1
 
Btb017 David
Btb017 DavidBtb017 David
Btb017 David
 
Lecture 4 display_principles
Lecture 4 display_principlesLecture 4 display_principles
Lecture 4 display_principles
 
Windows 8 BootCamp
Windows 8 BootCampWindows 8 BootCamp
Windows 8 BootCamp
 
Google Glass Mirror API Setup
Google Glass Mirror API SetupGoogle Glass Mirror API Setup
Google Glass Mirror API Setup
 
Lecture 4 display_principles
Lecture 4 display_principlesLecture 4 display_principles
Lecture 4 display_principles
 
Windows phone 8 overview
Windows phone 8 overviewWindows phone 8 overview
Windows phone 8 overview
 
DDive11 - Mobile Development For Domino
DDive11 - Mobile Development For DominoDDive11 - Mobile Development For Domino
DDive11 - Mobile Development For Domino
 
Power Apps Component Framework - Dynamics Power! 365 Paris 2019
Power Apps Component Framework - Dynamics Power! 365 Paris 2019  Power Apps Component Framework - Dynamics Power! 365 Paris 2019
Power Apps Component Framework - Dynamics Power! 365 Paris 2019
 
Apache cordova
Apache cordovaApache cordova
Apache cordova
 
Intro to Android Programming
Intro to Android ProgrammingIntro to Android Programming
Intro to Android Programming
 
Titanium appcelerator my first app
Titanium appcelerator my first appTitanium appcelerator my first app
Titanium appcelerator my first app
 
Universal Apps Oct 2014
Universal Apps Oct 2014Universal Apps Oct 2014
Universal Apps Oct 2014
 

More from Marlon Luz

Fazendo do Scrum um Game para Melhor Adoção do Framework
Fazendo do Scrum um Game para Melhor Adoção do FrameworkFazendo do Scrum um Game para Melhor Adoção do Framework
Fazendo do Scrum um Game para Melhor Adoção do Framework
Marlon Luz
 

More from Marlon Luz (18)

Agilidade em aplicativos mobile
Agilidade em aplicativos mobileAgilidade em aplicativos mobile
Agilidade em aplicativos mobile
 
Loja de Aplicativos e Portal do Desenvolvedor
Loja de Aplicativos e Portal do DesenvolvedorLoja de Aplicativos e Portal do Desenvolvedor
Loja de Aplicativos e Portal do Desenvolvedor
 
Desenvolvendo Apps para Windows phone
Desenvolvendo Apps para Windows phoneDesenvolvendo Apps para Windows phone
Desenvolvendo Apps para Windows phone
 
Desenvolvimento para Windows Phone
Desenvolvimento para Windows PhoneDesenvolvimento para Windows Phone
Desenvolvimento para Windows Phone
 
Babel fish, Guias e APIs
Babel fish, Guias e APIsBabel fish, Guias e APIs
Babel fish, Guias e APIs
 
Desenvolvimento de Apps para celulares Nokia Lumia & Nokia asha
Desenvolvimento de Apps para celulares Nokia Lumia & Nokia ashaDesenvolvimento de Apps para celulares Nokia Lumia & Nokia asha
Desenvolvimento de Apps para celulares Nokia Lumia & Nokia asha
 
Potencialidades de um telefone celular para pessoas com necessidades especiais
Potencialidades de um telefone celular para pessoas com necessidades especiaisPotencialidades de um telefone celular para pessoas com necessidades especiais
Potencialidades de um telefone celular para pessoas com necessidades especiais
 
Nokia Asha App Development - Part 2
Nokia Asha App Development - Part 2Nokia Asha App Development - Part 2
Nokia Asha App Development - Part 2
 
Game Development for Nokia Asha Devices with Java ME #2
Game Development for Nokia Asha Devices with Java ME #2Game Development for Nokia Asha Devices with Java ME #2
Game Development for Nokia Asha Devices with Java ME #2
 
Game Development for Nokia Asha Devices with Java ME #1
Game Development for Nokia Asha Devices with Java ME #1Game Development for Nokia Asha Devices with Java ME #1
Game Development for Nokia Asha Devices with Java ME #1
 
Distribua sua App para o mundo e ganhe $$
Distribua sua App para o mundo e ganhe $$Distribua sua App para o mundo e ganhe $$
Distribua sua App para o mundo e ganhe $$
 
Desenvolvendo Games para Nokia Asha
Desenvolvendo Games para Nokia AshaDesenvolvendo Games para Nokia Asha
Desenvolvendo Games para Nokia Asha
 
Programação para mobile: Serviços e Aplicativos
Programação para mobile: Serviços e AplicativosProgramação para mobile: Serviços e Aplicativos
Programação para mobile: Serviços e Aplicativos
 
In-app purchasing for java me apps
In-app purchasing for java me appsIn-app purchasing for java me apps
In-app purchasing for java me apps
 
Aprenda a programar somente o necessário com Mogli: O menino lobo
Aprenda a programar somente o necessário com Mogli: O menino loboAprenda a programar somente o necessário com Mogli: O menino lobo
Aprenda a programar somente o necessário com Mogli: O menino lobo
 
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do frameworkAgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
AgileBrazil - Fazendo do Scrum um Game para melhor adoção do framework
 
Conhecendo gamification
Conhecendo gamificationConhecendo gamification
Conhecendo gamification
 
Fazendo do Scrum um Game para Melhor Adoção do Framework
Fazendo do Scrum um Game para Melhor Adoção do FrameworkFazendo do Scrum um Game para Melhor Adoção do Framework
Fazendo do Scrum um Game para Melhor Adoção do Framework
 

Recently uploaded

IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
Enterprise Knowledge
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
Joaquim Jorge
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
giselly40
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
vu2urc
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Recently uploaded (20)

Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdfThe Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
The Role of Taxonomy and Ontology in Semantic Layers - Heather Hedden.pdf
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
Strategies for Unlocking Knowledge Management in Microsoft 365 in the Copilot...
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 
Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
Apidays Singapore 2024 - Building Digital Trust in a Digital Economy by Veron...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf[2024]Digital Global Overview Report 2024 Meltwater.pdf
[2024]Digital Global Overview Report 2024 Meltwater.pdf
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Artificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and MythsArtificial Intelligence: Facts and Myths
Artificial Intelligence: Facts and Myths
 
What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?What Are The Drone Anti-jamming Systems Technology?
What Are The Drone Anti-jamming Systems Technology?
 
CNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of ServiceCNv6 Instructor Chapter 6 Quality of Service
CNv6 Instructor Chapter 6 Quality of Service
 
Histor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slideHistor y of HAM Radio presentation slide
Histor y of HAM Radio presentation slide
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 

Construindo Universal Apps para Windows e Windows Phone

  • 1.
  • 3.
  • 4.          
  • 5.     
  • 7.
  • 8. Um Código-fonte Um Projeto Um Binário Múltiplas Platformas!
  • 9.
  • 10.
  • 11. Perspectiva do Usuário: “Compro a app apenas uma vez, e posso usá-la em todos os meus dispositivos Windows. Configurações e compras “in-app” migram entre meus dispositivos" reuso “A app tem tema e funcionalidades similares nos dois dispositivos" reuso “Mas a experiência e recursos são adaptados ao dispositivo” com adaptações
  • 12. Definição da Store: Use o mesmo Package Full Name (PFN) ao fazer o upload nas duas Stores (Windows Phone e Windows) • O “badge universal” aparecerá nas listagens das Stores • Compre a app em uma store, e o mesmo PFN contará como comprado na outra • Compre um item durável em uma store, e o mesmo contará como comprado na outra • Dados poderão migrar entre apps em múltiplos dispositivos desde que as mesmas compartilhem o PFN
  • 14.
  • 15.
  • 16.         
  • 17. Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs Page1.xaml App.xaml Asset1.png Shared Projects compartilhando código Solution 'App1' App1_Phone81 References App1_PCL App.xaml App1_Windows81 References App1_PCL App.xaml App1_PCL Class1.cs Page1.xaml Asset1.png .NET PCLs compartilhando binários Solution 'App1' App1_Phone81 MyData.cs App1_Windows81 MyData.cs MyWebservice MyData.cs Linked files compartilhando código
  • 18. Solution 'App1' App1_Phone81 Class1.cs Page1.xaml App.xaml Asset1.png App1_Windows81 Class1.cs Page1.xaml App.xaml Asset1.png Solution 'App1' App1_Phone81 MyData.cs App1_Windows81 MyData.cs MyWebservice MyData.cs Linked files compartilhando código Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs Page1.xaml App.xaml Asset1.png Shared Projects compartilhando código Solution 'App1' App1_Phone81 References App1_PCL App.xaml App1_Windows81 References App1_PCL App.xaml App1_PCL Class1.cs Page1.xaml Asset1.png .NET PCLs compartilhando binários
  • 19. Solution 'App1' App1_Phone81 Class1.cs Page1.xaml App.xaml Asset1.png App1_Windows81 Class1.cs Page1.xaml App.xaml Asset1.png Solution 'App1' App1_Phone81 MyData.cs App1_Windows81 MyData.cs MyWebservice MyData.cs Linked files compartilhando código Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs Page1.xaml App.xaml Asset1.png Shared Projects compartilhando código Solution 'App1' App1_Phone81 References App1_PCL App.xaml App1_Windows81 References App1_PCL App.xaml App1_PCL Class1.cs Page1.xaml Asset1.png .NET PCLs compartilhando binários
  • 20. Solution 'App1' App1_Phone81 Class1.cs Page1.xaml App.xaml Asset1.png App1_Windows81 Class1.cs Page1.xaml App.xaml Asset1.png Solution 'App1' App1_Phone81 MyData.cs App1_Windows81 MyData.cs MyWebservice MyData.cs Linked files compartilhando código Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs Page1.xaml App.xaml Asset1.png Shared Projects compartilhando código Solution 'App1' App1_Phone81 References App1_PCL App.xaml App1_Windows81 References App1_PCL App.xaml App1_PCL Class1.cs Page1.xaml Asset1.png .NET PCLs compartilhando binários
  • 21. Solution 'App1' App1_Phone81 Class1.cs Page1.xaml App.xaml Asset1.png App1_Windows81 Class1.cs Page1.xaml App.xaml Asset1.png Solution 'App1' App1_Phone81 MyData.cs App1_Windows81 MyData.cs MyWebservice MyData.cs Linked files compartilhando código Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs Page1.xaml App.xaml Asset1.png Shared Projects compartilhando código Solution 'App1' App1_Phone81 References App1_PCL App.xaml App1_Windows81 References App1_PCL App.xaml App1_PCL Class1.cs Page1.xaml Asset1.png .NET PCLs compartilhando binários
  • 22.
  • 23. Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared/PCL Class1.cs private void OnSuspending(object sender, SuspendingEventArgs e) { // TODO: Save application state and stop any background activity ApplicationData.Current.RoamingSettings.Values["IsBurnt"] = model.IsBurnt; ApplicationData.Current.RoamingSettings.Values["Velocity"] = model.Velocity; } // TODO: Load state from previously suspended application model.IsBurnt = (bool?)ApplicationData.Current.RoamingSettings.Values["IsBurnt"] ?? false; model.Velocity = (double?)ApplicationData.Current.RoamingSettings.Values["Velocity"] ?? 1.0;
  • 24. Dentro do meu código comum, preciso “ajustá-lo” com uma chamada específica de um dispositivo. Como fazer isto?
  • 25. Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs #if block fácil e rápido Solution 'App1' App1_Phone81 References App1_PCL PhoneImpl.cs App1_Windows81 References App1_PCL WinImpl.cs App1_PCL Class1.cs IAbstraction.cs Inversion of Control (IOC) pattern que também funciona com PCL Solution 'App1' App1_Phone81 References App1_Shared ViewModel.cs App1_Windows81 References App1_Shared ViewModel.cs App1_Shared Class1.cs ViewModel.cs Partial classes mais organizado
  • 26. Solution 'App1' App1_Phone81 References App1_Shared ViewModel.cs App1_Windows81 References App1_Shared ViewModel.cs App1_Shared Class1.cs ViewModel.cs Partial classes mais organizado Solution 'App1' App1_Phone81 References App1_PCL PhoneImpl.cs App1_Windows81 References App1_PCL WinImpl.cs App1_PCL Class1.cs IAbstraction.cs Inversion of Control (IOC) pattern que também funciona com PCL Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs #if block fácil e rápido #if WINDOWS_PHONE_APP StatusBar.GetForCurrentView().HideAsync(); Windows.Phone.UI.Input.HardwareButtons.BackPressed += HardwareBackPressed; #endif #if WINAPI_FAMILY==WINAPI_FAMILY_PHONE_APP StatusBar::GetForCurrentView()->HideAsync(); #endif
  • 27. // I can provide my own implementation of the missing APIs !!! namespace Windows.UI.ViewManagement { Solution 'App1' public class StatusBar { App1_Phone81 References App1_Shared ViewModel.cs App1_Windows81 References App1_Shared ViewModel.cs App1_Shared Class1.cs ViewModel.cs Partial classes mais organizado Solution 'App1' App1_Phone81 References App1_PCL PhoneImpl.cs App1_Windows81 References App1_PCL WinImpl.cs App1_PCL Class1.cs IAbstraction.cs Inversion of Control (IOC) pattern que também funciona com PCL Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs #if block fácil e rápido #if WINDOWS_PHONE_APP StatusBar.GetForCurrentView().HideAsync(); #endif static StatusBar dummy = new StatusBar(); public static StatusBar GetForCurrentView() { return dummy; } public async Task HideAsync() {} } }
  • 28. Solution 'App1' App1_Phone81 References App1_Shared ViewModel.cs App1_Windows81 References App1_Shared ViewModel.cs App1_Shared Class1.cs ViewModel.cs Partial classes mais organizado // PhoneViewModel.cs public partial class ViewModel { Solution 'App1' App1_Phone81 References App1_PCL PhoneImpl.cs App1_Windows81 References App1_PCL WinImpl.cs App1_PCL Class1.cs IAbstraction.cs Inversion of Control (IOC) pattern que também funciona com PCL Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs #if block fácil e rápido // WindowsViewModel.cs public partial class ViewModel { async Task HideStatusBarAsync() { } } async Task HideStatusBarAsync() { await StatusBar.GetForCurrentView() .HideAsync(); } } // SharedClass1.cs await viewModel.HideStatusBarAsync();
  • 29. // PhonePhoneImpl.cs public class PhonePAL : IPlatformAbstractionLayer { async Task HideStatusBarAsync() { Solution 'App1' await StatusBar.GetForCurrentView() App1_Phone81 .HideAsync(); References App1_Shared ViewModel.cs App1_Windows81 } } // WindowsWinImpl.cs References public class WindowsPAL: IPlatformAbstractionLayer App1_Shared { ViewModel.cs async Task HideStatusBarAsync() { } App1_Shared Class1.cs ViewModel.cs } // Shared public interface IPlatformAbstractionLayer { Task HideStatusBarAsync(); Partial classes mais organizado Solution 'App1' App1_Phone81 References App1_PCL PhoneImpl.cs App1_Windows81 References App1_PCL WinImpl.cs App1_PCL Class1.cs IAbstraction.cs Inversion of Control (IOC) pattern que também funciona com PCL Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs #if block } fácil e rápido await pal.HideStatusBarAsync();
  • 30. Solution 'App1' App1_Phone81 References App1_Shared App1_Windows81 References App1_Shared App1_Shared Class1.cs #if block fácil e rápido Solution 'App1' App1_Phone81 References App1_PCL PhoneImpl.cs App1_Windows81 References App1_PCL WinImpl.cs App1_PCL Class1.cs IAbstraction.cs Inversion of Control (IOC) pattern que também funciona com PCL Solution 'App1' App1_Phone81 References App1_Shared ViewModel.cs App1_Windows81 References App1_Shared ViewModel.cs App1_Shared Class1.cs ViewModel.cs Partial classes mais organizado
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.      
  • 38.
  • 39.         
  • 40.
  • 41. <Page.BottomAppBar> <CommandBar> <AppBarButton Icon="Accept" Label="Accept" /> <AppBarButton Icon="Cancel" Label="Cancel" /> <CommandBar.SecondaryCommands> <AppBarButton x:Uid="AboutAppBarButton" Icon="Help" /> <AppBarButton x:Uid="HomeAppBarButton" Icon="Home" /> </CommandBar.SecondaryCommands> </CommandBar> </Page.BottomAppBar>
  • 42.
  • 43.                