SlideShare une entreprise Scribd logo
1  sur  61
Bartosz.zaremba@studentpartner.com
AZURE
Mobile Services
Agenda
1. Wprowadzenie do Mobile Services
2. Projekt – opis, funkcjonalności
3. Tworzenie projektu
4. Mobile Services w praktyce
• Praca z danymi
• Działanie po stronie serwera
• Uwierzytelnianie
• Notyfikacje Push
• Łączenie z usługami zewnętrznymi (Sendgrid,Schedule)
• Łączenie z usługami Azure (zdjęcia – Azure Storage)
Czym jest Azure Mobile
Service?
Projekt
Projekt ma na celu stworzenie programu pozwalającego
zarządzad zadaniami w grupie sposobem ala Agile.
Osoba posiadająca aplikację na Windows 8, będzie mogła
tworzyd grupy, które maja na celu wykonanie wypisanych
zadao. Twórca grupy będzie miał możliwośd dodawania zadao
oraz grupowiczy.
Każdy użytkownik posiadający wersję mobilną aplikacji
(Windows Phone, Android, iPhone lub przeglądarka HTML)
będzie mógł zobaczyd do jakich grup należy oraz jakie zadania
znajdują się w grupie. Dodatkowo będzie mógł przypisad sobie
zadanie oraz zaznaczyd, że skooczył je lub odpisad od Siebie.
Skrócony opis projektu – Agile
Notepad
W programie można dodawad grupy do których twórca (administrator) może
dodawad zadania i grupowiczy.
Wybrane zadania każdy możne przypisywad sobie do zrobienia. Dodatkowo po
przypisaniu zadania można zaznaczyd, że jest ono zrobione lub „odpisad” od siebie.
Aby wejśd do programu należy się uwierzytelnid za pomocą konta FB.
Kiedy właściciel doda zadanie do grupy wszyscy należacy do tej grupy zostaną
poinformowani o nowych zadaniach.
Raz na tydzieo zostaje rozesłany mail do wszystkich o wolnych zadaniach.
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Jak się tworzy projekt -
początek
Jak się tworzy projekt -
początek
Jak się tworzy projekt -
początek
App.xaml.cs
public static MobileServiceClient MobileService = new
MobileServiceClient("https://agilenotepad.azure-mobile.net/", "[kod AMS]");
Jak się tworzy projekt -
początek
App.xaml.cs
public static MobileServiceClient MobileService = new
MobileServiceClient("https://agilenotepad.azure-mobile.net/", "[kod AMS]");
PORTAL
http://manage.windowsazure.com
DEMO
Projekt bazy danych
Tabele :
• Profile
• Group
• Connect
• Job
• Comments
public class Comment
{
[DataMember(Name = "id")]
public string IdComment { get; set; }
public string Desc { get; set; }
//foreign
public string IdTask { get; set; }
public string IdUser { get; set; }
}
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Operacje CRUD –
CREATE/DELETE
DEMO
Tworzenie/usuwanie grupy zadaniowej
Kod – stworzenie grupy
1.
<Button x:Name="btnAddGroup" HorizontalAlignment="Left"
Style="{StaticResource AddAppBarButtonStyle}"
View:EventHandlers.Attach="Click => OpenAddGroupCharm()" />
public void OpenAddGroupCharm()
{CharmService.OpenCharm("AddGroup");}
2.
<StackPanel Margin="10,50,10,15">
<TextBlock>Name group</TextBlock>
<TextBox Name="txtNameGroup" />
<Button Name="btnSaveName" Content="CREATE"
CommandParameter="{Binding Path=Text,ElementName=txtNameGroup}"
Command="{Binding AddNewGroup}"/>
</StackPanel>
3.Wysłanie informacji o dodaniu grupy
private DelegateCommand addNewGroup;
public ICommand AddNewGroup
{
get
{
if (addNewGroup == null)
{
addNewGroup = new DelegateCommand((x) =>
{
DispatchedMessenger.Instance.Send(new
AddGroupMessage(x as String));
});
}
return addNewGroup;
}
}
Przechwycenie komunikatu
[MessageHandler]
public void BackgroundMessageHandler(AddGroupMessage message)
{
AddGroup(message.NameGroup);
}
public async void AddGroup(string NameG)
{
try
{
Group item = new Group { IdUser =
MainSettings.user.UserId, Name = NameG };
await groupTable.InsertAsync(item);
ListGroups.Add(item);
MessageBoxService.Notify("Grupa została dodana",
"Dodawanie grupy");
}
catch (Exception e)
{
MessageBoxService.Notify(e.Message, "Dodawanie grupy");
}
}
public static MobileServiceClient MobileService = new
MobileServiceClient("https://agilenotepad.azure-mobile.net/", "");
private IMobileServiceTable<Group> groupTable =
App.MobileService.GetTable<Group>();
await groupTable.InsertAsync(item);
function insert(item, user, request) {
var groupTable = tables.getTable('Group');
groupTable.where({Name: item.Name}).
read({success: checkName});
function checkName(results) {
if (results.length > 0) {
console.log("Nie dodawaj grupy");
request.respond(statusCodes.BAD_REQUEST,"Już istnieje
taka grupa");
} else {
console.log("Dodaj grupe");
request.execute();
}
}
}
Kod - usunięcie grupy
public static MobileServiceClient MobileService = new
MobileServiceClient("https://agilenotepad.azure-mobile.net/", "");
private IMobileServiceTable<Group> groupTable =
App.MobileService.GetTable<Group>();
Group item = new Group { id = xid };
await groupTable.DeleteAsync(item);
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Operacje CRUD - READ
Wyświetlanie grupy zadaniowej do któej się należy lub się
stworzyło.
DEMO
Kod – wyświetlenie grupy
private IMobileServiceTable<Group> groupTable =
App.MobileService.GetTable<Group>();
Dictionary<string, string> myParam = new Dictionary<string, string>();
myParam.Add("ifMyGroups", "true");
List<Group> list = await App.MobileService.GetTable<Group>().
Skip(0).WithParameters(myParam).ToListAsync();
Dictionary<string, string> myParam = new Dictionary<string, string>();
myParam.Add("ifMyGroups", "false");
List<Group> list = await App.MobileService.GetTable<Group>().
Skip(0).WithParameters(myParam).ToListAsync();
function read(query, user, request) {
if( request.parameters == null)
console.log("Nie ma parametrow");
if(request.parameters.ifMyGroups == 'true')
{
query.where({ IdUser: user.userId });
request.execute();
console.log(„Pobrało moje grupy");
}
else
{
var sql = "SELECT g.id, g.Name, g.IdUser FROM
[agilenotepad].[Connect] c,[agilenotepad].[Group] g WHERE c.IdGroup =
g.id AND c.IdUser = ?;";
mssql.query(sql, user.userId, {
success: function(results) {
request.respond(statusCodes.OK, results);
}
});
}
}
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Operacje CRUD - UPDATE
Zaktualizowanie profiu użytkownika
DEMO
Kod – tworzenie profilu
public static MobileServiceClient MobileService = new
MobileServiceClient("https://agilenotepad.azure-mobile.net/", "");
private IMobileServiceTable<Profile> profileTable;
profileTable = App.MobileService.GetTable<Profile>();
profileTable.UpdateAsync(MainSettings.UserInformation);
function update(item, user, request) {
request.execute({
success: function() {
request.respond();
push.wns.sendToastText04(item.channel, {
text1: "Profil zaktualizowany"
}, {
success: function(pushResponse) {
console.log(„Wysłana notyfikacja:", pushResponse);
}
});
}
});
}
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Uwierzytelnianie
w Mobile Services
• Microsoft Account
• Facebook login
• Twitter login
• Google login
FB - uwierzytelnianie
FB - uwierzytelnianie
Ustawenia w Mobile Services
Ustawenia w Mobile Services
Aplikacja
Uwierzytelnianie w aplikacji przez konto FB
DEMO
Kod – tworzenie konta po
uwierzytelnieniu
public static MobileServiceClient MobileService = new
MobileServiceClient("https://agilenotepad.azure-mobile.net/",
"");
MainSettings.user = await
App.MobileService.LoginAsync(MobileServiceAuthenticationProvide
r.Facebook);
private IMobileServiceTable<Profile> profileTable =
App.MobileService.GetTable<Profile>();
await profileTable.InsertAsync(entity);
function insert(item, user, request) {
var profileTable = tables.getTable('Profile');
profileTable.where({
IdUser: item.IdUser
}).read({
success: checkPermissions
});
function checkPermissions(results) {
if (results.length > 0) {
//console.log("Nie dodawaj użytkownika");
request.respond();
} else {
//console.log("Dodaj użytkownika");
request.execute();
}
}
}
Kod – pobieranie informacji o
użytkowniku
public static MobileServiceClient MobileService = new
MobileServiceClient("https://agilenotepad.azure-mobile.net/", "");
private IMobileServiceTable<Profile> profileTable;
profileTable = App.MobileService.GetTable<Profile>();
List<Profile> profileUsers = await (from p in profileTable
where p.IdUser == MainSettings.user.UserId
select p).ToListAsync();
function read(query, user, request) {
request.execute(); }
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Kod – pobranie zadania z
grupy
taskTable = App.MobileService.GetTable<Job>();
MobileServiceTableQuery<Job> query = taskTable.Where(x =>
x.IdGroup == group.id);
Kod dołączenie użytkownika
do grupy
connectTable = App.MobileService.GetTable<Connect>();
await connectTable.InsertAsync(new Connect { IdGroup = group.id, IdUser
= id });
profileTable = App.MobileService.GetTable<Profile>();
List<Profile> l = await profileTable.Where(x => x.IdUser ==
id).Take(1).ToListAsync();
Co można zrobić po stronie
serwera
• Walidacja • Czy grupa istnieje
• Czy użytkownik już istnieje
• Selekcja
• Pobieranie grup do których należy
grupowicz
• Pobranie grup których właścicielem jest
grupowicz
• Notyfikacje • Wysłanie do wszyskich członków
grupy informację o dodaniu
zadania do grupy
• Potwierdzenie zmiany profilu
Skypty
Pobranie grupy do ktorej należy użytkownik
DEMO
function read(query, user, request) {
if(request.parameters.kindQuery === "PeopleInGroup")
{
var sql = 'SELECT p.id,p.Name,p.Email,p.IdUser,p.channel FROM
[agilenotepad].[Profile] p,[agilenotepad].[Connect] c WHERE p.IdUser =
c.IdUSer AND c.IdGroup = ?;';
mssql.query(sql, [request.parameters.numberGroup], {
success: function(results) {
request.respond(statusCodes.OK, results);
}
});
}
else
request.execute();
}
Po za tym
• Modyfikowad żądanie
• Modyfikowad odpowiedź
• Walidowad dane
• Odczytywad i zapisywad dane osobno
• Używad autoryzacji użytkownika
• Używad notyfikacji push
• Wysyład dodatkowe żądania HTTP
• Wychwytywad błedy i debugowad kod
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Notyfikacje Push - sklep
Notyfikacje Push – Mobile
Services
Notyfikacje Push – aplikacja
Notyfikacje push – wysyłanie informacji wszystkim członką
grupy
DEMO
function insert(item, user, request) {
console.log(item.id);
request.execute(
{
success: function() {
var sql = "SELECT p.channel FROM [agilenotepad].[Job]
j,[agilenotepad].[Connect] c, [agilenotepad].[Profile] p WHERE p.IdUser = c.IdUser AND
c.IdGroup = j.IdGroup AND j.id = ?";
mssql.query(sql, [item.id], {
success: function(results) {
if (results.length > 0) {
for(var i=0;0< results.length;i++){
push.wns.sendToastText04(results[i].channel, {
text1: 'new task'
}, {
success: function(pushResponse) {
console.log("Sent push:", pushResponse);
}
});
}
}
}
}); request.respond();
}
}
);
}
Funkcjonalności
• Uwierzytelnianie
• Stworzenie profilu
• Dodanie/usunięcie grupy
• Wyświetlenie grup do których się należy lub się
stworzyło
• Dodanie/usunięce zadania z grupy
• Dołączenie/usunięcie użytkownika z grupy
• Poinformowanie grupowiczy o nowym zadaniu
• Wysłanie maila informującego o zadaniach
Wysyłanie maili z Sendgrid
Wysyłanie maili z Sendgrid
Mobile services
Mobile services

Contenu connexe

Similaire à Mobile services

[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...Future Processing
 
AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawyApptension
 
Microsoft Azure - Mobility & Security - wybrane usługi bezpieczeństwa
Microsoft Azure - Mobility & Security - wybrane usługi bezpieczeństwaMicrosoft Azure - Mobility & Security - wybrane usługi bezpieczeństwa
Microsoft Azure - Mobility & Security - wybrane usługi bezpieczeństwaMaciej Sobianek
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJSSages
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztatyintive
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?PHPCon Poland
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznieSages
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptJacek Okrojek
 
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuGrzegorz Bartman
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Droptica
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Natalia Stanko
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Quick-Solution
 
Java authentication and authorization service
Java authentication and authorization serviceJava authentication and authorization service
Java authentication and authorization servicePROSKAR
 
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationExam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationMaciej Zbrzezny
 
Uprawnienia W Sql Server 2005
Uprawnienia W Sql Server 2005Uprawnienia W Sql Server 2005
Uprawnienia W Sql Server 2005rypki
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbaćBartosz Ratajczyk
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja BazyPrzemysław ...
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Cloudskraqa
 
WebView security on iOS (PL)
WebView security on iOS (PL)WebView security on iOS (PL)
WebView security on iOS (PL)lpilorz
 

Similaire à Mobile services (20)

[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
[JuraSIC! Meetup] Krzysztof Sikora- Jak Service Fabric rozwiąże twoje problem...
 
AngularJS - podstawy
AngularJS - podstawyAngularJS - podstawy
AngularJS - podstawy
 
Microsoft Azure - Mobility & Security - wybrane usługi bezpieczeństwa
Microsoft Azure - Mobility & Security - wybrane usługi bezpieczeństwaMicrosoft Azure - Mobility & Security - wybrane usługi bezpieczeństwa
Microsoft Azure - Mobility & Security - wybrane usługi bezpieczeństwa
 
Podstawy AngularJS
Podstawy AngularJSPodstawy AngularJS
Podstawy AngularJS
 
Patronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 WarsztatyPatronage 2016 Windows 10 Warsztaty
Patronage 2016 Windows 10 Warsztaty
 
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
Silverlight i PHP - jak budować interfejs nowoczesnych aplikacji internetowych?
 
Silverlight i PHP
Silverlight i PHPSilverlight i PHP
Silverlight i PHP
 
Angular 4 pragmatycznie
Angular 4 pragmatycznieAngular 4 pragmatycznie
Angular 4 pragmatycznie
 
AADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScriptAADays 2015 - Jak to zrobic w JavaScript
AADays 2015 - Jak to zrobic w JavaScript
 
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatuBazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
Bazy danych w Drupalu 7. Przygotowanie tabeli przechowującej wpisy chatu
 
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
Uwierzytelnianie dwuetapowe (2FA) w Drupalu [PL]
 
Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2Prostota i mozliwosci symfony2
Prostota i mozliwosci symfony2
 
Bohater UI bez front end developera ?
Bohater UI bez front end developera ?Bohater UI bez front end developera ?
Bohater UI bez front end developera ?
 
Java authentication and authorization service
Java authentication and authorization serviceJava authentication and authorization service
Java authentication and authorization service
 
Exam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows ApplicationExam: 70-511 Enhancing Usability - Windows Application
Exam: 70-511 Enhancing Usability - Windows Application
 
Uprawnienia W Sql Server 2005
Uprawnienia W Sql Server 2005Uprawnienia W Sql Server 2005
Uprawnienia W Sql Server 2005
 
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
"Administrator z przypadku" - Jak działa SQL Server i jak o niego dbać
 
Migracja I Integracja Bazy
Migracja I Integracja BazyMigracja I Integracja Bazy
Migracja I Integracja Bazy
 
Michał Dec - Quality in Clouds
Michał Dec - Quality in CloudsMichał Dec - Quality in Clouds
Michał Dec - Quality in Clouds
 
WebView security on iOS (PL)
WebView security on iOS (PL)WebView security on iOS (PL)
WebView security on iOS (PL)
 

Mobile services

  • 1.
  • 4. Agenda 1. Wprowadzenie do Mobile Services 2. Projekt – opis, funkcjonalności 3. Tworzenie projektu 4. Mobile Services w praktyce • Praca z danymi • Działanie po stronie serwera • Uwierzytelnianie • Notyfikacje Push • Łączenie z usługami zewnętrznymi (Sendgrid,Schedule) • Łączenie z usługami Azure (zdjęcia – Azure Storage)
  • 5. Czym jest Azure Mobile Service?
  • 6. Projekt Projekt ma na celu stworzenie programu pozwalającego zarządzad zadaniami w grupie sposobem ala Agile. Osoba posiadająca aplikację na Windows 8, będzie mogła tworzyd grupy, które maja na celu wykonanie wypisanych zadao. Twórca grupy będzie miał możliwośd dodawania zadao oraz grupowiczy. Każdy użytkownik posiadający wersję mobilną aplikacji (Windows Phone, Android, iPhone lub przeglądarka HTML) będzie mógł zobaczyd do jakich grup należy oraz jakie zadania znajdują się w grupie. Dodatkowo będzie mógł przypisad sobie zadanie oraz zaznaczyd, że skooczył je lub odpisad od Siebie.
  • 7. Skrócony opis projektu – Agile Notepad W programie można dodawad grupy do których twórca (administrator) może dodawad zadania i grupowiczy. Wybrane zadania każdy możne przypisywad sobie do zrobienia. Dodatkowo po przypisaniu zadania można zaznaczyd, że jest ono zrobione lub „odpisad” od siebie. Aby wejśd do programu należy się uwierzytelnid za pomocą konta FB. Kiedy właściciel doda zadanie do grupy wszyscy należacy do tej grupy zostaną poinformowani o nowych zadaniach. Raz na tydzieo zostaje rozesłany mail do wszystkich o wolnych zadaniach.
  • 8. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 9. Jak się tworzy projekt - początek
  • 10. Jak się tworzy projekt - początek
  • 11. Jak się tworzy projekt - początek App.xaml.cs public static MobileServiceClient MobileService = new MobileServiceClient("https://agilenotepad.azure-mobile.net/", "[kod AMS]");
  • 12. Jak się tworzy projekt - początek App.xaml.cs public static MobileServiceClient MobileService = new MobileServiceClient("https://agilenotepad.azure-mobile.net/", "[kod AMS]");
  • 14. Projekt bazy danych Tabele : • Profile • Group • Connect • Job • Comments
  • 15.
  • 16. public class Comment { [DataMember(Name = "id")] public string IdComment { get; set; } public string Desc { get; set; } //foreign public string IdTask { get; set; } public string IdUser { get; set; } }
  • 17. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 19.
  • 20.
  • 21. Kod – stworzenie grupy 1. <Button x:Name="btnAddGroup" HorizontalAlignment="Left" Style="{StaticResource AddAppBarButtonStyle}" View:EventHandlers.Attach="Click => OpenAddGroupCharm()" /> public void OpenAddGroupCharm() {CharmService.OpenCharm("AddGroup");} 2. <StackPanel Margin="10,50,10,15"> <TextBlock>Name group</TextBlock> <TextBox Name="txtNameGroup" /> <Button Name="btnSaveName" Content="CREATE" CommandParameter="{Binding Path=Text,ElementName=txtNameGroup}" Command="{Binding AddNewGroup}"/> </StackPanel>
  • 22. 3.Wysłanie informacji o dodaniu grupy private DelegateCommand addNewGroup; public ICommand AddNewGroup { get { if (addNewGroup == null) { addNewGroup = new DelegateCommand((x) => { DispatchedMessenger.Instance.Send(new AddGroupMessage(x as String)); }); } return addNewGroup; } } Przechwycenie komunikatu [MessageHandler] public void BackgroundMessageHandler(AddGroupMessage message) { AddGroup(message.NameGroup); }
  • 23. public async void AddGroup(string NameG) { try { Group item = new Group { IdUser = MainSettings.user.UserId, Name = NameG }; await groupTable.InsertAsync(item); ListGroups.Add(item); MessageBoxService.Notify("Grupa została dodana", "Dodawanie grupy"); } catch (Exception e) { MessageBoxService.Notify(e.Message, "Dodawanie grupy"); } }
  • 24. public static MobileServiceClient MobileService = new MobileServiceClient("https://agilenotepad.azure-mobile.net/", ""); private IMobileServiceTable<Group> groupTable = App.MobileService.GetTable<Group>(); await groupTable.InsertAsync(item);
  • 25. function insert(item, user, request) { var groupTable = tables.getTable('Group'); groupTable.where({Name: item.Name}). read({success: checkName}); function checkName(results) { if (results.length > 0) { console.log("Nie dodawaj grupy"); request.respond(statusCodes.BAD_REQUEST,"Już istnieje taka grupa"); } else { console.log("Dodaj grupe"); request.execute(); } } }
  • 26. Kod - usunięcie grupy public static MobileServiceClient MobileService = new MobileServiceClient("https://agilenotepad.azure-mobile.net/", ""); private IMobileServiceTable<Group> groupTable = App.MobileService.GetTable<Group>(); Group item = new Group { id = xid }; await groupTable.DeleteAsync(item);
  • 27. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 28. Operacje CRUD - READ Wyświetlanie grupy zadaniowej do któej się należy lub się stworzyło. DEMO
  • 29. Kod – wyświetlenie grupy private IMobileServiceTable<Group> groupTable = App.MobileService.GetTable<Group>(); Dictionary<string, string> myParam = new Dictionary<string, string>(); myParam.Add("ifMyGroups", "true"); List<Group> list = await App.MobileService.GetTable<Group>(). Skip(0).WithParameters(myParam).ToListAsync(); Dictionary<string, string> myParam = new Dictionary<string, string>(); myParam.Add("ifMyGroups", "false"); List<Group> list = await App.MobileService.GetTable<Group>(). Skip(0).WithParameters(myParam).ToListAsync();
  • 30. function read(query, user, request) { if( request.parameters == null) console.log("Nie ma parametrow"); if(request.parameters.ifMyGroups == 'true') { query.where({ IdUser: user.userId }); request.execute(); console.log(„Pobrało moje grupy"); } else { var sql = "SELECT g.id, g.Name, g.IdUser FROM [agilenotepad].[Connect] c,[agilenotepad].[Group] g WHERE c.IdGroup = g.id AND c.IdUser = ?;"; mssql.query(sql, user.userId, { success: function(results) { request.respond(statusCodes.OK, results); } }); } }
  • 31. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 32. Operacje CRUD - UPDATE Zaktualizowanie profiu użytkownika DEMO
  • 33. Kod – tworzenie profilu public static MobileServiceClient MobileService = new MobileServiceClient("https://agilenotepad.azure-mobile.net/", ""); private IMobileServiceTable<Profile> profileTable; profileTable = App.MobileService.GetTable<Profile>(); profileTable.UpdateAsync(MainSettings.UserInformation);
  • 34. function update(item, user, request) { request.execute({ success: function() { request.respond(); push.wns.sendToastText04(item.channel, { text1: "Profil zaktualizowany" }, { success: function(pushResponse) { console.log(„Wysłana notyfikacja:", pushResponse); } }); } }); }
  • 35. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 36. Uwierzytelnianie w Mobile Services • Microsoft Account • Facebook login • Twitter login • Google login
  • 39. Ustawenia w Mobile Services
  • 40. Ustawenia w Mobile Services
  • 42. Kod – tworzenie konta po uwierzytelnieniu public static MobileServiceClient MobileService = new MobileServiceClient("https://agilenotepad.azure-mobile.net/", ""); MainSettings.user = await App.MobileService.LoginAsync(MobileServiceAuthenticationProvide r.Facebook); private IMobileServiceTable<Profile> profileTable = App.MobileService.GetTable<Profile>(); await profileTable.InsertAsync(entity);
  • 43. function insert(item, user, request) { var profileTable = tables.getTable('Profile'); profileTable.where({ IdUser: item.IdUser }).read({ success: checkPermissions }); function checkPermissions(results) { if (results.length > 0) { //console.log("Nie dodawaj użytkownika"); request.respond(); } else { //console.log("Dodaj użytkownika"); request.execute(); } } }
  • 44. Kod – pobieranie informacji o użytkowniku public static MobileServiceClient MobileService = new MobileServiceClient("https://agilenotepad.azure-mobile.net/", ""); private IMobileServiceTable<Profile> profileTable; profileTable = App.MobileService.GetTable<Profile>(); List<Profile> profileUsers = await (from p in profileTable where p.IdUser == MainSettings.user.UserId select p).ToListAsync(); function read(query, user, request) { request.execute(); }
  • 45. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 46. Kod – pobranie zadania z grupy taskTable = App.MobileService.GetTable<Job>(); MobileServiceTableQuery<Job> query = taskTable.Where(x => x.IdGroup == group.id);
  • 47. Kod dołączenie użytkownika do grupy connectTable = App.MobileService.GetTable<Connect>(); await connectTable.InsertAsync(new Connect { IdGroup = group.id, IdUser = id }); profileTable = App.MobileService.GetTable<Profile>(); List<Profile> l = await profileTable.Where(x => x.IdUser == id).Take(1).ToListAsync();
  • 48. Co można zrobić po stronie serwera • Walidacja • Czy grupa istnieje • Czy użytkownik już istnieje • Selekcja • Pobieranie grup do których należy grupowicz • Pobranie grup których właścicielem jest grupowicz • Notyfikacje • Wysłanie do wszyskich członków grupy informację o dodaniu zadania do grupy • Potwierdzenie zmiany profilu
  • 49. Skypty Pobranie grupy do ktorej należy użytkownik DEMO
  • 50. function read(query, user, request) { if(request.parameters.kindQuery === "PeopleInGroup") { var sql = 'SELECT p.id,p.Name,p.Email,p.IdUser,p.channel FROM [agilenotepad].[Profile] p,[agilenotepad].[Connect] c WHERE p.IdUser = c.IdUSer AND c.IdGroup = ?;'; mssql.query(sql, [request.parameters.numberGroup], { success: function(results) { request.respond(statusCodes.OK, results); } }); } else request.execute(); }
  • 51. Po za tym • Modyfikowad żądanie • Modyfikowad odpowiedź • Walidowad dane • Odczytywad i zapisywad dane osobno • Używad autoryzacji użytkownika • Używad notyfikacji push • Wysyład dodatkowe żądania HTTP • Wychwytywad błedy i debugowad kod
  • 52. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 54. Notyfikacje Push – Mobile Services
  • 55. Notyfikacje Push – aplikacja Notyfikacje push – wysyłanie informacji wszystkim członką grupy DEMO
  • 56. function insert(item, user, request) { console.log(item.id); request.execute( { success: function() { var sql = "SELECT p.channel FROM [agilenotepad].[Job] j,[agilenotepad].[Connect] c, [agilenotepad].[Profile] p WHERE p.IdUser = c.IdUser AND c.IdGroup = j.IdGroup AND j.id = ?"; mssql.query(sql, [item.id], { success: function(results) { if (results.length > 0) { for(var i=0;0< results.length;i++){ push.wns.sendToastText04(results[i].channel, { text1: 'new task' }, { success: function(pushResponse) { console.log("Sent push:", pushResponse); } }); } } } }); request.respond(); } } ); }
  • 57. Funkcjonalności • Uwierzytelnianie • Stworzenie profilu • Dodanie/usunięcie grupy • Wyświetlenie grup do których się należy lub się stworzyło • Dodanie/usunięce zadania z grupy • Dołączenie/usunięcie użytkownika z grupy • Poinformowanie grupowiczy o nowym zadaniu • Wysłanie maila informującego o zadaniach
  • 58. Wysyłanie maili z Sendgrid
  • 59. Wysyłanie maili z Sendgrid

Notes de l'éditeur

  1. O firmie Whalla
  2. START
  3. Azure Mobile Services to :- DATASCHEDULERPUSHIDENTITYCONFIGURESCALELOGS
  4. Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  5. Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  6. Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  7. Kroki po manage.windowsazure.comLogowanie do konta AzureStworzenie usługi Mobile Services (z bazą danych)Instalacja SDKStworzenie projektu aplikacji na W8, dwie możliwości nowa lub istniejącaDodanie odwołania do Mobile ServicesMożemy zacząć pisać appke wykorzystująć Azure Mobile Services
  8. Po wejściu do wybranego projektu Mobile Services możemy ściagnąć przykładowe projekty i tutoriale do WP8, W8, Android, iOS, HTML/Javascript.Co możemy zobaczyć w :DASHBOARDWykresy wykorzystania usługi Generate schemaPodstawowe informacje o usłudze jak adres, lokacje, id subscription itp.DATAPrzejście do odpowiednich tabelSCHEDULERUstawienia dla scheduleraPUSHUstawienia dla odpowiednich notyfikacji jak : MS, Apple, Google.IDENTITYUstawinie dla uwierzytelniania jak FB, Googl, MS i TwitterCONFIGUREUstawienia bazy danychDynamic SchemaMonitoringSCALEUstawienie czy system ma być skalowalny i na ile maszynZmiana typu bazy danychLOGInformację o zapisywanych logach przez Nas i automatycznie przez usługe
  9. Tabele tworzymy ręcznie a kolumny automatycznie.Każda tabla posiada 4 skrypty : create, update, read i deleteMożna ustawiać permission na tabele na każdą z operacji : everyone, anybody with the Application Key, Only Authenticated User, Only Scripts and Admins.
  10. Tabele tworzymy ręcznie a kolumny automatycznie.Każda tabla posiada 4 skrypty : create, update, read i deleteMożna ustawiać permission na tabele na każdą z operacji : everyone, anybody with the Application Key, Only Authenticated User, Only Scripts and Admins.
  11. Przykład kodu z tabelą
  12. Zaczynamy od dodania możliwości tworzenia grupy w aplikacji
  13. Zdebugować aplikacje
  14. Wczytywanie grup (READ)Dodanie kodu dla tytułu (XAML)Dodanie listy do wyświetlenia grup (XAML)Kod wczytujący grupy (VM)
  15. Mocno wspomagane skryptem po stronie serwera
  16. Wczytywanie grup (READ)Dodanie kodu dla tytułu (XAML)Dodanie listy do wyświetlenia grup (XAML)Kod wczytujący grupy (VM)
  17. Get started with authentication in Mobile ServicesTrzeba się każdorazowo logowaćStandardowo mamy dostępne 4 sposoby logowania.Linki :Microsoft AccountFacebook loginTwitter loginGoogle login
  18. Należy stworzyć aplikacje, dodać stronę i pobrać API Key
  19. Należy stworzyć aplikacje, dodać stronę i pobrać API Key
  20. Co trzeba zrobic po stronie Mobile Servcies :Dodać klucze do FBUstawić usprawnienia do tabelPo ustawieniu uprawnień na tabele przy usuwaniu pokazać jaki jest wynik kiedy tego nie dopilnujemy
  21. Co trzeba zrobic po stronie Mobile Servcies :Dodać klucze do FBUstawić usprawnienia do tabelPo ustawieniu uprawnień na tabele przy usuwaniu pokazać jaki jest wynik kiedy tego nie dopilnujemy
  22. Dodanie strony do uwierzytelnianiaNadanie mu statusu pierwszej uruchamianejStworzenie miejsca do przetrzymywania inforamcji o użytkowniku zalogowanymDodanie kodu do logowania
  23. INSERT function insert(item, user, request) {request.execute();}UPDATE function update(item, user, request) {request.execute();}DELETEfunction del(id, user, request) {request.execute();}READfunction read(query, user, request) {request.execute();}
  24. function read(query, user, request) { query.where({ IdUser: user.userId }); request.execute();}
  25. Rezerwacja nazwy w sklepieRejstracja w aplikacji , pobranie certyfikatuWybranie aplikacjiPobranie klucza do noyfikacji Push
  26. Notyfikacja wysyłana z każdym dodaniem zadania
  27. https://www.windowsazure.com/en-us/develop/mobile/tutorials/send-email-with-sendgrid/?fb=pl-pl
  28. https://www.windowsazure.com/en-us/develop/mobile/tutorials/send-email-with-sendgrid/?fb=pl-pl
  29. O firmie Whalla