Zaawansowany marketingw aplikacjach mobilnychna przykładzieVemma Office 3.0
VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów
VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów- pierwszy na świecie mobilny Multi ...
VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów- pierwszy na świecie mobilny Multi ...
VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów- pierwszy na świecie mobilny Multi ...
WYZWANIA PORELEASIE 2.0
WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników
WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych
WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych- optymali...
WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych- optymali...
WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych- optymali...
Vemma 2.0
Vemma 2.0Klasyczna nawigacja i UI oparty na tab barach
Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia kodu
Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia koduBrak miejsca na nowe funkcje
Vemma 3.0Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia koduBrak miejsca na n...
Zupełnie nowy layout i nawigacjaVemma 3.0Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ...
Zupełnie nowy layout i nawigacjaVemma 3.0Wsparcie iPhone 5Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKoniecznoś...
Zupełnie nowy layout i nawigacjaVemma 3.0Wsparcie iPhone 5Nowe funkcjeVemma 2.0Klasyczna nawigacja i UI oparty na tab bara...
Funkcjonalność
Funkcjonalność- obsługa bazy setek tys. kontaktów
Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji
Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email
Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna inter...
Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna inter...
Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna inter...
Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna inter...
Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email-...
Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email-...
Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email-...
Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email-...
Komunikacja aplikacjina przykładzie funkcjiEvents
Komunikacja aplikacjina przykładzie funkcjiEvents
YouTubeKomunikacja aplikacjina przykładzie funkcjiEvents
Europeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents
USA usersServerEuropeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents
USA usersServerEuropeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents Maps
USA usersServerEuropeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents MapsAPNSGCM
Skala ruchu
Skala ruchu80.000+ aktywni userzy
Skala ruchu130.000+ push notifications / mc80.000+ aktywni userzy
Skala ruchu130.000+ push notifications / mc80.000+ aktywni userzy400.000+ wiadomości hotlist / mc
Skala ruchu130.000+ push notifications / mc80.000+ aktywni userzy25.000 + API hits / h400.000+ wiadomości hotlist / mc
Skala ruchu100.000+ downloads130.000+ push notifications / mc80.000+ aktywni userzy25.000 + API hits / h400.000+ wiadomości...
Skala ruchu100.000+ downloads130.000+ push notifications / mc80.000+ aktywni userzy25.000 + API hits / h400.000+ wiadomości...
90.000+uruchomień dziennie
90.000+uruchomień dziennie0,002%współczynnik crashy
90.000+uruchomień dziennie0,002%współczynnik crashy70%crashe niewywołaneprzez aplikację
90.000+uruchomień dziennie0,002%współczynnik crashy70%crashe niewywołaneprzez aplikację
Optymalizacjadevelopmentu i kodu
Nowe funkcje iOSw aplikacji
Dlaczego iOS 6?
Dlaczego iOS 6?Wsparcie od iPhone 3GS
Dlaczego iOS 6?Wsparcie od iPhone 3GSNowe funkcje
Dlaczego iOS 6?Wsparcie od iPhone 3GSSzybka reakcja użytkownikówNowe funkcje
Wykorzystane funkcje iOS 6raywenderlich.com
Wykorzystane funkcje iOS 6Autolayoutraywenderlich.com
Wykorzystane funkcje iOS 6AutolayoutMapkitraywenderlich.com
Wykorzystane funkcje iOS 6AutolayoutMapkitSocial frameworkraywenderlich.com
Storyboards
StoryboardsSzybkie tworzeniewidoków i nawigacji
StoryboardsSzybkie tworzeniewidoków i nawigacjiŁatwe łączeniewidoków z kodem
StoryboardsSzybkie tworzeniewidoków i nawigacjiŁatwe łączeniewidoków z kodemMożliwość tłumaczeń(lokalizacja)
Oszczędność kodu
Oszczędność kodu
Rozbudowane Storyboardy
Rozbudowane Storyboardy43 różne ekrany
Rozbudowane Storyboardy43 różne ekranyProblem współdzielenia
Rozbudowane Storyboardy43 różne ekranyProblem współdzieleniaPodzielone na11 storyboardów
Podział na Storyboardy
CGRectMake
Autolayout
Autolayout
AutolayoutBrak autosizing mask
AutolayoutBrak autosizing maskProste reguły
AutolayoutBrak autosizing maskProste regułyPrecyzyjne wartości marginesów,wymiarów itp
AutolayoutBrak autosizing maskProste regułyPrecyzyjne wartości marginesów,wymiarów itpDobre wsparcie IB
Biblioteki i narzędzia
Uniwersalna aplikacja
Uniwersalna aplikacjaDobre rozdzieleniew Xcode
Uniwersalna aplikacjaDobre rozdzieleniew XcodeWspólna częśćkomunikacji i danych
Uniwersalna aplikacjaDobre rozdzieleniew XcodeWspólna częśćkomunikacji i danychPush notifications
Uniwersalna aplikacjaDobre rozdzieleniew XcodeWspólna częśćkomunikacji i danychWykorzystanieniektórychVCPush notifications
Android
Ewolucja mechanizmówkomunikacjiOd samodzielnegotworzenia zapytań doJsonCallbacks
Ręczne tworzenie zapytań
Ręczne tworzenie zapytańSamodzielne budowanie zapytań
Ręczne tworzenie zapytańSamodzielne budowanie zapytańParsowanie wyników prostym parseremwbudowanym w Android
Ręczne tworzenie zapytańSamodzielne budowanie zapytańParsowanie wyników prostym parseremwbudowanym w AndroidPodatność na b...
Ręczne tworzenie zapytańSamodzielne budowanie zapytańParsowanie wyników prostym parseremwbudowanym w AndroidPodatność na b...
Serializacja za pomocąGson
Serializacja za pomocąGsonSerializacja obiektów żądań
Serializacja za pomocąGsonSerializacja obiektów żądańDeserializacja odpowiedzi
Serializacja za pomocąGsonSerializacja obiektów żądańDeserializacja odpowiedziTworzenie klas reprezentujących parametryżąd...
JsonCallbacks
JsonCallbacksKomunikacja oparta na interfejsach i proxy
JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchroniczne
JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchronicznePrzejrzystość kodu
JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchronicznePrzejrzystość koduŁatwość wprowad...
JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchronicznePrzejrzystość koduŁatwość wprowad...
Przykład użycia
Implementacja wzorca obserwator
Implementacja wzorca obserwatorWyświetlenie prostych danych bez pisania kodu
Implementacja wzorca obserwatorWyświetlenie prostych danych bez pisania koduWsparcie dla aplikacji opartych na fragmentach
Implementacja wzorca obserwatorWyświetlenie prostych danych bez pisania koduWsparcie dla aplikacji opartych na fragmentach
Łączenie zapytań
Łączenie zapytańAutomatyczne i manualne
Łączenie zapytańAutomatyczne i manualneCzytelność kodu i zmniejszenie zużycia baterii
Łączenie zapytańAutomatyczne i manualneCzytelność kodu i zmniejszenie zużycia baterii
Cachowanie wyników
Cachowanie wynikówOkreślenie maksymalnej wielkości
Cachowanie wynikówOkreślenie maksymalnej wielkościKontrola czasu życia obiektów
Cachowanie wynikówOkreślenie maksymalnej wielkościKontrola czasu życia obiektów
Więcej możliwości- Obsługa Base64 przy przesyłaniu obiektów binarnych- Protokół HTTP(S) lub SPDY- Zapytania z parametrami ...
Open sourceBiblioteka JsonCallbacks jest już dostępna pod adresem:github.com/kubatatami/JsonCallbacks
Mniej znaczy więcejczyliAndroidAnnotations
view.findViewById(R.id.view_id)view.setOnClickListener(new View.OnClickListener())context.getSystemService(Context.NOTIFIC...
// Set layout.setContentView(R.layout.three_camp);// Fullscreenfeature.getWindow().setFlags(WindowManager.LayoutParams.FLA...
// Set layout.setContentView(R.layout.three_camp);// Fullscreenfeature.getWindow().setFlags(WindowManager.LayoutParams.FLA...
// Dostęp do TextView.TextView trzyCampTv = (TextView)findViewById(R.id.tv_trzy_camp);
// Dostęp do TextView.TextView trzyCampTv = (TextView)findViewById(R.id.tv_trzy_camp);@ViewById(R.id.tv_trzy_camp)TextView...
// Button onClick.Button button = (Button)findViewById(R.id.btn_trzy_camp);button.setOnClickListener(new View.OnClickListe...
// Button onClick.Button button = (Button)findViewById(R.id.btn_trzy_camp);button.setOnClickListener(new View.OnClickListe...
// OnTouch na image view.ImageView imageView = (ImageView)findViewById(R.id.imgv_trzy_camp);imageView.setOnTouchListener(n...
// OnTouch na image view.ImageView imageView = (ImageView)findViewById(R.id.imgv_trzy_camp);imageView.setOnTouchListener(n...
// Kliknięcie w item list view.listView.setOnItemClickListener(newAdapterView.OnItemClickListener() { @Override public v...
// Kliknięcie w item list view.listView.setOnItemClickListener(newAdapterView.OnItemClickListener() { @Override public v...
// Long click na itemie w list view.listView.setOnItemLongClickListener(newAdapterView.OnItemLongClickListener() {@Overrid...
// Long click na itemie w list view.listView.setOnItemLongClickListener(newAdapterView.OnItemLongClickListener() {@Overrid...
/ Zaznaczenie itemu list view.listView.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() { @Override pub...
/ Zaznaczenie itemu list view.listView.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() { @Override pub...
// Dostęp do obiektu application.MyApplication applicationApp = (MyApplication)getApplication();
// Dostęp do obiektu application.MyApplication applicationApp = (MyApplication)getApplication();@AppMyApplication applicat...
runOnUiThread(new Runnable() { @Override public void run() { // Kod do UI. }});
runOnUiThread(new Runnable() { @Override public void run() { // Kod do UI. }});@UiThreadprotected void stuffInUiThre...
Bundle bundle = new Bundle();bundle.putString("myString_key", "myString_value");...TrzyCampFragment fragment = new TrzyCam...
Bundle bundle = new Bundle();bundle.putString("myString_key", "myString_value");...TrzyCampFragment fragment = new TrzyCam...
@Overridepublic void onSaveInstanceState(BundlesavedInstanceState) {super.onSaveInstanceState(savedInstanceState);savedIns...
@Overridepublic void onSaveInstanceState(BundlesavedInstanceState) {super.onSaveInstanceState(savedInstanceState);savedIns...
http://www.coolfbcovers.nethttp://androidannotations.org/
DZIĘKUJEMYZA UWAGĘ!
 Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
 Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
 Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
 Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
 Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
 Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
 Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
of 148

Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0

Maciej Kowalski, Michał Waśniewski, Jacek Modrakowski i Jakub Bogacki - Implix - Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0
Published on: Mar 4, 2016
Source: www.slideshare.net


Transcripts - Zaawansowany marketing w aplikacjach mobilnych na przykładzie Vemma Office 3.0

  • 1. Zaawansowany marketingw aplikacjach mobilnychna przykładzieVemma Office 3.0
  • 2. VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów
  • 3. VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów- pierwszy na świecie mobilny Multi Level Marketing
  • 4. VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów- pierwszy na świecie mobilny Multi Level Marketing- pełen dostęp do wszystkich aktywności w sieci
  • 5. VEMMA OFFICEiPhone & AndroidAplikacja do zarządzaniabiznesem i binarną sieciąkontaktów- pierwszy na świecie mobilny Multi Level Marketing- pełen dostęp do wszystkich aktywności w sieci- zaawansowany marketing to interakcja z dystrybutorami
  • 6. WYZWANIA PORELEASIE 2.0
  • 7. WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników
  • 8. WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych
  • 9. WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych- optymalizacja kodu, komunikacjiz API oraz funkcjonalnościaplikacji
  • 10. WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych- optymalizacja kodu, komunikacjiz API oraz funkcjonalnościaplikacji- wsparcie dla nowych urządzeń inowych wersji mobilnychsystemów operacyjnych
  • 11. WYZWANIA PORELEASIE 2.0- rosnąca liczba użytkowników- zapotrzebowanie na mobilnydostęp do większej ilości danych- optymalizacja kodu, komunikacjiz API oraz funkcjonalnościaplikacji- wsparcie dla nowych urządzeń inowych wersji mobilnychsystemów operacyjnych-Vemma 3.0 - odpowiedź nawyzwania
  • 12. Vemma 2.0
  • 13. Vemma 2.0Klasyczna nawigacja i UI oparty na tab barach
  • 14. Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia kodu
  • 15. Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia koduBrak miejsca na nowe funkcje
  • 16. Vemma 3.0Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia koduBrak miejsca na nowe funkcje
  • 17. Zupełnie nowy layout i nawigacjaVemma 3.0Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia koduBrak miejsca na nowe funkcje
  • 18. Zupełnie nowy layout i nawigacjaVemma 3.0Wsparcie iPhone 5Vemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia koduBrak miejsca na nowe funkcje
  • 19. Zupełnie nowy layout i nawigacjaVemma 3.0Wsparcie iPhone 5Nowe funkcjeVemma 2.0Klasyczna nawigacja i UI oparty na tab barachKonieczność refactoringu i ulepszenia koduBrak miejsca na nowe funkcje
  • 20. Funkcjonalność
  • 21. Funkcjonalność- obsługa bazy setek tys. kontaktów
  • 22. Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji
  • 23. Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email
  • 24. Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist
  • 25. Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist- videozaproszenia
  • 26. Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist- videozaproszenia- push notifications jakobiznesowy feedback
  • 27. Funkcjonalność- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist- videozaproszenia- push notifications jakobiznesowy feedbackDesign na miarę potrzeb
  • 28. Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist- videozaproszenia- push notifications jakobiznesowy feedbackDesign na miarę potrzeb
  • 29. Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist- videozaproszenia- push notifications jakobiznesowy feedbackDesign na miarę potrzeb- metro tiles
  • 30. Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist- videozaproszenia- push notifications jakobiznesowy feedbackDesign na miarę potrzeb- metro tiles- autorskie rozwiązania (browse)
  • 31. Funkcjonalność- slide menu- obsługa bazy setek tys. kontaktów- liczne kanały komunikacji w aplikacji- telefon, sms, email- pełna interakcja: wiadomości hotlist- videozaproszenia- push notifications jakobiznesowy feedbackDesign na miarę potrzeb- metro tiles- autorskie rozwiązania (browse)- web views
  • 32. Komunikacja aplikacjina przykładzie funkcjiEvents
  • 33. Komunikacja aplikacjina przykładzie funkcjiEvents
  • 34. YouTubeKomunikacja aplikacjina przykładzie funkcjiEvents
  • 35. Europeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents
  • 36. USA usersServerEuropeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents
  • 37. USA usersServerEuropeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents Maps
  • 38. USA usersServerEuropeanusers ServerYouTubeKomunikacja aplikacjina przykładzie funkcjiEvents MapsAPNSGCM
  • 39. Skala ruchu
  • 40. Skala ruchu80.000+ aktywni userzy
  • 41. Skala ruchu130.000+ push notifications / mc80.000+ aktywni userzy
  • 42. Skala ruchu130.000+ push notifications / mc80.000+ aktywni userzy400.000+ wiadomości hotlist / mc
  • 43. Skala ruchu130.000+ push notifications / mc80.000+ aktywni userzy25.000 + API hits / h400.000+ wiadomości hotlist / mc
  • 44. Skala ruchu100.000+ downloads130.000+ push notifications / mc80.000+ aktywni userzy25.000 + API hits / h400.000+ wiadomości hotlist / mc
  • 45. Skala ruchu100.000+ downloads130.000+ push notifications / mc80.000+ aktywni userzy25.000 + API hits / h400.000+ wiadomości hotlist / mc25.000+ nowych klientówzapisanych przez aplikację(prospecting)
  • 46. 90.000+uruchomień dziennie
  • 47. 90.000+uruchomień dziennie0,002%współczynnik crashy
  • 48. 90.000+uruchomień dziennie0,002%współczynnik crashy70%crashe niewywołaneprzez aplikację
  • 49. 90.000+uruchomień dziennie0,002%współczynnik crashy70%crashe niewywołaneprzez aplikację
  • 50. Optymalizacjadevelopmentu i kodu
  • 51. Nowe funkcje iOSw aplikacji
  • 52. Dlaczego iOS 6?
  • 53. Dlaczego iOS 6?Wsparcie od iPhone 3GS
  • 54. Dlaczego iOS 6?Wsparcie od iPhone 3GSNowe funkcje
  • 55. Dlaczego iOS 6?Wsparcie od iPhone 3GSSzybka reakcja użytkownikówNowe funkcje
  • 56. Wykorzystane funkcje iOS 6raywenderlich.com
  • 57. Wykorzystane funkcje iOS 6Autolayoutraywenderlich.com
  • 58. Wykorzystane funkcje iOS 6AutolayoutMapkitraywenderlich.com
  • 59. Wykorzystane funkcje iOS 6AutolayoutMapkitSocial frameworkraywenderlich.com
  • 60. Storyboards
  • 61. StoryboardsSzybkie tworzeniewidoków i nawigacji
  • 62. StoryboardsSzybkie tworzeniewidoków i nawigacjiŁatwe łączeniewidoków z kodem
  • 63. StoryboardsSzybkie tworzeniewidoków i nawigacjiŁatwe łączeniewidoków z kodemMożliwość tłumaczeń(lokalizacja)
  • 64. Oszczędność kodu
  • 65. Oszczędność kodu
  • 66. Rozbudowane Storyboardy
  • 67. Rozbudowane Storyboardy43 różne ekrany
  • 68. Rozbudowane Storyboardy43 różne ekranyProblem współdzielenia
  • 69. Rozbudowane Storyboardy43 różne ekranyProblem współdzieleniaPodzielone na11 storyboardów
  • 70. Podział na Storyboardy
  • 71. CGRectMake
  • 72. Autolayout
  • 73. Autolayout
  • 74. AutolayoutBrak autosizing mask
  • 75. AutolayoutBrak autosizing maskProste reguły
  • 76. AutolayoutBrak autosizing maskProste regułyPrecyzyjne wartości marginesów,wymiarów itp
  • 77. AutolayoutBrak autosizing maskProste regułyPrecyzyjne wartości marginesów,wymiarów itpDobre wsparcie IB
  • 78. Biblioteki i narzędzia
  • 79. Uniwersalna aplikacja
  • 80. Uniwersalna aplikacjaDobre rozdzieleniew Xcode
  • 81. Uniwersalna aplikacjaDobre rozdzieleniew XcodeWspólna częśćkomunikacji i danych
  • 82. Uniwersalna aplikacjaDobre rozdzieleniew XcodeWspólna częśćkomunikacji i danychPush notifications
  • 83. Uniwersalna aplikacjaDobre rozdzieleniew XcodeWspólna częśćkomunikacji i danychWykorzystanieniektórychVCPush notifications
  • 84. Android
  • 85. Ewolucja mechanizmówkomunikacjiOd samodzielnegotworzenia zapytań doJsonCallbacks
  • 86. Ręczne tworzenie zapytań
  • 87. Ręczne tworzenie zapytańSamodzielne budowanie zapytań
  • 88. Ręczne tworzenie zapytańSamodzielne budowanie zapytańParsowanie wyników prostym parseremwbudowanym w Android
  • 89. Ręczne tworzenie zapytańSamodzielne budowanie zapytańParsowanie wyników prostym parseremwbudowanym w AndroidPodatność na błędy
  • 90. Ręczne tworzenie zapytańSamodzielne budowanie zapytańParsowanie wyników prostym parseremwbudowanym w AndroidPodatność na błędyNiepotrzebny nakład pracy
  • 91. Serializacja za pomocąGson
  • 92. Serializacja za pomocąGsonSerializacja obiektów żądań
  • 93. Serializacja za pomocąGsonSerializacja obiektów żądańDeserializacja odpowiedzi
  • 94. Serializacja za pomocąGsonSerializacja obiektów żądańDeserializacja odpowiedziTworzenie klas reprezentujących parametryżądania
  • 95. JsonCallbacks
  • 96. JsonCallbacksKomunikacja oparta na interfejsach i proxy
  • 97. JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchroniczne
  • 98. JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchronicznePrzejrzystość kodu
  • 99. JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchronicznePrzejrzystość koduŁatwość wprowadzania zmian
  • 100. JsonCallbacksKomunikacja oparta na interfejsach i proxyNacisk na podejście asynchronicznePrzejrzystość koduŁatwość wprowadzania zmianNiska podatność na błędy
  • 101. Przykład użycia
  • 102. Implementacja wzorca obserwator
  • 103. Implementacja wzorca obserwatorWyświetlenie prostych danych bez pisania kodu
  • 104. Implementacja wzorca obserwatorWyświetlenie prostych danych bez pisania koduWsparcie dla aplikacji opartych na fragmentach
  • 105. Implementacja wzorca obserwatorWyświetlenie prostych danych bez pisania koduWsparcie dla aplikacji opartych na fragmentach
  • 106. Łączenie zapytań
  • 107. Łączenie zapytańAutomatyczne i manualne
  • 108. Łączenie zapytańAutomatyczne i manualneCzytelność kodu i zmniejszenie zużycia baterii
  • 109. Łączenie zapytańAutomatyczne i manualneCzytelność kodu i zmniejszenie zużycia baterii
  • 110. Cachowanie wyników
  • 111. Cachowanie wynikówOkreślenie maksymalnej wielkości
  • 112. Cachowanie wynikówOkreślenie maksymalnej wielkościKontrola czasu życia obiektów
  • 113. Cachowanie wynikówOkreślenie maksymalnej wielkościKontrola czasu życia obiektów
  • 114. Więcej możliwości- Obsługa Base64 przy przesyłaniu obiektów binarnych- Protokół HTTP(S) lub SPDY- Zapytania z parametrami nazwanymi i nienazwanymi- Optymalizacja wywołań na podstawie zebranych statystyk- Obsługa standardu JSON-RPC 1.1 i 2.0 oraz metody GET- Automatyczne dołączanie klucza uwierzytelniającego- Kompatybilność z systemem Android w wersji 2.x+
  • 115. Open sourceBiblioteka JsonCallbacks jest już dostępna pod adresem:github.com/kubatatami/JsonCallbacks
  • 116. Mniej znaczy więcejczyliAndroidAnnotations
  • 117. view.findViewById(R.id.view_id)view.setOnClickListener(new View.OnClickListener())context.getSystemService(Context.NOTIFICATION_SERVIConSaveInstanceState(Bundle) / onRestoreInstanceState(Bundle)listView.setOnItemSelectedListener(AdapterView.OnItemSelectedListener)new Thread(Runnable()).start() / Handler.post(Runnable)
  • 118. // Set layout.setContentView(R.layout.three_camp);// Fullscreenfeature.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);// NoTitle feature.getWindow().requestFeature(Window.FEATURE_NO_TITLE);
  • 119. // Set layout.setContentView(R.layout.three_camp);// Fullscreenfeature.getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,WindowManager.LayoutParams.FLAG_FULLSCREEN);// NoTitle feature.getWindow().requestFeature(Window.FEATURE_NO_TITLE);@HierarchyViewerSupport // AA 3.0@Fullscreen@NoTitle@EActivity(R.layout.three_camp)public class TCActivity extends FragmentActivity { ...}
  • 120. // Dostęp do TextView.TextView trzyCampTv = (TextView)findViewById(R.id.tv_trzy_camp);
  • 121. // Dostęp do TextView.TextView trzyCampTv = (TextView)findViewById(R.id.tv_trzy_camp);@ViewById(R.id.tv_trzy_camp)TextView trzyCampTv;
  • 122. // Button onClick.Button button = (Button)findViewById(R.id.btn_trzy_camp);button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { // Handle on click. }});
  • 123. // Button onClick.Button button = (Button)findViewById(R.id.btn_trzy_camp);button.setOnClickListener(new View.OnClickListener(){ @Override public void onClick(View view) { // Handle on click. }});@Click(R.id.btn_trzy_camp)protected void handleButtonClick(View clickedView) { // Handle on click.}
  • 124. // OnTouch na image view.ImageView imageView = (ImageView)findViewById(R.id.imgv_trzy_camp);imageView.setOnTouchListener(newView.OnTouchListener() { @Override public boolean onTouch(View view, MotionEventmotionEvent) { // Handle on touch. return false; }});
  • 125. // OnTouch na image view.ImageView imageView = (ImageView)findViewById(R.id.imgv_trzy_camp);imageView.setOnTouchListener(newView.OnTouchListener() { @Override public boolean onTouch(View view, MotionEventmotionEvent) { // Handle on touch. return false; }});@Touch(R.id.imgv_trzy_camp)protected boolean onViewTouch(MotionEvent motionEvent, View touchedView) { // Handle on touch. return true;}
  • 126. // Kliknięcie w item list view.listView.setOnItemClickListener(newAdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?>adapterView, View view, int i, long l) { // Handle click. }});
  • 127. // Kliknięcie w item list view.listView.setOnItemClickListener(newAdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?>adapterView, View view, int i, long l) { // Handle click. }});@ItemClick(R.id.lv_trzy_camp)protected void handleListViewItemClick(int clickedPosition) { // Handle click.}
  • 128. // Long click na itemie w list view.listView.setOnItemLongClickListener(newAdapterView.OnItemLongClickListener() {@Override public boolean onItemLongClick(AdapterView<?>adapterView, View view, int i, long l) { // Handle long click. return false; }});
  • 129. // Long click na itemie w list view.listView.setOnItemLongClickListener(newAdapterView.OnItemLongClickListener() {@Override public boolean onItemLongClick(AdapterView<?>adapterView, View view, int i, long l) { // Handle long click. return false; }});@ItemLongClick(R.id.lv_trzy_camp)protected void handleListViewItemLongClick(int clickedPosition) { // Handle long click.}
  • 130. / Zaznaczenie itemu list view.listView.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?>adapterView, View view, int i, long l) { // Handle selected item. } @Override public void onNothingSelected(AdapterView<?>adapterView) { // Other. }
  • 131. / Zaznaczenie itemu list view.listView.setOnItemSelectedListener(newAdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?>adapterView, View view, int i, long l) { // Handle selected item. } @Override public void onNothingSelected(AdapterView<?>adapterView) { // Other. }@ItemSelect(R.id.lv_trzy_camp)protected void handleListViewItemSelect(boolean isSelect, intselectedPosition) { // Handle selected item.}
  • 132. // Dostęp do obiektu application.MyApplication applicationApp = (MyApplication)getApplication();
  • 133. // Dostęp do obiektu application.MyApplication applicationApp = (MyApplication)getApplication();@AppMyApplication applicationApp;
  • 134. runOnUiThread(new Runnable() { @Override public void run() { // Kod do UI. }});
  • 135. runOnUiThread(new Runnable() { @Override public void run() { // Kod do UI. }});@UiThreadprotected void stuffInUiThread() { // Kod do UI.}
  • 136. Bundle bundle = new Bundle();bundle.putString("myString_key", "myString_value");...TrzyCampFragment fragment = new TrzyCampFragment();fragment.setArguments(bundle);
  • 137. Bundle bundle = new Bundle();bundle.putString("myString_key", "myString_value");...TrzyCampFragment fragment = new TrzyCampFragment();fragment.setArguments(bundle);TrzyCampFragment_.builder().myString("myString_value").build();@FragmentArgString myString;
  • 138. @Overridepublic void onSaveInstanceState(BundlesavedInstanceState) {super.onSaveInstanceState(savedInstanceState);savedInstanceState.putBoolean("MyBoolean",myBoolean);...}@Overridepublic void onRestoreInstanceState(BundlesavedInstanceState) {super.onRestoreInstanceState(savedInstanceState);myBoolean =savedInstanceState.getBoolean("MyBoolean");...
  • 139. @Overridepublic void onSaveInstanceState(BundlesavedInstanceState) {super.onSaveInstanceState(savedInstanceState);savedInstanceState.putBoolean("MyBoolean",myBoolean);...}@Overridepublic void onRestoreInstanceState(BundlesavedInstanceState) {super.onRestoreInstanceState(savedInstanceState);myBoolean =savedInstanceState.getBoolean("MyBoolean");...@InstanceStateboolean myBoolean;
  • 140. http://www.coolfbcovers.nethttp://androidannotations.org/
  • 141. DZIĘKUJEMYZA UWAGĘ!

Related Documents